18장. NetworkManager에서 dnsmasq 를 사용하여 특정 도메인에 대한 DNS 요청을 선택한 DNS 서버로 전송
여러 네트워크 인터페이스가 있고 하나의 DNS 서버가 모든 도메인을 확인할 수 없는 호스트에서 특정 도메인에 대한 DNS 요청을 선택한 DNS 서버로 보내도록 RHEL을 구성할 수 있습니다.
예를 들어 서버를 VPN(Virtual Private Network)에 연결하고 VPN의 호스트는 example.com 도메인을 사용합니다. 이 경우 다음과 같은 방식으로 DNS 쿼리를 처리하도록 RHEL을 구성할 수 있습니다.
-
example.com에 대한 DNS 요청만 VPN 네트워크의 DNS 서버로 보냅니다. - 다른 모든 요청을 기본 게이트웨이를 사용하여 연결 프로필에 구성된 DNS 서버로 보냅니다.
dnsmasq 인스턴스를 시작하도록 NetworkManager를 구성할 수 있습니다. 그런 다음 이 DNS 캐싱 서버는 루프백 장치의 포트 53 에서 수신 대기합니다. 결과적으로 이 서비스는 네트워크가 아닌 로컬 시스템에서만 연결할 수 있습니다.
이 구성을 통해 NetworkManager는 nameserver 127.0.0.1 항목을 /etc/resolv.conf 파일에 추가하고 dnsmasq 는 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매개변수를 설정할 수 있습니다.
-
-
dnsmasq서비스는localhost와 다른 인터페이스에서 수신 대기하도록 구성되지 않았거나 실행되고 있지 않습니다.
프로세스
dnsmasq패키지를 설치합니다.# dnf install dnsmasq/etc/NetworkManager/NetworkManager.conf파일을 편집하고[main]섹션에 다음 항목을 설정합니다.dns=dnsmasqNetworkManager서비스를 다시 로드합니다.# systemctl reload NetworkManager
검증
서비스에서 다른 DNS 서버를 사용하는 도메인의
NetworkManager장치의systemd저널을 검색합니다.# journalctl -xeu NetworkManager ... Jun 02 13:30:17 <client_hostname>_ dnsmasq[5298]: using nameserver 198.51.100.7#53 for domain example.com ...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.1:을 참조하는지 확인합니다.# cat /etc/resolv.conf nameserver 127.0.0.1항목이 없는 경우
/etc/NetworkManager/NetworkManager.conf파일에서dns매개변수를 확인합니다.dnsmasq서비스가루프백장치의 포트53에서 수신 대기하는지 확인합니다.# ss -tulpn | grep "127.0.0.1:53" udp UNCONN 0 0 127.0.0.1:53 0.0.0.0:* users:(("dnsmasq",pid=7340,fd=18)) tcp LISTEN 0 32 127.0.0.1:53 0.0.0.0:* users:(("dnsmasq",pid=7340,fd=19))서비스가
127.0.0.1:53에서 수신 대기하지 않으면NetworkManager장치의 저널 항목을 확인합니다.# journalctl -u NetworkManager