第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 サーバーおよび検索ドメインは、特定のドメインを解決する NetworkManager 接続プロファイルで設定されます。
たとえば、VPN 接続で指定された DNS サーバーが
example.com
ドメインのクエリーを解決するようにするには、VPN 接続プロファイルに以下の設定が含まれている必要があります。-
example.com
を解決できる DNS サーバー -
ipv4.dns-search
およびipv6.dns-search
パラメーターでexample.com
に設定された検索ドメイン
-
-
dnsmasq
サービスが実行されていないか、localhost
とは異なるインターフェイスでリッスンするように設定されています。
手順
dnsmasq
パッケージをインストールします。# yum install dnsmasq
/etc/NetworkManager/NetworkManager.conf
ファイルを編集し、[main]
セクションに以下のエントリーを設定します。dns=dnsmasq
NetworkManager
サービスを再読み込みします。# 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
パッケージをインストールします。# yum install tcpdump
1 つのターミナルで
tcpdump
を起動し、すべてのインターフェイスで DNS トラフィックを取得します。# tcpdump -i any port 53
別のターミナルで、例外が存在するドメインと別のドメインのホスト名を解決します。次に例を示します。
# host -t A www.example.com # host -t A www.redhat.com
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
に送信します。
トラブルシューティング
/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