Làm cách nào để vô hiệu hóa systemd-phân giải và giải quyết DNS với dnsmasq?


Câu trả lời:


35

dnsmasq các gói vẫn có sẵn trong 16.10 và 17.04.

  1. Cài đặt dnsmasqvà phụ thuộc (hoặc ít nhất là tải xuống gói của họ) trước khi tắtsystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Vô hiệu hóa systemd-resolvedvà xác minh dnsmasqđang chạy:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Nêm dnsmasqnếm vừa ăn. Sau khi áp dụng cài đặt của bạn, hãy khởi động lại dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

Sau bước 2, bạn có thể không có bộ giải quyết hệ thống làm việc cho đến khi hoàn thành bước 3. Bạn có thể cần phải khởi động lại hệ thống con mạng (hoặc đơn giản là khởi động lại) để dnsmasqhoạt động với các cấu hình mặc định. Trong thử nghiệm của tôi, việc thêm một máy chủ DNS đã biết /etc/dnsmasq.confvà khởi động lại dnsmasqlà đủ để nó hoạt động trong môi trường liveCD.


Câu trả lời tuyệt vời và dường như là giải pháp duy nhất khi vô hiệu hóa Trình quản lý mạng không được chấp nhận!
bogl

3
Đối với tôi, đây là một câu trả lời tuyệt vời nhưng cũng cần các bước bổ sung từ câu trả lời của @ blabla, thêm dns=dnsmasqcấu hình vào/etc/NetworkManager/NetworkManager.conf
Roberto Tyley

Tương tự ở đây. Sau khi vật lộn với việc chuyển đổi hệ thống và không bị ràng buộc sang dnsmasq, đã thực hiện thủ thuật trên Ubuntu 17.10. Tôi đã phải sử dụng bổ sung của blabla mặc dù.
Alberto L. Bonfiglio

17

Ngoài câu trả lời của @quixotic:

Đảm bảo bạn có trong /etc/NetworkManager/NetworkManager.conf:

[main]
dns=dnsmasq

nếu bạn cần thêm nó, hãy khởi động lại Trình quản lý mạng như thế này:

sudo systemctl restart NetworkManager

/etc/resolv.confcần phải là một liên kết tượng trưng đến /var/run/NetworkManager/resolv.conf. có thể được thực hiện như thế này

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

Trên thực tế tôi có nó được đặt là dns=defaultvà nó hoạt động tốt bởi vì tôi có các máy chủ tên được xác định sau đó bởi NetworkManager thay vì được định nghĩa trong dnsmasq; cái này hoạt động với tôi - NM lấy các máy chủ tên từ các cài đặt được thực hiện trong cấu hình NM của KDE thông qua khay hệ thống. Tôi sử dụng IP cố định trên mạng gia đình FWIW.
pbhj

1
Bước này là một bổ sung cần thiết cho câu trả lời của @ quixotic đối với tôi (ubfox 17.04, cài đặt đầy đủ, không phải LiveCD).
Roberto Tyley

0

Theo hướng dẫn sử dụng phân giải systemd, systemd-phân giải cung cấp các dịch vụ phân giải tên thông qua ba giao diện khác nhau:

  1. "API đầy đủ tính năng được giải quyết theo hệ thống trên xe buýt"
  2. "trình nghe DNS gốc cục bộ trên địa chỉ IP 127.0.0.53 trên giao diện loopback cục bộ"
  3. API glibc getaddrinfo (3) như được định nghĩa bởi RFC3493 và các hàm phân giải liên quan của nó, bao gồm gethostbyname (3). API này được hỗ trợ rộng rãi, bao gồm cả ngoài nền tảng Linux. Tuy nhiên, ở dạng hiện tại, nó không hiển thị thông tin trạng thái xác nhận DNSSEC và chỉ đồng bộ. API này được hỗ trợ bởi Công tắc dịch vụ tên glibc (nss (5)). Việc sử dụng mô-đun NSS glibc nss-phân giải (8) là bắt buộc để cho phép các chức năng phân giải NSS của glibc giải quyết tên máy chủ thông qua phân giải systemd.

