DNS tại 127.0.0.53 của systemd đang bỏ qua một số tra cứu


14

DNS của systemd được yêu thích ở 127.0.0.53 dường như đang hoạt động trừ khi tôi truy vấn các máy cục bộ theo tên. Nhưng nếu tôi truy vấn họ và chỉ định cụ thể máy chủ DNS cục bộ (bộ định tuyến của tôi) thì tôi nhận được câu trả lời thích hợp. Nhưng tập tin cấu hình cho biết nó cũng đang sử dụng bộ định tuyến làm địa chỉ tìm kiếm. Có suy nghĩ gì không?

Tôi đang chạy Ubuntu 18.04 trên máy tính xách tay Dell của tôi.

Kết quả không chính xác:

$ nslookup web1

Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find web1: SERVFAIL

Cũng thất bại

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

Kết quả đúng:

$ nslookup web1 192.168.1.1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

Thông tin cấu hình systemd-giải quyết

$ 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

Thông tin cấu hình NetworkManager

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

[ifupdown]
managed=false

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

Vậy làm thế nào để tôi nhận được nslookup để trả lời đúng? Liên kết 3 dường như là thông tin chính xác (kết nối wifi của tôi) và DNS của tôi trên bộ định tuyến đang trả về câu trả lời đúng nhưng bộ đệm cục bộ không bao giờ cố gắng tra cứu địa chỉ (có vẻ như vậy).


Kiểm tra bài này và thấy rằng nếu giải quyết vấn đề của bạn: askubuntu.com/questions/1034064/...

Tôi không có dns = dnsmasq trong tập tin cấu hình của mình. Tôi đang cập nhật câu hỏi của tôi để hiển thị điều này.
schworak

Phiên bản Ubuntu nào bạn đang chạy và bạn cũng có thể cập nhật bài đăng của mình với cấu hình IP không?

Tôi đang chạy Ubuntu 18.04 trên máy tính xách tay Dell.
schworak

bạn có thể thử khôngnslookup -i wlp3s0 web1
cmak.fr

Câu trả lời:


9

Tệp độ phân giải của bạn không được chỉ đến sai vị trí - ../run/systemd/resolve/stub-resolv.conf nơi mà nó được cho là theo mặc định.

Vấn đề là systemd-resolvedkhông chuyển các tên không được chấm vào DNS. Rõ ràng điều này đang làm việc "như thiết kế". Xem vấn đề github này trong đó tuyên bố rằng "đã giải quyết sẽ không bao giờ cho phép tra cứu nhãn đơn bị rò rỉ trên DNS unicast".

Hay không, bạn đồng ý với lập luận ở chỗ vấn đề github, có một cách để sửa lỗi này. Nó thậm chí không yêu cầu thực hiện bất kỳ thay đổi nào đối với thiết lập mặc định trên máy Ubuntu của bạn:

  1. Đầu tiên, DNS LAN của bạn phải có một tên miền.

    Nếu bạn đang sử dụng dnsmasq, hãy thêm thông tin sau /etc/dnsmasq.confvào máy chủ DNS của bạn:

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

    Bây giờ bạn có thể phân giải tên máy chủ LAN nếu bạn thêm tên miền:

    nslookup web1.your-domain
    
  2. Thứ hai, đảm bảo tên cho miền LAN của bạn cũng được đặt trong máy chủ DHCP của bạn nếu nó khác với máy chủ DNS của bạn. Trên máy chủ DHCP của tôi (bộ định tuyến của tôi), cài đặt này chỉ được gọi là "Tên miền".

    Nếu sau đó bạn gia hạn hợp đồng thuê DHCP trên hộp Ubuntu, bạn sẽ thấy một lệnh tìm kiếm xuất hiện trong /run/systemd/resolve/stub-resolv.conf:

    nameserver 127.0.0.53
    search your-domain
    

Bây giờ tìm kiếm web1sẽ mở rộng nó web1.your-domain, sau đó sẽ giải quyết bằng 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

