Làm cách nào để định cấu hình systemd-phân giải và systemd-networkd để sử dụng máy chủ DNS cục bộ để phân giải tên miền cục bộ và máy chủ DNS từ xa cho miền từ xa?


26

Tôi được kết nối với mạng cục bộ có quyền truy cập Internet thông qua cổng. Có máy chủ DNS trong mạng cục bộ có khả năng phân giải tên máy chủ của máy tính từ mạng cục bộ.

Tôi muốn định cấu hình systemd-phân giảisystemd-networkd để các yêu cầu tra cứu cho tên máy chủ cục bộ sẽ được chuyển hướng (định tuyến) riêng cho máy chủ DNS cục bộ và các yêu cầu tra cứu cho tất cả các tên máy chủ khác sẽ được chuyển hướng đến một máy chủ DNS từ xa khác.

Giả sử tôi không biết các tệp cấu hình ở đâu hoặc liệu tôi có nên thêm nhiều tệp hơn và yêu cầu (các) đường dẫn của chúng được chỉ định trong câu trả lời.

Câu trả lời:


28

Trong tệp cấu hình cho giao diện mạng cục bộ, chúng tôi phải chỉ định chúng tôi muốn lấy địa chỉ máy chủ DNS cục bộ từ máy chủ DHCP bằng DHCP=tùy chọn :

[Network]
DHCP=yes

hoặc chỉ định rõ ràng địa chỉ của nó bằng cách sử dụng DNS=tùy chọn :

[Network]
DNS=10.0.0.1

Ngoài ra, chúng tôi cần chỉ định (trong cùng một phần) tên miền cục bộ bằng cách sử dụng Domains=tùy chọn

Domains=domainA.example domainB.example ~example

Chúng tôi chỉ định các tên miền cục bộ domainA.example domainB.exampleđể có được các hành vi sau (từ systemd-yet.service, trang man được giải quyết systemd ):

Tra cứu tên máy chủ kết thúc ở một trong các miền trên mỗi giao diện được định tuyến riêng cho các giao diện phù hợp.

Cách này hostX.domainA.examplesẽ được giải quyết độc quyền bởi máy chủ DNS cục bộ của chúng tôi.

Chúng tôi xác định ~examplerằng tất cả các tên miền kết thúc examplesẽ được coi là các miền chỉ có tuyến đường để có hành vi sau (từ mô tả về cam kết này ):

Máy chủ DNS có tên miền chỉ có tuyến đường chỉ nên được sử dụng cho các tên miền được chỉ định.

Cách này hostY.on.the.internetsẽ được giải quyết độc quyền bởi máy chủ DNS từ xa, toàn cầu của chúng tôi.

chú thích

Lý tưởng nhất là khi sử dụng giao thức DHCP, nên lấy tên miền cục bộ từ máy chủ DHCP thay vì được chỉ định rõ ràng trong tệp cấu hình của giao diện mạng ở trên. Xem UseDomains=tùy chọn . Tuy nhiên, vẫn còn các vấn đề nổi bật với tính năng này - xem vấn đề tùy chọn miền tìm kiếm DHCP của systemd-networkd .

Chúng tôi cần chỉ định máy chủ DNS từ xa làm máy chủ DNS toàn hệ thống. Chúng tôi có thể làm điều này trong /etc/systemd/resolved.conftập tin:

