Red Hat Training

A Red Hat training course is available for RHEL 8

22장. 다른 도메인에 다른 DNS 서버 사용

기본적으로 RHEL(Red Hat Enterprise Linux)은 모든 DNS 요청을 /etc/resolv.conf 파일에 지정된 첫 번째 DNS 서버로 보냅니다. 이 서버가 응답하지 않으면 RHEL은 이 파일에서 다음 서버를 사용합니다. 하나의 DNS 서버가 모든 도메인을 확인할 수 없는 환경에서 관리자는 특정 도메인의 DNS 요청을 선택한 DNS 서버로 보내도록 RHEL을 구성할 수 있습니다.

예를 들어 서버를 VPN(Virtual Private Network)에 연결하고 VPN의 호스트는 example.com 도메인을 사용합니다. 이 경우 다음과 같은 방식으로 DNS 쿼리를 처리하도록 RHEL을 구성할 수 있습니다.

  • example.com 에 대한 DNS 요청만 VPN 네트워크의 DNS 서버로 보냅니다.
  • 다른 모든 요청을 기본 게이트웨이를 사용하여 연결 프로필에 구성된 DNS 서버로 보냅니다.

22.1. NetworkManager에서 dnsmasq를 사용하여 특정 도메인에 대한 DNS 요청을 선택한 DNS 서버로 전송

dnsmasq 인스턴스를 시작하도록 NetworkManager를 구성할 수 있습니다. 그런 다음 이 DNS 캐싱 서버는 루프백 장치의 포트 53 에서 수신 대기합니다. 결과적으로 이 서비스는 네트워크가 아닌 로컬 시스템에서만 연결할 수 있습니다.

이 구성을 통해 NetworkManager는 nameserver 127.0.0.1 항목을 /etc/resolv.conf 파일에 추가하고 dnsmasq 는 DNS 요청을 NetworkManager 연결 프로필에 지정된 해당 DNS 서버로 동적으로 라우팅합니다.

사전 요구 사항

  • 시스템에는 여러 개의 NetworkManager 연결이 구성되어 있습니다.
  • DNS 서버 및 검색 도메인은 특정 도메인을 확인하는 NetworkManager 연결 프로필에 구성됩니다.

    예를 들어 VPN 연결에 지정된 DNS 서버가 example.com 도메인에 대한 쿼리를 확인하도록 하려면 VPN 연결 프로필에 다음 설정이 포함되어야 합니다.

    • example.com을 확인할 수 있는 DNS 서버
    • ipv4.dns-searchipv6.dns-search 매개변수에서 example.com 으로 설정된 검색 도메인
  • dnsmasq 서비스는 다른 인터페이스에서 수신 대기하도록 구성되지 않은 다음 localhost 에서 수신 대기하도록 구성되어 있지 않습니다.

절차

  1. dnsmasq 패키지를 설치합니다.

    # yum install dnsmasq
  2. /etc/NetworkManager/NetworkManager.conf 파일을 편집하고 [main] 섹션에 다음 항목을 설정합니다.

    dns=dnsmasq
  3. NetworkManager 서비스를 다시 로드합니다.

    # systemctl reload NetworkManager

검증

  1. 서비스에서 다른 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
    ...
  2. tcpdump 패킷 스니퍼를 사용하여 DNS 요청의 올바른 경로를 확인합니다.

    1. tcpdump 패키지를 설치합니다.

      # yum install tcpdump
    2. 한 터미널에서 tcpdump 를 시작하여 모든 인터페이스에서 DNS 트래픽을 캡처합니다.

      # tcpdump -i any port 53
    3. 다른 터미널에서 예외와 다른 도메인이 존재하는 도메인의 호스트 이름을 확인합니다. 예를 들면 다음과 같습니다.

      # host -t A www.example.com
      # host -t A www.redhat.com
    4. tcpdump 출력에서 Red Hat Enterprise Linux가 example.com 도메인에 대한 DNS 쿼리만 지정된 DNS 서버와 해당 인터페이스를 통해 전송하는지 확인합니다.

      ...
      13:52:42.234533 IP server.43534 > 198.51.100.7.domain: 50121+ [1au] A? www.example.com. (33)
      ...
      13:52:57.753235 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 로 보냅니다.

문제 해결

  1. /etc/resolv.conf 파일의 nameserver 항목이 127.0.0.1:을 참조하는지 확인합니다.

    # cat /etc/resolv.conf
    nameserver 127.0.0.1

    항목이 없는 경우 /etc/NetworkManager/NetworkManager.conf 파일에서 dns 매개변수를 확인합니다.

  2. 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