Lưu ý rằng nếu bạn sử dụng digthay vì nslookup, digkhông sử dụng đường dẫn tìm kiếm theo mặc định - sử dụng +searchtùy chọn của nó để kích hoạt điều đó.


Trước khi khởi động lại, nó đã tra cứu web1.mydomain.com. Nhưng tất nhiên việc tìm kiếm chỉ là web1 không hoạt động. Vì vậy, tôi đã khởi động lại và trong cuộc sống của tôi, tôi không biết nó đang chọn miền Comcast ở đâu nhưng bây giờ nếu tôi tra cứu web1 thì nó phản hồi với IP chính xác nhưng hiển thị tên miền comcast thay vì tên miền của tôi. Nó giải quyết nên tôi không quá lo lắng nhưng cái quái gì vậy ????
schworak

@schworak Lạ! Máy chủ DHCP của bạn cũng là modem Comcast của bạn phải không? Bạn có thấy tên miền đó hiển thị trong /etc/resolv.confhoặc ở đầu ra của một trong hai nmcli -g allhoặc systemd-resolve --statuskhông? Có thể thử nhìn vào những gì trong hợp đồng thuê DHCP của bạn ?
Laurence Gonsalves

Nó không phải là modem comcast. Tôi có bộ định tuyến SysLink với DDWRT đang chạy. Các thiết lập comcast hoàn toàn được thay thế. Tên comcast hiển thị trong tệp độ phân giải được tạo tự động khi khởi động. Tôi không quá lo lắng về nó nhưng nó thật kỳ lạ.
schworak

@LaurenceGonsalves Cảm ơn rất nhiều cho liên kết vấn đề github. Tôi đã tìm thấy cách giải quyết cho vấn đề nhưng điều này thực sự giúp tôi tìm ra vấn đề gốc.
Gregory Arenius

19

Tôi tìm thấy các sửa chữa làm việc cho tôi.

tập tin giải quyết của tôi đã chỉ đến sai địa điểm. Đây có vẻ như là một lỗi trong Ubuntu như đã xảy ra trên máy tính xách tay của tôi (máy tôi lần đầu tiên nhận thấy sự cố này) và trên bản cài đặt mới của Ubuntu 18.04 Server.

Mặc định

$ ls -l /etc/resolv.conf

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

Tôi đã xóa cái này và chỉ vào tập tin chính xác. Sau khi khởi động lại, điều này đã giải quyết vấn đề của tôi. Và tôi thậm chí đã có thể chuyển đổi mạng trên máy tính xách tay của mình và DNS chuyển đổi chính xác. Tất nhiên, khi trên các mạng bên ngoài, tôi không thể giải quyết bất kỳ máy cục bộ nào của mình nhưng điều đó được mong đợi. Ngay khi tôi chuyển trở lại mạng cục bộ của mình, tất cả các máy cục bộ sẽ giải quyết chính xác vì bộ định tuyến của tôi là DNS.

Sửa chữa

$ 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

Sau đó, mọi thứ hoạt động như tôi mong đợi và 127.0.0.53 không còn được sử dụng nữa.

Kết quả đúng

$ 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

Vui lòng báo cáo lỗi này bằng cách sử dụng ubuntu-bug resolvconf.
Chai T. Rex

Khi tôi bắt đầu gửi, nó báo độ phân giải (chưa được cài đặt). Là độ phân giải và systemd-giải quyết điều tương tự?
schworak

systemd-resolveđược cung cấp bởi systemdgói , vì vậy hãy thử ubuntu-bug systemdthay thế.
Chai T. Rex

Cảm ơn! Tôi chưa bao giờ sử dụng tính năng báo cáo lỗi đó trước đây. Rất đẹp.
schworak

1
Wow, thật là điên rồ. Cảm ơn bạn. Đã sửa lỗi này bao giờ được sửa chữa? Đây có phải là một lỗi cụ thể của Docker không? Tôi nghĩ rằng resolv.confđược thiết lập theo cách này cho DNS mạng cầu nối phải không?
void.pulum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.