ping
memberitahu saya bahwa itu tidak dapat menyelesaikan beberapa nama host ("ping: unknown host domain.company.local") di URL tetapi ketika saya menggunakan host
atau nslookup
di komputer yang sama pada baris perintah, resolusi berfungsi dengan baik (yaitu cepat dan dapat diandalkan ).
Apa yang menyebabkan ini?
Lebih banyak pengujian: Firefox, wget
dan ping
memiliki masalah yang sama. Mem-ping alamat IP berfungsi.
OS: Linux (Ubuntu 13.04)
Sunting Saya /etc/resolv.conf
membaca:
nameserver 127.0.1.1
search domain.company.local
netstat
laporan:
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 -
jadi ada sesuatu yang berjalan pada port ini ( nslookup
juga melaporkan digunakan 127.0.1.1
sebagai server DNS).
Tidak ada /etc/*inetd.conf
, jadi saya tidak yakin aplikasi mana yang melayani port ini.
Tampaknya yang dnsmasq
digunakan:
/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
Semua file dan folder konfigurasi kosong. Karena nslookup
katanya menggunakan 127.0.1.1#53
tebakan saya yang dnsmasq
bekerja bahkan tanpa konfigurasi. Tapi bagaimana cara mengetahui DNS induk yang diminta?
EDIT2 Menonaktifkan dnsmasq
seperti yang disarankan oleh harrymc tidak membantu. Jadi saya berlari strace ping
yang memberi saya output aneh ini (hanya bagian yang menarik):
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
Jadi ping
terlihat /etc/hosts
masuk akal. Maka beban dan mmap()
s /lib/libnss_mdns4_minimal.so.2
yang masuk akal juga.
Tapi kemudian dia berbicara untuk avahi !?
Yang membawa saya ke posting forum ini: ping tidak membuat permintaan dns .
Saya /etc/nsswitch.conf
juga mengandung baris ini:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
Jika saya ping
alamat yang berfungsi, saya melihat bahwa proses juga memuat /lib/libnss_mdns4_minimal.so.2
tetapi kemudian, ia melakukan permintaan DNS melalui port 53.
Jadi tebakan saya sekarang /lib/libnss_mdns4_minimal.so.2
adalah entah bagaimana memperhatikan bahwa alamat IP berakhir dengan .local
dan tidak dengan .com
dan kemudian [NOTFOUND=return]
dipicu.
Bagaimana cara saya memperbaikinya?
wget
.
nslookup
atau host
bisa menyelesaikan nama dan hal lain pada sistem tidak bisa.
/etc/NetworkManager/NetworkManager.conf
dan komentari dns=dnsmasq
baris (beri tanda # di depannya) lalu lakukan a sudo restart network-manager
. Itu akan mematikan resolver lokal. ( sumber )
/etc/resolv.conf
?