第25章 異なるドメインでの各種 DNS サーバーの使用
デフォルトでは、Red Hat Enterprise Linux (RHEL) は、すべての DNS リクエストを、/etc/resolv.conf ファイルで指定されている最初の DNS サーバーに送信します。このサーバーが応答しない場合、RHEL は動作するサーバーが見つかるまでこのファイル内の次のサーバーを試行します。ある DNS サーバーがすべてのドメインを解決できない環境では、管理者は、特定のドメインの DNS 要求を選択した DNS サーバーに送信するように RHEL を設定できます。
たとえば、サーバーを仮想プライベートネットワーク (VPN) に接続し、VPN 内のホストが example.com ドメインを使用するとします。この場合、次の方法で DNS クエリーを処理するように RHEL を設定できます。
-
example.comの DNS 要求のみを VPN ネットワーク内の DNS サーバーに送信します。 - 他のすべての要求は、デフォルトゲートウェイを使用して接続プロファイルで設定されている DNS サーバーに送信します。
25.1. NetworkManager で dnsmasq を使用して、特定のドメインの DNS リクエストを選択した DNS サーバーに送信する リンクのコピーリンクがクリップボードにコピーされました!
複数のネットワークインターフェイスがあり、1 台の DNS サーバーですべてのドメインを解決できないホストでは、特定のドメインに対する DNS 要求を選択した DNS サーバーに送信するように RHEL を設定できます。
dnsmasq のインスタンスを開始するように NetworkManager を設定できます。次に、この DNS キャッシュサーバーは、loopback デバイスのポート 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
検証
NetworkManagerユニットのsystemdジャーナルで、サービスが別の DNS サーバーを使用しているドメインを検索します。# 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 tcpdump1 つのターミナルで
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サービスがloopbackデバイスのポート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