[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844

Đừng quên tải lại cấu hình và khởi động lại dịch vụ:

$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved

Chú ý!

Các bảo đảm trên chỉ áp dụng khi các tên được giải quyết bằng systemd-phân giải - xem trang man để biết nss-giải quyết, libnss_resolve.so.2trang man cho systemd-yet.service, systemd-phân giải .

Xem thêm:

Tài liệu tham khảo:


6
Bạn đã cân nhắc việc không sử dụng .localtrong ví dụ này chưa? Chắc chắn với avahi, điều này được cho là dành riêng cho MDNS và lạm dụng nó là một điều không nên. Nó sẽ rõ ràng hơn đối với tôi để sử dụng example.comhoặc .example .
nguồn

1
@sourcejedi Để tham khảo .localđược định nghĩa là miền đặc biệt trong RFC 6762 - DNS Multicast trong phần Tên Multicast DNS . Cảm ơn, đã sửa.
Piotr Dobrogost

Lưu ý không liên quan: bạn cũng có thể tự chấp nhận câu trả lời.
intelfx

2
Tôi nghĩ sẽ hữu ích khi thêm vị trí của tệp cấu hình cho giao diện mạng cục bộ . Không chắc chắn là đúng phải /etc/systemd/network/*.networkkhông? Tìm thấy ở đây superuser.com/a/1365864
Pierre Cordier

1
Tôi quan sát rằng câu trả lời này "Trong tệp cấu hình ..." không phản hồi với OP "Giả sử tôi không biết các tệp cấu hình ở đâu ..." Là một người đã đến đây trong tình trạng không biết gì về vị trí của tập tin cấu hình cụ thể, câu trả lời này là không đầy đủ.
Tháp Eric

1

Chỉ cần mở rộng câu trả lời tuyệt vời của @piotrDobrogost, đừng quên cấu hình /etc/nsswitch.confđể sử dụng systemd-resolvedlàm nguồn phân giải DNS. hostsLệnh của bạn sẽ như sau cho trường hợp sử dụng cụ thể của bạn:

/etc/nsswitch.conf

hosts:  files resolve dns

Vì vậy, nếu bạn giới hạn độ phân giải chỉ ở những tên miền được chỉ định trong Domainschỉ thị /etc/systemd/resolved.confnhư chi tiết Piotr ở trên, thì DNS nên được tham khảo theo thứ tự các nguồn phân giải tên được chỉ định /etc/nsswitch.confkhi không tìm thấy tên miền trong Domainschỉ thị:

Các tài liệu tham khảo liên kết sau đây yêu cầu phải xác định quyết tâm trong /etc/nsswitch.confquá systemd-resolvedđược hỏi ý kiến trong quá trình phân giải tên:

https://github.com/systemd/systemd/issues/940

Tài liệu SystemD tôi đã tìm thấy là rất thảm khốc. Tôi đã phải cùng nhau tìm hiểu từ nhiều liên kết, bao gồm câu trả lời của Piotr ở trên ;-)


Khi sử dụng chế độ hoạt động được đề xuất của phân giải systemd , nơi /etc/resolve.confcó một liên kết tượng trưng đến /run/systemd/resolve/stub-resolv.conftệp chứa địa chỉ của trình phân giải DNS stub phân giải của systemd không cần đặt lệnh resolvetrong /etc/nsswitch.conftệp vì các yêu cầu DNS sẽ được chuyển hướng (do nss-dnschỉ thị chuẩn ) trình giải quyết sơ khai hoạt động theo các quy tắc của systemd-phân giải .
Piotr Dobrogost

@PiotrDobrogost Làm thế nào bạn có thể kiểm soát các nguồn thứ tự của độ phân giải DNS mà không sử dụng /etc/nsswitch.conf``? In the specimen config above, / etc / hosts` (" files ") để kiểm tra IP tĩnh : ánh xạ tên và nếu không tìm thấy, sơ khai giải quyết hệ thống sẽ được tư vấn tiếp theo . Do đó, tôi không thể thấy làm thế nào có thể tạo ra các nguồn phân giải DNS mà không cần sử dụng /etc/nsswitch.conf. Tôi có thiếu một mẹo ở đây không?
F1Linux

Tôi không nói /etc/nsswitch.conflà không cần thiết. Tôi đang nói rằng khi một người sử dụng trình phân giải DNS còn phân giải của systemd thì nó đủ để có lệnh dnsđược liệt kê trong hosts:dòng (có lẽ là sau lệnh file). Không cần resolvechỉ thị ở đó vì nó là trình giải quyết sơ khai là điểm khởi đầu cho logic của hệ thống được phân giải và không phải là nss-resolvemô-đun trình cắm ...
Piotr Dobrogost

... Nói cách khác, bạn có thể đạt đến systemd-giải quyết của luận lý hoặc thông qua resolvechỉ thị ➟ NSS-quyết tâm NSS plug-in Module ➟ systemd-giải quyết hoặc thông qua dnschỉ thị ➟ NSS-DNS NSS plug-in Module ➟ của systemd-giải quyết còn sơ khai DNS resolver '➟ giải quyết hệ thống
Piotr Dobrogost

@PiotrDobrogost Tôi nghĩ rằng tôi đến filesrồi resolvethingy trong /etc/nsswitch.conftừ phần 2 của câu hỏi của bạn. Đọc lại nó, có vẻ như bạn chỉ đang nói về việc kiểm tra bộ đệm cục bộ cho một ánh xạ tên IP: sau đó tiếp cận với một người chuyển tiếp nếu không tìm thấy. Tôi thường đặt filesnguồn phân giải DNS đầu tiên để bỏ qua DNS để cho phép tôi kiểm tra và không đánh vào máy chủ sản xuất- T
F1Linux
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.