Có vẻ như hai giao diện đầu tiên sẽ không can thiệp vào độ phân giải DNS bình thường và đối với tôi, vấn đề có thể nằm ở phần ba.

Trong hướng dẫn sử dụng nss-giải quyết :

Để kích hoạt mô-đun NSS, hãy thêm "giải quyết" vào dòng bắt đầu bằng "hosts:" trong /etc/nsswitch.conf. Cụ thể, bạn nên đặt "giải quyết" sớm trong dòng "máy chủ:" của /etc/nsswitch.conf "[! UNAVAIL = return]", để đảm bảo các truy vấn DNS luôn được định tuyến qua hệ thống được phân giải (8) nếu nó đang chạy, nhưng được định tuyến đến nss-dns nếu dịch vụ này không khả dụng

Vì vậy, điều cần thiết là làm cho "dns" có trước "giải quyết" trong "máy chủ:" dòng /etc/nsswitch.conf . Và sau đó getaddrinfochỉ nên tuân thủ /etc/resolv.conf .

Giải pháp này chỉ ngăn hệ thống phân giải được xử lý tất cả các yêu cầu phân giải DNS và không bị hạn chế đối với người quản lý mạng cụ thể. Và nó cũng đảm bảo dịch vụ LLMNR và mDNS đang hoạt động bình thường.

(Tôi không công bằng với cách thức phân giải tên hoạt động trong Linux và cũng không chắc chắn về những gì tôi đã hiểu từ các hướng dẫn này. Xin vui lòng chỉ ra nếu tôi có điều gì đó sai. Thx :))


0

Dành cho (X) Ubuntu 18.04 (xem câu trả lời của tôi tại stackexchange ).

Đây là bản sao của nó (tôi có nên tạo một bản sao không?)

Đây là giải pháp cho (X) Ubuntu 18.04 Bionic.

Cài đặt dnsmasq

sudo apt install dnsmasq

Vô hiệu hóa trình nghe được phân giải systemd trên cổng 53 (không chạm vào /etc/systemd/resolve.conf, vì nó có thể bị ghi đè khi nâng cấp):

$ cat /etc/systemd/resolved.conf.d/noresolved.conf 
[Resolve]
DNSStubListener=no

và khởi động lại nó

$ sudo systemctl restart systemd-resolved

(thay thế hoàn toàn vô hiệu hóa nó bằng cách $ sudo systemctl disable systemd-resolved.service)

Xóa /etc/resolv.conf và tạo lại. Điều này rất quan trọng, bởi vì decv.conf là một liên kết tượng trưng đến /run/systemd/resolve/stub-resolv.conf theo mặc định. Nếu bạn sẽ không xóa liên kết tượng trưng, ​​tệp sẽ bị ghi đè bởi systemd khi khởi động lại (mặc dù chúng tôi đã vô hiệu hóa systemd được giải quyết!). Ngoài ra NetworkManager (NM) kiểm tra xem đó có phải là một liên kết tượng trưng để phát hiện cấu hình được giải quyết bởi systemd không.

$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf

Vô hiệu hóa ghi đè /etc/resolv.conf bởi NM (cũng có một trình quản lý RC tùy chọn, nhưng nó không hoạt động, mặc dù nó được mô tả trong sách hướng dẫn):

$ cat /etc/NetworkManager/conf.d/disableresolv.conf 
[main]
dns=none

và khởi động lại nó:

$ sudo systemctl restart NetworkManager

Nói với dnsmasq để sử dụng độ phân giải từ NM:

$ cat /etc/dnsmasq.d/nmresolv.conf 
resolv-file=/var/run/NetworkManager/resolv.conf

và khởi động lại nó:

$ sudo systemctl restart dnsmasq

Sử dụng dnsmasq để giải quyết:

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
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.