第23章 異なるドメインでの各種 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 サーバーに送信します。
23.1. NetworkManager で dnsmasq を使用して、特定のドメインの DNS リクエストを選択した DNS サーバーに送信する リンクのコピーリンクがクリップボードにコピーされました!
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パッケージをインストールします。yum install dnsmasq
# yum install dnsmasqCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/NetworkManager/NetworkManager.confファイルを編集し、[main]セクションに以下のエントリーを設定します。dns=dnsmasq
dns=dnsmasqCopy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManagerサービスを再読み込みします。systemctl reload NetworkManager
# systemctl reload NetworkManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
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 ...
# journalctl -xeu NetworkManager ... Jun 02 13:30:17 <client_hostname>_ dnsmasq[5298]: using nameserver 198.51.100.7#53 for domain example.com ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow tcpdumpパケットスニファを使用して、DNS 要求の正しいルートを確認します。tcpdumpパッケージをインストールします。yum install tcpdump
# yum install tcpdumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つのターミナルで
tcpdumpを起動し、すべてのインターフェイスで DNS トラフィックを取得します。tcpdump -i any port 53
# tcpdump -i any port 53Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のターミナルで、例外が存在するドメインと別のドメインのホスト名を解決します。次に例を示します。
host -t A www.example.com host -t A www.redhat.com
# host -t A www.example.com # host -t A www.redhat.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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) ...
... 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) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# cat /etc/resolv.conf nameserver 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow エントリーがない場合は、
/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))# 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))Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスが
127.0.0.1:53をリッスンしていない場合は、NetworkManagerユニットのジャーナルエントリーを確認します。journalctl -u NetworkManager
# journalctl -u NetworkManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow