DNS di systemd's 127.0.0.53 mengabaikan beberapa pencarian


14

DNS systemd yang dicintai di 127.0.0.53 tampaknya berfungsi kecuali ketika saya meminta mesin lokal dengan nama. Tetapi jika saya meminta mereka dan secara spesifik menentukan server DNS lokal (router saya) maka saya mendapatkan balasan yang tepat. Tetapi file konfigurasi mengatakan itu juga menggunakan router sebagai alamat pencarian. Adakah pikiran?

Saya menjalankan Ubuntu 18.04 di laptop Dell saya.

Hasil yang salah:

$ nslookup web1

Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find web1: SERVFAIL

Juga Gagal

$ nslookup -i wlp3s0 web1
nslookup: couldn't get address for 'web1': not found

Hasil yang benar:

$ nslookup web1 192.168.1.1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

Info Konfigurasi systemd-resolve

$ systemd-resolve --status

Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 3 (wlp3s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.1
          DNS Domain: wp.comcast.net

Link 2 (enp2s0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Info Konfigurasi NetworkManager

$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

Jadi, bagaimana saya mendapatkan nslookup untuk mengembalikan jawaban yang benar? Tautan 3 tampaknya merupakan informasi yang benar (koneksi wifi saya) dan DNS saya di router mengembalikan jawaban yang benar tetapi cache lokal tidak pernah mencoba mencari alamat (atau sepertinya).


Lihat pos ini dan lihat apakah itu menyelesaikan masalah Anda: askubuntu.com/questions/1034064/...

Saya tidak memiliki dns = dnsmasq di file konfigurasi saya. Saya memperbarui pertanyaan saya untuk menunjukkan ini.
schworak

Versi Ubuntu mana yang Anda jalankan dan dapatkah Anda juga memperbarui posting Anda dengan konfigurasi IP?

Saya menjalankan Ubuntu 18.04 pada laptop Dell.
schworak

bisakah Anda mencobanslookup -i wlp3s0 web1
cmak.fr

Jawaban:


9

File resolv.conf Anda tidak menunjuk ke tempat yang salah - ../run/systemd/resolve/stub-resolv.conf adalah tempat yang seharusnya ditunjuk secara default.

Masalahnya adalah bahwa systemd-resolvedtidak memberikan nama yang tidak bertitik ke DNS. Rupanya ini berfungsi "seperti yang dirancang". Lihat masalah github ini yang menyatakan bahwa "diselesaikan tidak akan pernah mengizinkan pencarian label tunggal bocor ke DNS unicast".

Apakah Anda setuju dengan alasan bahwa masalah github, ada adalah cara untuk memperbaiki ini. Bahkan tidak perlu membuat perubahan apa pun pada pengaturan default pada mesin Ubuntu Anda:

  1. Pertama, DNS LAN Anda harus memiliki nama domain.

    Jika Anda menggunakan dnsmasq, tambahkan berikut ini /etc/dnsmasq.confdi server DNS Anda:

    expand-hosts
    domain=your-domain # replace "your-domain" with domain of your choice
    

    Anda sekarang harus dapat menyelesaikan nama host LAN jika Anda menambahkan domain:

    nslookup web1.your-domain
    
  2. Kedua, pastikan nama untuk domain LAN Anda juga diatur di server DHCP Anda jika berbeda dari server DNS Anda. Di server DHCP saya (router saya), pengaturan ini hanya disebut "Nama Domain".

    Jika Anda kemudian memperbarui sewa DHCP di kotak Ubuntu Anda, Anda akan melihat arahan pencarian muncul di /run/systemd/resolve/stub-resolv.conf:

    nameserver 127.0.0.53
    search your-domain
    

Sekarang mencari web1akan memperluas ke web1.your-domain, yang kemudian akan menyelesaikan menggunakan DNS.

$ nslookup web1
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   web1.your-domain
Address: 192.168.1.107

Perhatikan bahwa jika Anda menggunakan digsebagai gantinya nslookup, digtidak menggunakan jalur pencarian secara default - gunakan +searchopsi untuk mengaktifkannya.


Sebelum mem-boot ulang, itu mencari web1.mydomain.com. Tapi tentu saja hanya mencari web1 tidak bekerja. Jadi saya reboot dan untuk kehidupan saya, saya tidak tahu di mana ia mengambil domain Comcast tetapi sekarang jika saya mencari web1 ia merespons dengan IP yang benar tetapi menunjukkan domain comcast bukan domain saya. Itu diselesaikan jadi saya tidak terlalu khawatir tapi apa-apaan ????
schworak

@schworak Aneh! Apakah server DHCP Anda juga modem Comcast Anda? Apakah Anda melihat domain itu muncul di /etc/resolv.confatau di output salah satu nmcli -g allatau systemd-resolve --status? Mungkin coba lihat apa yang ada dalam sewa DHCP Anda ?
Laurence Gonsalves

Ini bukan modem comcast. Saya memiliki router SysLink dengan DDWRT berjalan. Pengaturan comcast benar-benar diganti. Nama comcast muncul di file resolv.conf yang dihasilkan secara otomatis saat boot up. Saya tidak terlalu khawatir tetapi aneh.
schworak

@LaurenceGonsalves Terima kasih banyak untuk tautan masalah github. Saya telah menemukan solusi untuk masalah ini, tetapi ini benar-benar membantu saya mencari tahu akar masalahnya.
Gregory Arenius

19

Saya menemukan perbaikan yang berhasil untuk saya.

file resolv.conf saya menunjuk ke tempat yang salah. Ini seperti bug di Ubuntu seperti yang terjadi pada laptop saya (mesin yang pertama kali saya perhatikan masalah ini) dan pada instalasi baru Ubuntu 18.04 Server.

Default

$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 39 Apr 26 12:07 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Saya menghapus ini dan menunjuk ke file yang benar. Setelah reboot, ini memecahkan masalah saya. Dan saya bahkan bisa mengganti jaringan di laptop saya dan DNSnya diganti dengan benar. Tentu saja ketika di jaringan eksternal saya tidak dapat menyelesaikan mesin lokal saya tetapi itu diharapkan. Segera setelah saya beralih kembali ke jaringan lokal saya, semua mesin lokal menyelesaikan dengan benar karena router saya adalah DNS.

Cara Mengatasinya

$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 32 May 29 08:48 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf

$ sudo reboot

Setelah itu, semuanya berjalan seperti yang saya harapkan dan 127.0.0.53 tidak lagi digunakan sama sekali.

Hasil yang Benar

$ nslookup web1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

$ nslookup google.com

Server:     192.168.1.1
Address:    192.168.1.1#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.7.174
Name:   google.com
Address: 2607:f8b0:4004:80e::200e

Silakan laporkan bug ini menggunakan ubuntu-bug resolvconf.
Chai T. Rex

Ketika saya mulai mengirimnya mengatakan resolvconf (tidak diinstal). Apakah resolvconf dan systemd-menyelesaikan hal yang sama?
schworak

systemd-resolvedisediakan oleh systemdpaket , jadi silakan coba ubuntu-bug systemdsaja.
Chai T. Rex

Terima kasih! Saya belum pernah menggunakan fitur pelaporan bug sebelumnya. Sangat bagus.
schworak

1
Wow, ini gila. Terima kasih. Apakah bug ini pernah diperbaiki? Apakah itu bug khusus Docker? Saya pikir resolv.confsudah diatur seperti ini untuk DNS jaringan docker bridge kan?
void.pointer
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.