ローカルDNSサーバーを使用してローカルドメインを確認し、リモートDNSサーバーを使用してリモートドメインを確認するようにsystemd-resolvedとsystemd-networkdを構成するにはどうすればよいですか?

ローカルDNSサーバーを使用してローカルドメインを確認し、リモートDNSサーバーを使用してリモートドメインを確認するようにsystemd-resolvedとsystemd-networkdを構成するにはどうすればよいですか?

LANに接続され、ゲートウェイを介してインターネットに接続します。ローカルネットワークには、ローカルネットワーク上のコンピュータのホスト名を解決できるDNSサーバーがあります。

整理したい体系的分析そしてシステムネットワークこのように、ローカルホスト名の検索要求はローカルDNSサーバーにのみ転送(ルーティング)され、他のすべてのホスト名の検索要求は他のリモートDNSサーバーにのみ転送されます。

構成ファイルがどこにあるのかわからず、さらに多くのファイルを追加する必要があるか、答えにそのパスを指定するように要求する必要があるとします。

答え1

ローカルネットワークインターフェイスの設定ファイル(名前パターンと一致するファイル/etc/systemd/network/*.network)で、DHCPサーバーを使用してローカルDNSサーバーアドレスを取得するように指定する必要があります。DHCP=オプション:

[Network]
DHCP=yes

または、次のようにアドレスを明示的に指定します。DNS=オプション:

[Network]
DNS=10.0.0.1

また、(同じセクションで)以下を使用してローカルドメインを指定する必要があります。Domains=オプション

Domains=domainA.example domainB.example ~example

domainA.example domainB.example次の動作を得るためにローカルドメインを指定します。systemd-resolved.service, systemd-resolvedマニュアルページ):

各インターフェイス ドメインの 1 つで終わるホスト名の検索は、一致するインターフェイスにのみルーティングされます。

この問題はhostX.domainA.example解決することができます。ただローカルDNSサーバーを介して。

~example次の動作を得るために、次に終わるすべてのドメインがルーティング専用ドメインとして処理されることを指定しますexample(説明では)。これ犯罪):

ルート専用ドメインを持つDNSサーバーは、指定されたドメインでのみ使用できます。

この問題はhostY.on.the.internet解決することができます。ただ当社のグローバルリモートDNSサーバーで提供されています。

ノート

理想的には、DHCPプロトコルを使用するときは、上記のネットワークインターフェイス設定ファイルに明示的に指定せずにDHCPサーバーからローカルドメイン名を取得する必要があります。バラよりUseDomains=オプション。ただし、この機能にはまだ解決されていない問題があります。systemd-networkd DHCP 検索ドメインオプション質問。

リモートDNSサーバーをグローバルシステム全体のDNSサーバーとして指定する必要があります。/etc/systemd/resolved.confファイルでこれを行うことができます。

[Resolve]
DNS=8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844

設定を再ロードしてサービスを再起動することを忘れないでください。

$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-networkd
$ sudo systemctl restart systemd-resolved

警告する!

上記の保証は、名前解決中にのみ適用されます。体系的分析- バラよりマニュアルページnss-resolve,libnss_resolve.so.2そしてsystemd-resolved.service, systemd-resolved のマニュアルページ

また見なさい:

引用:

答え2

@piotrDobrogostの優れた回答を拡張するには、DNS検証ソース/etc/nsswitch.confとして使用するように設定することを忘れないでください。systemd-resolved特定のユースケースでは、ディレクティブはhosts次のようになります。

/etc/nsswitch.conf

hosts:  files resolve dns

したがって、上記のPiotrDomainsの詳細のディレクティブで指定されたドメインにのみ解決を制限する場合は、ドメインが解決されたときに指定された名前解決/etc/systemd/resolved.confソースの順序で次にDNSを照会する必要があります。/etc/nsswitch.confいいえディレクティブで見つけることができますDomains

次のリンクは、指定された要件を参照します。解決する名前解決中も参照されます/etc/nsswitch.confsystemd-resolved

https://github.com/systemd/systemd/issues/940

SystemD文書がひどいことがわかりました。上記のPiotrの答えを含むいくつかのリンクから理解を集める必要がありました;-)

答え3

OpenVPN 接続を構成したため、これを行う場合は、以下を使用する必要があります。https://github.com/jonathanio/update-systemd-resolved~によるとhttps://wiki.archlinux.org/index.php/OpenVPN#The_update-systemd-resolved_custom_script

特にOpenVPNクライアント設定でスクリプトをインストールして有効にすると、同じクライアント設定にもupdate-systemd-resolved追加されます。dhcp-option DOMAIN-ROUTE yourdomain.com

OpenVPN では、次の出力が表示されます。

<14>Apr 22 16:10:31 update-systemd-resolved: Link 'tun0' coming up
<14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Routed Domain yourdomain.com
<14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Domain yourdomain.com
<14>Apr 22 16:10:31 update-systemd-resolved: Adding IPv4 DNS Server 192.168.XYZ.XYZ
<14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDNS(640 1 2 4 192 168 XYZ XYZ)
<14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDomains(640 2 yourdomain.com false yourdomain.com true)

次のコマンドを使用してDNS設定を確認できますresolvectl status

Link 3 (wlp0s....)
      Current Scopes: DNS
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
  Current DNS Server: 192.168.XYZ.XYZ
         DNS Servers: 192.168.XYZ.XYZ
          DNS Domain: ~.
                      lan
Link 640 (tun0)
      Current Scopes: DNS
DefaultRoute setting: no
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
  Current DNS Server: 192.168.XYZ.XYZ
         DNS Servers: 192.168.XYZ.XYZ
          DNS Domain: ~yourdomain.com

関連情報