19.2. NetworkManager에서 systemd-resolved를 사용하여 특정 도메인에 대한 DNS 요청을 선택한 DNS 서버로 전송
여러 네트워크 인터페이스가 있고 하나의 DNS 서버가 모든 도메인을 확인할 수 없는 호스트에서 특정 도메인에 대한 DNS 요청을 선택한 DNS 서버로 보내도록 RHEL을 구성할 수 있습니다.
systemd-resolved 인스턴스를 시작하도록 NetworkManager를 구성할 수 있습니다. 그런 다음 이 DNS 스텁 확인기에서 IP 주소 127.0.0. 의 포트 53에서 수신 대기합니다. 결과적으로 이 스텁 확인자는 네트워크가 아닌 로컬 시스템에서만 연결할 수 있습니다.
53
이 구성을 통해 NetworkManager는 이름 서버 127.0.0.53 항목을 /etc/resolv.conf 파일에 추가하고 systemd-resolved 는 DNS 요청을 NetworkManager 연결 프로필에 지정된 해당 DNS 서버로 동적으로 라우팅합니다.
사전 요구 사항
- 시스템에 여러 NetworkManager 연결이 구성되어 있습니다.
DNS 서버 및 검색 도메인은 특정 도메인을 확인하는 연결을 위해 구성됩니다.
예를 들어 VPN 연결에 지정된 DNS 서버가
example.com도메인에 대한 쿼리를 확인하려면 다음 설정을 사용할 수 있어야 합니다.-
example.com을 확인할 수 있는 DNS 서버 . DHCP 서버는 이 정보를 동적으로 제공하거나 VPN 연결 프로필에서ipv4.dns및ipv6.dns매개변수를 설정할 수 있습니다. -
example.com으로 설정된 검색 도메인 . DHCP 서버는 이 정보를 동적으로 제공하거나 VPN 연결 프로필에ipv4.dns-search및ipv6.dns-search매개변수를 설정할 수 있습니다.
-
프로세스
systemd-resolved패키지를 설치합니다.# dnf install systemd-resolvedsystemd-resolved서비스를 활성화하고 시작합니다.# systemctl --now enable systemd-resolved/etc/NetworkManager/NetworkManager.conf파일을 편집하고[main]섹션에 다음 항목을 설정합니다.dns=systemd-resolved/run/systemd/resolve/stub-resolv.conf에 대한 심볼릭 링크로 일반/etc/resolv.conf파일을 재정의합니다.# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.confNetworkManager서비스를 다시 로드합니다.# systemctl reload NetworkManager
검증
서비스에서 다른 DNS 서버를 사용하는 도메인과
systemd-resolved의 사용을 표시합니다.# resolvectl ... Link 2 (enp1s0) Current Scopes: DNS Protocols: +DefaultRoute ... Current DNS Server: 192.0.2.1 DNS Servers: 192.0.2.1 Link 3 (tun0) Current Scopes: DNS Protocols: -DefaultRoute ... Current DNS Server: 198.51.100.7 DNS Servers: 198.51.100.7 203.0.113.19 DNS Domain: example.comsystemd-resolved가example.com도메인에 다른 DNS 서버를 사용하는 것을 출력에서 확인합니다.tcpdump패킷 스니퍼를 사용하여 DNS 요청의 올바른 경로를 확인합니다.tcpdump패키지를 설치합니다.# dnf install tcpdump하나의 콘솔에서
tcpdump를 시작하여 모든 인터페이스에서 DNS 트래픽을 캡처합니다.# tcpdump -i any port 53다른 콘솔에서 예외와 다른 도메인이 존재하는 도메인의 호스트 이름을 확인합니다. 예를 들면 다음과 같습니다.
# host -t A www.example.com # host -t A www.redhat.comtcpdump출력에서 Red Hat Enterprise Linux가example.com도메인에 대한 DNS 쿼리만 지정된 DNS 서버와 해당 인터페이스를 통해 전송하는지 확인합니다.... 13:52:42.234533 tun0 Out IP server.43534 > 198.51.100.7.domain: 50121+ A? www.example.com. (33) ... 13:52:57.753235 enp1s0 Out IP server.40864 > 192.0.2.1.domain: 6906+ A? www.redhat.com. (33) ...Red Hat Enterprise Linux는
www.example.com의 DNS 쿼리를198.51.100.7의 DNS 서버에 전송하고www.redhat.com에 대한 쿼리를192.0.2.1로 보냅니다.
문제 해결
/etc/resolv.conf의nameserver항목이127.0.0.53을 참조하는지 확인합니다.# cat /etc/resolv.conf nameserver 127.0.0.53항목이 없는 경우
/etc/NetworkManager/NetworkManager.conf파일에서dns매개변수를 확인합니다.systemd-resolved서비스가 로컬 IP 주소127.0.0.53의 포트 53에서 수신 대기하는지 확인합니다.# ss -tulpn | grep "127.0.0.53" udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1050,fd=12)) tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1050,fd=13))서비스가
127.0.0.53:53에서 수신 대기하지 않으면systemd-resolved서비스가 실행 중인지 확인합니다.