*.localドメインを確認してIPをpingできますが、ドメインをpingできません。

*.localドメインを確認してIPをpingできますが、ドメインをpingできません。

*を取得しようとしています。。地元のvagrant-dnsでDNSサーバーを使用するには、ドメインを使用してください。動作させるために、dnsmasqがその前で実行されるように設定しました。

NetworkManagerがインストールされましたが、次のように設定されました。dns=none

解決.conf:

nameserver 127.0.0.1 #this points to dnsmasq

テストソリューション:

$ nslookup domain.local
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   domain.local
Address: 10.222.222.22

Digは同じ問題を解決します。

$ dig domain.local

; <<>> DiG 9.10.3-P4-Debian <<>> domain.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18052
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;domain.local.      IN  A

;; ANSWER SECTION:
domain.local.   86400   IN  A   10.222.222.22

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Jan 29 19:18:52 CST 2017
;; MSG SIZE  rcvd: 49

正確な住所です。 IPにpingを送信できます。

ping 10.222.222.22
PING 10.222.222.22 (10.222.222.22) 56(84) bytes of data.
64 bytes from 10.222.222.22: icmp_seq=1 ttl=64 time=0.185 ms

ただし、次のアドレスにpingを送信することはできません。

$ ping domain.local
ping: domain.local: Name or service not known

また、ブラウザでホストされているページを読み込もうとしましたが、DNSエラーが発生しました。奇妙なことに、他のすべてのサイトは正常に動作しているようです。ただし、そのサイトがlocalhost DNSサーバーを使用しているかどうかはわかりません。

Debian 8 の使用 Jessie/テスト

答え1

答えを見つけました!したがって、ほとんどの人は、/etc/hostsファイルがDNSサーバーのようにドメインをチェックすることに気付くでしょう。しかし、システムはこのファイルを見つける方法をどのように知っていますか?ファイルやDNSサーバーをどのような順序で表示するのか、どうすればわかりますか?

ファイルがあります:/etc/nsswitch.conf

私にはこんな言葉があります:

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

これは、/etc/hosts などのファイルを最初にチェックすることを意味します。次に、システムのホスト名を確認します。そしてmdns4がありますが、私の考えでは、ローカルネットワーク上の他のコンピュータを見つけるために使用されるプロトコルだと思います。

mdns4が私を邪魔しています。[NOTFOUND=return]。 mdnsはで終わる名前を探します.local。見つからない場合は、次の方法と最終的な検索方法に渡されるだけでなく、dns実際に停止し、システムにドメインが存在しないことを知らせます。 dnsmasqに設定したドメインはドメインなので、.local決してそこに到達しません。

したがって、この問題を解決するには2つの方法があります。最初は削除です[NOTFOUND=return]。それが私がこれを選んだ方法で、とても素敵に動作します。 mdnsが見て.local渡す前に探してみようとしているので、少し遅れていますdns

現在私のファイルは次のとおりです。

hosts:          files myhostname mdns4_minimal dns

別のオプションは、実際にはmdnsを使用しないため、mdnsを完全に削除したり、別のtldを使用するように指示する方法があることです。.alocalしかし、そうすればmdnsを効果的に無効にすることができると思います。

答え2

私の場合は、複数のネームサーバー行があり、/etc/resolv.conf私が使用したい行は最初の行にありました。

私は指示を読んで、次のように言いました。

複数のサーバーがある場合、パーサーライブラリはリストされた順序で照会します。

しかし、私はそれが常に最後のネームサーバーを最初に選択することを発見しました。

だから路線を逆に変えました。/etc/resolv.conf

問題が解決しました。

答え3

RFCによると、ドメイン名にアンダースコアを使用することはできません。私が知る限り、これは問題です。名前を確認するために独自の方法を使用してもdig大丈夫nslookupです。 Pingはシステムライブラリを使用しますが、失敗します。実際、名前の一部が下線で始まるか終わる場合、pingは解析できません。

答え4

ユースケースの小さなサブセット(例:Fedora Core 31、長いアップグレード履歴)では、問題は、nss-mdnsavahi-daemonソケットへのパスがハードコーディングされているが別のソケットパスを指定したこと/var/run/avahi-daemon/socketです。/usr/lib/systemd/system/avahi-daemon.socket

ListenStream=/run/avahi-daemon/socket

/var/runそして、シンボリックリンク/run(または/var/run/avahi-daemonシンボリックリンク)しないと/run/avahi-daemon接続されません。以下の返信を書いて偶然にこの内容を発見しました。Red Hat バグジラのバグそして走っている

strace  -e open,openat,connect,read /usr/bin/getent hosts MY_PRINTER_NODE.local

開発者/メンテナンス者のための有用な情報を十分にデバッグし、準備中に接続が失敗することがわかりました。

connect(3, {sa_family=AF_UNIX, sun_path="/var/run/avahi-daemon/socket"}, 110) = -1 ENOENT (No such file or directory)

好奇心にnsswitch.conf次の行を使用しました。

hosts:      files mdns4 [NOTFOUND=return] dns myhostname

/etc/mdns.allowファイルがあります。

.local
.local.

ここでは、他のフォーラムや質問に記載されている他のすべての方法を試してみましたが、何も機能しません。これを行った後:

ln -s /run/avahi-daemon /var/run/avahi-daemon

名前.local解決は、サービスを再起動しなくても機能し、ping機能します。getent

ListenStreamパスを変更してもかまいませんが、/usr/lib/systemd/system/avahi-daemon.socketインストール時にこれがデフォルトです。これが私がしなければならない長期的な解決策であるかどうかはまだ決定していませんが、これが他の貧しい魂に役立つことを願っています。

関連情報