Ubuntu 16.10+ sử dụng systemd-resolved
làm trình phân giải DNS.
Tôi thích thiết lập 16.04 sử dụng, dnsmasq
như là trình phân giải.
Làm thế nào tôi có thể làm điều đó vào ngày 16.10+, đặc biệt là vào ngày 17.04?
Ubuntu 16.10+ sử dụng systemd-resolved
làm trình phân giải DNS.
Tôi thích thiết lập 16.04 sử dụng, dnsmasq
như là trình phân giải.
Làm thế nào tôi có thể làm điều đó vào ngày 16.10+, đặc biệt là vào ngày 17.04?
Câu trả lời:
dnsmasq
các gói vẫn có sẵn trong 16.10 và 17.04.
Cài đặt dnsmasq
và 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
Vô hiệu hóa systemd-resolved
và xác minh dnsmasq
đang chạy:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Nêm dnsmasq
nế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) để dnsmasq
hoạ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.conf
và khởi động lại dnsmasq
là đủ để nó hoạt động trong môi trường liveCD.
dns=dnsmasq
cấu hình vào/etc/NetworkManager/NetworkManager.conf
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
và /etc/resolv.conf
cầ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
dns=default
và 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.
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:
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 đó getaddrinfo
chỉ 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 :))
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