systemd-resolvedおよびsystemd-networkdを設定して、ローカルドメインの解決にローカルDNSサーバーを使用し、リモートドメインのリモートDNSサーバーを使用する方法


26

ゲートウェイ経由でインターネットにアクセスできるローカルエリアネットワークに接続しています。ローカルネットワークには、ローカルネットワークのコンピューターのホスト名を解決できるDNSサーバーがあります。

systemd-resolvedおよびsystemd-networkdを設定して、ローカルホスト名のルックアップ要求がローカルDNSサーバーに排他的に転送(ルーティング)され、他のすべてのホスト名のルックアップ要求が別のリモートDNSサーバーに排他的に転送されるようにします。

構成ファイルがどこにあるのか、またはさらにファイルを追加し、そのパスを回答で指定する必要があるのか​​わからない場合を考えてみましょう。

回答:


28

ローカルネットワークインターフェイスの構成ファイルでは、DHCP=オプションを使用してDHCPサーバーからローカルDNSサーバーアドレスを取得することを指定する必要があります

[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 manページから):

インターフェイスごとのドメインのいずれかで終わるホスト名のルックアップは、一致するインターフェイスのみにルーティングされます。

この方法hostX.domainA.exampleは、ローカルDNSサーバーによってのみ解決れます。

~example終わるすべてのドメインexampleをルート専用ドメインとして扱い、次の動作を得るように指定します(このコミットの説明から)。

ルート専用ドメインを持つDNSサーバーは、指定されたドメインにのみ使用する必要があります。

この方法hostY.on.the.internetは、グローバルなリモートDNSサーバーによってのみ解決れます。

注意

理想的には、DHCPプロトコルを使用する場合、ローカルドメイン名は、上記のネットワークインターフェイスの構成ファイルで明示的に指定するのではなく、DHCPサーバーから取得する必要があります。UseDomains=オプションを参照してください。ただし、この機能にはまだ未解決の問題があります。systemd-networkdDHCP検索ドメインオプションの問題を参照してください。

グローバルなシステム全体の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

あぶない!

保証は名前がによって解決されている場合にのみ適用されます上記のsystemdに分解 -参照のmanページNSS-決意、libnss_resolve.so.2にsystemd-resolved.serviceのmanページを、systemdに分解

こちらもご覧ください:

参照:


6
.localこの例では使用しないことを検討しましたか?確かにavahiの場合、これはMDNS用に予約されているはずで、誤用するのは大したことではありませんでした。example.comまたは.exampleを使用する方が明確です。
sourcejedi

1
参考のため@sourcejediは.local- RFC 6762に特別なドメインとして定義されているマルチキャストDNS部分におけるマルチキャストDNS名。ありがとう、修正しました。
ピョートルドブロゴスト

無関係なメモ:回答も自己承認できます。
intelfx

2
ローカルネットワークインターフェイスの構成ファイルの場所を追加することが役立つと思います。正しいかどうかわからない/etc/systemd/network/*.network?ここで見つかりましたsuperuser.com/a/1365864
ピエールコルディエ

1
私は、この回答の「構成ファイルで...」がOPの「構成ファイルがどこにあるかわからないと仮定しましょう...」に対して無反応であることを観察します。特定の構成ファイルの場所、この答えは不完全です。
エリックタワーズ

1

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

/etc/nsswitch.conf

hosts:  files resolve dns

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

以下のリンク参照を指定する必要決意をして/etc/nsswitch.confので、systemd-resolved名前解決の際に相談されています。

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

SystemDのドキュメント私はひどいことがわかった。上記のPiotrの回答を含む複数のリンクから理解をまとめる必要がありました;-)


使用している場合、推奨の動作モード分解にsystemd/etc/resolve.confへのシンボリックリンクで/run/systemd/resolve/stub-resolv.conf順番にのアドレスが含まれるファイルにsystemd-解決の場所には必要ありませんDNSスタブリゾルバresolveでディレクティブ/etc/nsswitch.confDNS要求が(原因標準に向けられるように、ファイルnss-dnsのディレクティブ)へのsystemd-resolvedのルールに従って動作するスタブリゾルバー。
ピョートルドブロゴスト

@PiotrDobrogost /etc/nsswitch.conf``? In the specimen config above, / etc / hosts`( " files ")を使用せずにDNS解決のソースを参照する方法を制御するには、静的IP:nameマッピングをチェックし、見つからない場合は、解決されたsystemd解決スタブが次に参照されます。それを使用せずにDNS解決のソースをステージングすることがどのように可能になるかわかりません/etc/nsswitch.conf。ここでトリックを逃していますか?
F1Linux

/etc/nsswitch.conf必要ないと言っているわけではありません。systemd-resolvedのスタブDNSリゾルバーを使用する場合、dnsディレクティブをhosts:行に(おそらくfileディレクティブの後に)リストするだけで十分だと言っています。プラグインモジュールではなく、systemd-resolvedのロジックへのエントリポイントでresolveあるスタブリゾルバであるため、そこにディレクティブは必要ありません...nss-resolve
Piotr Dobrogost

...言い換えると、ディレクティブ➟nss -resolve NSSプラグインモジュール➟systemd -resolvedまたはディレクティブ➟nss -dns NSSプラグインモジュール➟systemd -resolvedのスタブDNSリゾルバーのいずれかを介してsystemd-resolvedのロジックに到達 できますsystemd-resolvedresolvedns
Piotr Dobrogost

私は私が到着したと思います@PiotrDobrogost files、その後resolveにブツ/etc/nsswitch.confあなたの質問の第二の部分から。再読すると、ローカルキャッシュでIP:nameマッピングをチェックし、見つからない場合はフォワーダーに連絡することについて話しているように見えます。通常、filesDNSをバイパスするように最初のDNS解決ソースを設定して、テストを行い、運用ホストをヒットさせないようにします。T
F1Linux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.