LAN에 연결되어 있고 게이트웨이를 통해 인터넷에 접속합니다. 로컬 네트워크에는 로컬 네트워크에 있는 컴퓨터의 호스트 이름을 확인할 수 있는 DNS 서버가 있습니다.
구성하고 싶습니다체계적 분석그리고시스템 네트워크이런 방식으로 로컬 호스트 이름에 대한 조회 요청은 로컬 DNS 서버로만 전달(라우팅)되고, 다른 모든 호스트 이름에 대한 조회 요청은 다른 원격 DNS 서버에만 전달됩니다.
구성 파일이 어디에 있는지 모르고 더 많은 파일을 추가해야 하는지 그리고 답변에 해당 경로를 지정하도록 요청해야 한다고 가정해 보겠습니다.
답변1
로컬 네트워크 인터페이스의 구성 파일(이름 패턴과 일치하는 파일 /etc/systemd/network/*.network
)에서 DHCP 서버를 사용하여 로컬 DNS 서버 주소를 얻도록 지정해야 합니다.DHCP=
옵션:
[Network]
DHCP=yes
또는 다음을 사용하여 주소를 명시적으로 지정하세요.DNS=
옵션:
[Network]
DNS=10.0.0.1
또한 (동일한 섹션에서) 다음을 사용하여 로컬 도메인을 지정해야 합니다.Domains=
옵션
Domains=domainA.example domainB.example ~example
domainA.example domainB.example
다음 동작을 얻기 위해 로컬 도메인을 지정합니다 .systemd-resolved.service, systemd-resolved매뉴얼 페이지):
각 인터페이스 도메인 중 하나로 끝나는 호스트 이름에 대한 조회는 일치하는 인터페이스로만 라우팅됩니다.
이 문제는 hostX.domainA.example
해결될 수 있습니다.오직로컬 DNS 서버를 통해.
~example
다음 동작을 얻기 위해 다음으로 끝나는 모든 도메인이 라우팅 전용 도메인으로 처리되도록 지정합니다 example
(설명에서).이것범죄):
경로 전용 도메인이 있는 DNS 서버는 지정된 도메인에만 사용할 수 있습니다.
이 문제는 hostY.on.the.internet
해결될 수 있습니다.오직당사의 글로벌 원격 DNS 서버에서 제공됩니다.
노트
이상적으로는 DHCP 프로토콜을 사용할 때 위의 네트워크 인터페이스 구성 파일에 명시적으로 지정하지 않고 DHCP 서버에서 로컬 도메인 이름을 가져와야 합니다. 바라보다UseDomains=
옵션. 그러나 이 기능에는 아직 해결되지 않은 문제가 있습니다.systemd-networkd DHCP 검색 도메인 옵션질문.
원격 DNS 서버를 글로벌 시스템 전체 DNS 서버로 지정해야 합니다. /etc/systemd/resolved.conf
파일에서 이 작업을 수행 할 수 있습니다 .
[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
구성을 다시 로드하고 서비스를 다시 시작하는 것을 잊지 마세요.
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved
경고하다!
위의 보장은 이름 확인 중에만 적용됩니다.체계적 분석- 바라보다매뉴얼 페이지nss-resolve,libnss_resolve.so.2그리고systemd-resolved.service, systemd-resolved에 대한 매뉴얼 페이지.
또한보십시오:
인용하다:
답변2
@piotrDobrogost의 훌륭한 답변을 확장하려면 DNS 확인 소스 /etc/nsswitch.conf
로 사용되도록 구성하는 것을 잊지 마십시오. systemd-resolved
특정 사용 사례의 경우 지시문은 hosts
다음과 같아야 합니다.
/etc/nsswitch.conf
hosts: files resolve dns
따라서 위 Piotr 세부 정보 Domains
의 지시어에 지정된 도메인 으로만 확인을 제한하는 경우 /etc/systemd/resolved.conf
도메인이 확인될 때 지정된 이름 확인 소스 순서대로 다음으로 DNS를 쿼리해야 합니다./etc/nsswitch.conf
아니요지시문에서 찾을 수 있습니다 Domains
.
다음 링크는 지정된 요구 사항을 참조합니다.해결하다이름 확인 중에도 참조됩니다 /etc/nsswitch.conf
.systemd-resolved
https://github.com/systemd/systemd/issues/940
SystemD 문서가 끔찍하다는 것을 알았습니다. 위의 Piotr의 답변을 포함하여 여러 링크에서 이해를 모아야했습니다 ;-)
답변3
OpenVPN 연결을 구성했기 때문에 이 작업을 수행하는 경우 다음을 사용해야 합니다.https://github.com/jonathanio/update-systemd-resolved~에 따르면https://wiki.archlinux.org/index.php/OpenVPN#The_update-systemd-resolved_custom_script
특히 OpenVPN 클라이언트 구성에서 스크립트를 설치하고 활성화하면 동일한 클라이언트 구성에도 update-systemd-resolved
추가됩니다 .dhcp-option DOMAIN-ROUTE yourdomain.com
OpenVPN에서 다음 출력이 표시됩니다.
<14>Apr 22 16:10:31 update-systemd-resolved: Link 'tun0' coming up
<14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Routed Domain yourdomain.com
<14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Domain yourdomain.com
<14>Apr 22 16:10:31 update-systemd-resolved: Adding IPv4 DNS Server 192.168.XYZ.XYZ
<14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDNS(640 1 2 4 192 168 XYZ XYZ)
<14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDomains(640 2 yourdomain.com false yourdomain.com true)
다음 명령을 사용하여 DNS 구성을 확인할 수 있습니다 resolvectl status
.
Link 3 (wlp0s....)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.XYZ.XYZ
DNS Servers: 192.168.XYZ.XYZ
DNS Domain: ~.
lan
Link 640 (tun0)
Current Scopes: DNS
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.XYZ.XYZ
DNS Servers: 192.168.XYZ.XYZ
DNS Domain: ~yourdomain.com