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?
/etc/resolv.conf
?wget
.nslookup
atauhost
bisa menyelesaikan nama dan hal lain pada sistem tidak bisa./etc/NetworkManager/NetworkManager.conf
dan komentaridns=dnsmasq
baris (beri tanda # di depannya) lalu lakukan asudo restart network-manager
. Itu akan mematikan resolver lokal. ( sumber )Jawaban:
Seperti yang dijelaskan secara rinci dalam posting blog ini , Anda perlu mengedit
/etc/avahi/avahi-daemon.conf
:Ini mengikat daemon ke domain
.alocal
alih-alih default.local
.dan restart daemon dengan:
Catatan dari posting blog:
Setelah itu,
ping
dannslookup
mulai setuju.Terima kasih kepada harrymc karena membuat saya berada di jalur yang benar.
sumber
ping
akan menggunakan nss,nslookup
tidak. (Menggunakan lwres dan, yah, ikat, untuk berbicara langsung dengan resolver)Memodifikasi /etc/nsswitch.conf dan mengganti:
oleh:
bekerja untukku.
sumber
Hal yang mudah dilakukan: Edit
/etc/default/avahi-daemon
Ubah baris:
untuk
Mulai ulang
avahi-daemon
, atau bunuh.Saya tidak suka Avahi, dan saya tidak menggunakan fitur-fiturnya. Jika Anda ingin benar-benar menonaktifkan avahi, ubah
/etc/init/avahi-daemon.conf
, mirip dengan yang berikut:sumber
sepertinya .local address tidak bisa diakses di ubuntu.
solusinya adalah mengedit
/etc/nsswitch.conf
dan mengubah baris ini:dengan ini :
sumber
Jika Anda tidak melakukan berbagi koneksi dengan perangkat lain atau VM melalui komputer Anda, Anda bisa mematikan dnsmasq di Network Manager.
Edit
/etc/NetworkManager/NetworkManager.conf
dan komentari baris (beri tanda # di depannya):Lalu lakukan:
Itu akan mematikan resolver lokal.
Sumber: DNS di Ubuntu 12.04 .
sumber
Tebakan yang cukup bagus, tetapi jawaban lainnya terlalu banyak. Solusi sederhana adalah menghapus bit yang memang dipicu, yaitu hapus saja
[NOTFOUND=return]
.Menghapusnya berarti bahwa jika
mdns4_minimal
kembaliNOTFOUND
, entri berikutnya pada daftar resolver digunakan. Ini adalah perilaku normal;[NOTFOUND=return]
adalah pengoptimalan untuk gagal lebih cepat pada nama yang tidak diketahui tetapi mengasumsikan semua.local
nama berada di mDNS.sumber
Saya punya kasus yang menarik dengan gejala yang sama (ping, mount dll tidak bekerja, tetapi tuan rumah, gali bekerja). Periksa izin pada file /etc/resolv.conf . Dalam kasus saya, seseorang mengubahnya dan saya tidak punya hak untuk membacanya (walaupun
cat /etc/resolv.conf
dan mengedit file berfungsi dengan baik).Bagaimanapun, strace menunjukkan:
Dan sebagai hasilnya, ia mencoba untuk query localhost (127.0.0.1) bukannya IP nameserver dari file resolv.conf:
Dan tcpdump tidak menunjukkan lalu lintas DNS saat melakukan ping. Semua berfungsi setelah perbaikan izin:
Masalah lain mungkin atribut yang diperluas dari file atau masalah akses lainnya. Jika demikian, hapus saja file /etc/resolv.conf dan buat kembali dari awal.
sumber
x
bendera mereka , dan dengan demikian banyak biner tidak berperilaku baik. Cara mengatasinya adalahchmod +x /*
.Alasan lain adalah format
/etc/hosts
. Pastikan tidak ada spasi antara IP dan nama host, alih-alih gunakan TAB. Setelah mengubah ke TAB nama host dapat diselesaikan dengan ping.sumber
Atur avahi-daemon di Ubuntu agar Anda dapat mencapai nama host
ubuntu.local
dari OS hostsudo apt-get install avahi-daemon avahi-temukan avahi-utils libnss-mdns mdns-scan
sumber