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 サーバーおよび検索ドメインは、特定のドメインを解決する NetworkManager 接続プロファイルで設定されます。
たとえば、VPN 接続で指定された DNS サーバーが
example.com
ドメインのクエリーを解決するようにするには、VPN 接続プロファイルに以下の設定が含まれている必要があります。-
example.com
を解決できる DNS サーバー -
ipv4.dns-search
およびipv6.dns-search
パラメーターでexample.com
に設定された検索ドメイン
-
手順
systemd-resolved
サービスを有効にして起動します。# systemctl --now enable systemd-resolved
/etc/NetworkManager/NetworkManager.conf
ファイルを編集し、[main]
セクションに以下のエントリーを設定します。dns=systemd-resolved
NetworkManager
サービスを再読み込みします。# 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
パッケージをインストールします。# dnf 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 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.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
サービスが実行されているかどうかを確認します。