Perché "ping undefinedhost" e "curl undefinedhost" (ad es. libc "gethostbyname") eseguono il ping / contect sull'host locale invece di fallire?
Ho una vecchia installazione di Ubuntu 16.04 (LTS) e oggi ho notato che a ping e curl viene detto (da libc, suppongo), che l'IP di qualsiasi host sconosciuto è uguale all'IP dell'host locale (ad esempio "nslookup $(</etc/hostname)").
"nslookup" e "dig" riportano correttamente "NXDOMAIN".
In /etc/nsswitch.conf
, ho
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
Somiglia a questo:
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.miodominio.net
(modificato dal valore effettivo)
E /etc/resolv.conf
sembra:
# 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
Ero totalmente confuso oggi, quando curl https://undefinedhost
stampato
curl: (51) SSL: certificate subject name (host1.mydomain.net) does not match target host name 'undefinedhost'
Solo quando ho visto l'output di ping undefinedhost
ho iniziato a capire cosa sembra stia succedendo:
$ 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
Infine, dig
si comporta anche come previsto:
$ 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
Qualcuno può far luce su dove potrebbe andare storto?
Risposte
La spiegazione è l'esistenza di un elenco di ricerca del dominio di ricerca del nome host implicito in combinazione con il sottodominio jolly che ho configurato nel dominio locale in cui si trova questa macchina, ad esempio mydomain.net.
Citando man resolv.conf
:
L'elenco di ricerca è normalmente determinato dal nome di dominio locale; per impostazione predefinita, contiene solo il nome del dominio locale .
Ho un server di bind locale in esecuzione e il mio dominio è registrato e attivo. Il mio /etc/bind/local/db.mydomain.net
assomiglia a questo:
...
@ IN SOA mydomain.net. ....
...
host1 IN A 138.201.175.226
* IN CNAME host1.mydomain.net.
....
Pertanto, questo comportamento è totalmente corretto e previsto. Ero solo confuso. :-)