23.2. NetworkManager で systemd-resolved を使用して、特定のドメインの DNS 要求を選択した DNS サーバーに送信する
NetworkManager を設定して、systemd-resolved のインスタンスを開始することができます。次に、この DNS スタブリゾルバーは、IP アドレス 127.0.0.53 のポート 53 でリッスンします。したがって、このスタブリゾルバーはローカルシステムからのみ到達でき、ネットワークからは到達できません。
この設定では、NetworkManager は nameserver 127.0.0.53 エントリーを /etc/resolv.conf ファイルに追加し、systemd-resolved は、NetworkManager 接続プロファイルで指定された対応する DNS サーバーに DNS 要求を動的にルーティングします。
systemd-resolved サービスは、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能では、最新の製品機能をいち早く提供します。これにより、お客様は開発段階で機能をテストし、フィードバックを提供できます。
テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
サポートされるソリューションは、Using dnsmasq in NetworkManager to send DNS requests for a specific domain to a selected DNS server を参照してください。
前提条件
- システムに 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パラメーターを設定することもできます。
-
手順
systemd-resolvedパッケージをインストールします。# dnf install systemd-resolvedsystemd-resolvedサービスを有効にして起動します。# systemctl --now enable systemd-resolved/etc/NetworkManager/NetworkManager.confファイルを編集し、[main]セクションに以下のエントリーを設定します。dns=systemd-resolvedNetworkManagerサービスを再読み込みします。# systemctl reload NetworkManager
検証
systemd-resolvedが使用する DNS サーバーと、サービスが別の DNS サーバーを使用するドメインを表示します。# resolvectl ... Link 2 (enp1s0) Current Scopes: DNS Protocols: +DefaultRoute ... Current DNS Server: 192.0.2.1 DNS Servers: 192.0.2.1 Link 3 (tun0) Current Scopes: DNS Protocols: -DefaultRoute ... Current DNS Server: 198.51.100.7 DNS Servers: 198.51.100.7 203.0.113.19 DNS Domain: example.comこの出力では、
systemd-resolvedがexample.comドメインに異なる DNS サーバーを使用していることを確認します。tcpdumpパケットスニファを使用して、DNS 要求の正しいルートを確認します。tcpdumpパッケージをインストールします。# yum 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 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.53を指していることを確認します。# cat /etc/resolv.conf nameserver 127.0.0.53エントリーがない場合は、
/etc/NetworkManager/NetworkManager.confファイルのdnsパラメーターを確認します。systemd-resolvedサービスがローカルの IP アドレス127.0.0.53の53ポートでリッスンしていることを確認します。# ss -tulpn | grep "127.0.0.53" udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1050,fd=12)) tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=1050,fd=13))サービスが
127.0.0.53:53をリッスンしない場合は、systemd-resolvedサービスが実行されているかどうかを確認します。