avahi:pingはhostnameを解決できませんが、nslookupは解決できます


39

ping URL内のホスト名( "ping:unknown host domain.company.local")を解決できないが、使用している場合 host または nslookup コマンドライン上の同じコンピュータ上では、解像度は正常に機能します(つまり、高速で信頼性があります)。

何がこれを引き起こしているのでしょうか?

その他のテスト:Firefox、 wget そして ping 同じ問題があります。 IPアドレスをpingします。

OS:Linux(Ubuntu 13.04)

編集 俺の /etc/resolv.conf 読みます:

nameserver 127.0.1.1
search domain.company.local

netstat レポート:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      -               

そのため、このポートで何かが実行されています( nslookup それが使用することも報告します 127.0.1.1 DNSサーバーとして)

ありません /etc/*inetd.confだから、私はどのアプリケーションがこのポートを扱っているかわからない。

のようだ dnsmasq 使用されている:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces
   --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1
   --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec
   --enable-dbus=org.freedesktop.NetworkManager.dnsmasq
   --conf-dir=/etc/NetworkManager/dnsmasq.d

すべての設定ファイルとフォルダは空です。から nslookup 使用していると言う 127.0.1.1#53 私の推測はそれです dnsmasq 設定がなくても動作します。しかし、どの親DNSに問い合わせるのか、どうやって知るのでしょうか。

編集2 無効にする dnsmasq harrymcによって示唆されたように助けにはならなかった。だから走った strace ping これは私にこの奇妙な出力を与えました(ちょうど面白い部分):

open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
read(4, "127.0.0.1\tlocalhost\n#127.0.1.1\ta"..., 4096) = 613
...
open("/lib/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\f\0\0\0\0\0\0"..., 832) = 832
...
mmap(NULL, 2105560, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x7f7829b00000
...
socket(PF_FILE, SOCK_STREAM, 0)         = 4
fcntl(4, F_GETFD)                       = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
connect(4, {sa_family=AF_FILE, path="/var/run/avahi-daemon/socket"}, 110) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f782a4f8000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "RESOLVE-HOSTNAME-IPV4 domain.com"..., 44) = 44
read(4, "-15 Timeout reached\n", 4096)  = 20

そう ping に見える /etc/hosts これは理にかなっています。それからロードして mmap()/lib/libnss_mdns4_minimal.so.2 これも意味があります。

しかし、それからそれはavahiと話します!

これは私をこのフォーラム投稿に導いた: pingはDNS要求をしません

俺の /etc/nsswitch.conf この行も含まれています:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

もし私が ping ワーキングアドレス、私はプロセスもロードすることがわかります /lib/libnss_mdns4_minimal.so.2 しかしそれから、ポート53経由でDNSクエリを実行します。

だから私の推測は今 /lib/libnss_mdns4_minimal.so.2 どういうわけか、IPアドレスがで終わることに気づいている .local ではなく .com それから [NOTFOUND=return] トリガーされます。

どうすればこれを修正できますか?


あなたの中にあるもの /etc/resolv.conf
Joseph R.

どちらが正しいですか? すべき ホスト名が解決されるかどうかあなたは私たちに2つの全く異なる問題のどちらがあるのか​​を話しませんでした。 (そしてそれが すべき 解決し、できるだけ詳細に説明する どうやって そして なぜ それが解決しなければならない、なぜならそれはなぜそれがしないのかの説明につながるだろう。)
David Schwartz

...そしてあなたのHTTPプロキシ設定はChrome、Firefox、そして wget
JdeBP

@ DavidSchwartz:私は解決することを期待しています。わからないこと nslookup または host システム上の名前と他の何かを解決することはできません。
Aaron Digulla

1
コンピュータを介して他のデバイスや仮想マシンと接続を共有していない場合は、Network Managerでdnsmasqを無効にすることができます。編集する /etc/NetworkManager/NetworkManager.conf そしてコメントを dns=dnsmasq 行(先頭に#を付ける)をしてから、 sudo restart network-manager。それはローカルリゾルバをオフにします。 ( ソース
harrymc

回答:


32

で詳細に説明されているように このブログ記事 編集する必要があります /etc/avahi/avahi-daemon.conf

[server]
domain-name=.alocal

これはデーモンをドメインにバインドします .alocal デフォルトの代わりに .local

そしてデーモンを再起動します。

sudo service avahi-daemon restart

ブログ投稿からのメモ:

あなたはそれらの内部キャッシュをクリアするためにあなたのウェブブラウザを再起動するのと同様にDNS、mDNSとリゾルバキャッシュをフラッシュする必要があるかもしれません。

その後、 ping そして nslookup 同意し始めた。

ありがとう Harrymc 私を正しい軌道に乗せるために。


1
また、注意してください、 ping nssを使います。 nslookup ではない。 (それはlwresを使用し、そして、まあ、bind、リゾルバと直接話すために)
Ricky Beam

私にとっては、ローカルで無効にするのではなく、正しく設定する方が理にかなっています。
keiki

@ otakun85:そして、どうすればいいですか。
Aaron Digulla

@AaronDigullaあなたはそれを設定しましたそして現在の最高の投票された回答はそれをローカルに無効にしています。
keiki

2
これは素晴らしいです。本当にありがとう。この記事を見つける前に何時間もこれと戦った。
fpghost

11

/etc/nsswitch.confを修正して、次のように置き換えます。

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

によって:

hosts:          files dns

私のために働いた。


これは、代償として機能します。 AVAHIサービス
Aaron Digulla

8

やさしいこと:編集 /etc/default/avahi-daemon

行を変更してください。

AVAHI_DAEMON_DETECT_LOCAL=1

AVAHI_DAEMON_DETECT_LOCAL=0

再起動 avahi-daemonまたは殺す

私はAvahiが嫌いで、その機能は一切使用していません。本当にavahiを無効にしたい場合は、修正してください。 /etc/init/avahi-daemon.conf次のようになります。

start on (never 
          and filesystem
      and started dbus)
stop on stopping dbus

2
あなたがここに「感謝」のコメントを入れることになっていないのであれば、私は気にしません。私はちょうど私の感謝とあなたが私を救ったどのくらいの時間とエネルギーを表現したいと思いました。どうもありがとうございます!私は、会社のVPNを使ってモールから緊急事態に取り組むことを考えていましたが、私が試みようと思ったことすべてにもかかわらず、私たちのサイトのいくつかを動かすことができませんでした。私は自分でこれを理解することができなかったでしょう、それは確かです...
eresonance

7

ローカルアドレスはubuntuではアクセスできないようです。

解決策は編集することです /etc/nsswitch.conf そしてこの行を変更します。

hosts:          files mdns4_minimal [NOTFOUND=return] dns

これで :

hosts:          files dns

この種の私のために働いた。私の場合は、hosts行に "files resolve [!UNAVAIL = return] mdns4_minimal [NOTFOUND = return] dns"と表示されていて、それを "files mdns4_minimal [NOTFOUND = return] dns"に変更するとうまくいきました。正しい方向へのポインタをありがとう。
Andorbal

上記の他の答えを試してみました(これは救済である)avahiを無効にし、それでも問題を抱えていました。この答えは私のためにそれを解決しました。ありがとう
Adam Plocher

3

コンピュータを介して他のデバイスや仮想マシンと接続を共有していない場合は、Network Managerでdnsmasqを無効にすることができます。

編集する /etc/NetworkManager/NetworkManager.conf そしてその行をコメントしてください(それの前に#を入れてください):

dns=dnsmasq

それからする:

sudo restart network-manager

それはローカルリゾルバをオフにします。

ソース: Ubuntu 12.04でのDNS


1

私は同じ症状(ping、mountなどは動作していないが、host、digは動作している)で興味深いケースを経験しました。の権限を確認 /etc/resolv.conf ファイル。私の場合、誰かがそれを変更しました、そして私はそれを読む権利がありませんでした cat /etc/resolv.conf そしてファイルを編集することはうまくいきました)。

とにかく、straceは示していました:

open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)

そしてその結果、resolv.confファイルからIPアドレスの代わりにlocalhost(127.0.0.1)を問い合わせようとしていました。

socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
poll([{fd=4, events=POLLOUT}], 1, 0)    = 1 ([{fd=4, revents=POLLOUT}])

そして tcpdump pingを実行してもDNSトラフィックが表示されませんでした。すべてが権限の修正後に機能しています。

# chmod 644 /etc/resolv.conf
# ls -l /etc/resolv.conf
-rw-r--r-- 1 root root 111 Oct  3 09:54 /etc/resolv.conf

別の問題は、ファイルの拡張属性またはその他のアクセス問題です。その場合は、/ etc / resolv.confファイルを削除して、最初から作成し直してください。


私は一つのサーバーを持っていたことをもう一つの問題は、すべてのルートフォルダがそれらのそれらを失っていたということでした x このため、多くのバイナリが正しく動作しませんでした。修正は chmod +x /*
Silex

1

だから私の推測では/lib/libnss_mdns4_minimal.so.2はどういうわけか   IPアドレスが.comではなく.localで終わっていることに気付いた   その後、[NOTFOUND = return]がトリガされます。

どうすればこれを修正できますか?

かなりいいと思いますが、他の答えはやり過ぎです。簡単な解決策は、実際にトリガーされたビットを削除することです。 ただ [NOTFOUND=return]

それを削除すると、 mdns4_minimal 戻る NOTFOUNDリゾルバリストの次のエントリが使用されます。これは通常の動作です。 [NOTFOUND=return] 未知の名前を早く失敗させるための最適化ですが、すべてを前提としています。 .local 名前はmDNSにあります。


0

もう1つの理由は、 /etc/hosts。 IPとホスト名の間にスペースがないことを確認してください。代わりにTABを使用してください。 TABに変更した後、ホスト名はpingによって解決できます。

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

それは答えかもしれませんが、それはコメントとしてフォーマットされています...
Francisco Tapia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.