「pingundefinedhost」と「curlundefinedhost」(例:libc「gethostbyname」)が失敗するのではなく、ローカルホストにping /接続するのはなぜですか?

Aug 24 2020

私は古いUbuntu16.04(LTS)をインストールしていますが、今日、pingとcurlが(libcによって)通知されていることに気付きました。不明なホストのIPはローカルホストのIPと同じです(例: "nslookup $(</ etc / hostname) ")。

「nslookup」と「dig」は「NXDOMAIN」を正しく報告します。

/etc/nsswitch.conf、私は持っています

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

/etc/hosts このように見えます:

127.0.0.1 localhost.localdomain localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

/etc/hostname:host1.mydomain.net

(実績値から変更)

そして/etc/resolv.conf次のようになります:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 213.133.98.98
nameserver 213.133.99.99
nameserver 213.133.100.100

curl https://undefinedhost印刷されたとき、私は今日完全に混乱しました

curl: (51) SSL: certificate subject name (host1.mydomain.net) does not match target host name 'undefinedhost'

ping undefinedhost私が理解し始めた出力を見たときだけ、何が起こっているようです:

$ ping unknownhost
PING host1.mydomain.net (138.201.175.226) 56(84) bytes of data.
64 bytes from host1.mydomain.net (138.201.175.226): icmp_seq=1 ttl=63 time=0.237 ms

最後に、dig期待どおりに動作します。

$ dig unresolvedhost @213.133.98.98
; <<>> DiG 9.10.3-P4-Ubuntu <<>> unresolvedhost @213.133.98.98
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 28972

誰かがこれがうまくいかないかもしれないところにいくつかの光を当てることができますか?

回答

Patrick Sep 06 2020 at 19:48

説明は、このマシンが存在するローカルドメイン(mydomain.netなど)の下に構成したワイルドカードサブドメインと組み合わせた、暗黙的なホスト名ルックアップドメイン検索リストの存在です。

引用man resolv.conf

検索リストは通常​​、ローカルドメイン名から決定されます。デフォルトでは、ローカルドメイン名のみ含まれます

ローカルバインドサーバーを実行していて、ドメインが登録されてアクティブになっています。私/etc/bind/local/db.mydomain.netはこのように見えます:

...
@   IN  SOA mydomain.net. ....
...
host1   IN  A   138.201.175.226
*   IN  CNAME   host1.mydomain.net.
....

したがって、この動作は完全に正しく、予想されます。私はただ混乱しました。:-)