「Systemd-resolved」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→DNS over TLS: Warning を削除。記事を追加) |
|||
| (3人の利用者による、間の18版が非表示) | |||
| 1行目: | 1行目: | ||
| − | {{Translateme|翻訳のご協力、もしくは英語版を参照してください。}} |
||
{{Lowercase title}} |
{{Lowercase title}} |
||
| − | [[Category: |
+ | [[Category:ドメインネームシステム]] |
| − | [[Category:マルチキャスト DNS]] |
||
[[en:Systemd-resolved]] |
[[en:Systemd-resolved]] |
||
| + | [[de:Systemd/systemd-resolved]] |
||
| + | [[es:Systemd-resolved]] |
||
| + | [[ru:Systemd-resolved]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|systemd-networkd}} |
{{Related|systemd-networkd}} |
||
| 19行目: | 20行目: | ||
''systemd-resolved'' は [[Domain Name System|Domain Name System (DNS)]] ([[DNSSEC]] と [[Wikipedia:DNS over TLS|DNS over TLS]] を含む) と [[Wikipedia:Multicast DNS|Multicast DNS (mDNS)]] そして [[Wikipedia:Link-Local Multicast Name Resolution|Link-Local Multicast Name Resolution (LLMNR)]] のリゾルバサービスを提供します。 |
''systemd-resolved'' は [[Domain Name System|Domain Name System (DNS)]] ([[DNSSEC]] と [[Wikipedia:DNS over TLS|DNS over TLS]] を含む) と [[Wikipedia:Multicast DNS|Multicast DNS (mDNS)]] そして [[Wikipedia:Link-Local Multicast Name Resolution|Link-Local Multicast Name Resolution (LLMNR)]] のリゾルバサービスを提供します。 |
||
| − | リゾルバは {{ic|/etc/systemd/resolved.conf}} を編集するか、あるいは {{ic|/etc/systemd/resolved.conf.d/}} のドロップイン ''.conf'' ファイルで設定できます。{{man|5|resolved.conf}} を参照してください。 |
+ | リゾルバは {{ic|/etc/systemd/resolved.conf}} を編集するか、あるいは {{ic|/etc/systemd/resolved.conf.d/}} 中のドロップイン ''.conf'' ファイルで設定できます。{{man|5|resolved.conf}} を参照してください。 |
''systemd-resolved'' を使うには {{ic|systemd-resolved.service}} を[[起動]]・[[有効化]]してください。 |
''systemd-resolved'' を使うには {{ic|systemd-resolved.service}} を[[起動]]・[[有効化]]してください。 |
||
| 27行目: | 28行目: | ||
=== DNS === |
=== DNS === |
||
| + | glibc の {{man|3|getaddrinfo}} (または同等のもの)に依存するソフトウェアは、デフォルトで {{man|8|nss-resolve}} が使用可能な場合、{{ic|/etc/nsswitch.conf}} を使用するように設定されているため、そのまま使用できます。 |
||
| − | ''systemd-resolved'' は[[ドメイン名前解決]]を処理する4つのモードを備えています (4つのモードについては {{man|8|systemd-resolved|/ETC/RESOLV.CONF}} に説明があります)。ここでは重要な2つのモードについて説明します。 |
||
| + | [[ウェブブラウザ]] や [[GnuPG]] など、{{ic|/etc/resolv.conf}} を直接読み取るソフトウェアに[[ドメイン名前解決]]を提供するために、''systemd-resolved'' にはファイルを処理するための 4 つの異なるモード( スタブ、スタティック、アップリンク そしてフォーリン )があります。それらは、{{man|8|systemd-resolved|/ETC/RESOLV.CONF}} で説明されています。ここでは推奨モード、すなわち、{{ic|/run/systemd/resolve/stub-resolv.conf}} を使用するスタブモードにのみ注目します。 |
||
| − | # systemd の DNS スタブファイルを使う - systemd の DNS スタブファイル {{ic|/run/systemd/resolve/stub-resolv.conf}} にはローカススタブ {{ic|127.0.0.53}} が唯一の DNS サーバーとして含まれ、検索ドメインのリストが記載されています。これは'''推奨されている'''動作モードです。サービスユーザーは {{ic|/etc/resolv.conf}} ファイルを ''systemd-resolved'' によって管理されるローカルのスタブ DNS リゾルバファイル {{ic|/run/systemd/resolve/stub-resolv.conf}} に転送することが推奨されます。これにより全てのクライアントについて systemd が設定を管理するようになります。{{ic|/etc/resolv.conf}} を systemd スタブのシンボリックリンクに置き換えることで設定できます: {{bc|# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf}} |
||
| − | # ''resolv.conf'' を保護 - このモードでは {{ic|/etc/resolv.conf}} は維持され ''systemd-resolved'' はこのファイルのクライアントになります。このモードでは他のパッケージで {{ic|/etc/resolv.conf}} を管理できるため作用を抑えられます。 |
||
| + | {{ic|/run/systemd/resolve/stub-resolv.conf}} には唯一の DNS サーバとしてのローカルスタブ {{ic|127.0.0.53}} と検索ドメインのリストが含まれています。これは、systemd-resolved で管理された設定をすべてのクライアントに伝達する推奨の操作モードです。これを使用するには、{{ic|/etc/resolv.conf}} をそのシンボリックリンクに置き換えます。 |
||
| − | {{Note|''systemd-resolved'' の動作モードは {{ic|/etc/resolv.conf}} がローカルスタブ DNS リゾルバファイルのシンボリックリンクになっているか、あるいはサーバー名が含まれているかどうかによって自動的に検出されます。}} |
||
| + | |||
| + | # ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf |
||
| + | |||
| + | {{Note| |
||
| + | * {{ic|/etc/resolv.conf}} を正しく設定しないと、DNS の解決に支障をきたすことになります。 |
||
| + | * このファイルは外部のシステムからバインドマウントされるので、''arch-chroot'' の中では {{ic|/etc/resolv.conf}} シンボリックリンクを作成することはできません。代わりに、chroot の外からシンボリックリンクを作成します。例: {{bc|# ln -sf /run/systemd/resolve/stub-resolv.conf ''/mnt''/etc/resolv.conf}} }} |
||
==== DNS サーバーの設定 ==== |
==== DNS サーバーの設定 ==== |
||
| 46行目: | 52行目: | ||
{{Note| |
{{Note| |
||
* ''systemd-resolved'' の ''resolvconf'' インターフェイスには制限がありクライアントによっては動作しない可能性があります。詳しくは {{man|1|resolvectl|COMPATIBILITY WITH RESOLVCONF(8)}} を参照。 |
* ''systemd-resolved'' の ''resolvconf'' インターフェイスには制限がありクライアントによっては動作しない可能性があります。詳しくは {{man|1|resolvectl|COMPATIBILITY WITH RESOLVCONF(8)}} を参照。 |
||
| − | * {{Pkg|systemd-resolvconf}} |
+ | * {{Pkg|systemd-resolvconf}} は {{ic|systemd-resolved.service}} が実行されている場合のみ機能します。''systemd-resolved'' を使用していない場合は、{{Pkg|systemd-resolvconf}} パッケージが[[アンインストール]]されている事を確認してください。そうでない場合、{{ic|/usr/bin/resolvconf}} バイナリを期待するネットワークソフトウェアで問題が発生します。 |
}} |
}} |
||
===== 手動 ===== |
===== 手動 ===== |
||
| − | + | スタブモードとスタティックモードでは、カスタム DNS サーバを {{man|5|resolved.conf}} ファイルで設定できます。 |
|
{{hc|/etc/systemd/resolved.conf.d/dns_servers.conf|2= |
{{hc|/etc/systemd/resolved.conf.d/dns_servers.conf|2= |
||
| 60行目: | 66行目: | ||
{{Note| |
{{Note| |
||
| + | * {{man|5|resolved.conf}} の {{ic|1=Domains=~.}} オプションがないと、リンク単位の設定で {{ic|1=Domains=~.}} を設定している DNS サーバがあれば、''systemd-resolved'' はそれを使う可能性があります。 |
||
| − | * Without the {{ic|1=Domains=~.}} option in {{man|5|resolved.conf}}, ''systemd-resolved'' might use the per-link DNS servers, if any of them set {{ic|1=Domains=~.}} in the per-link configuration. |
||
| + | * このオプションは、リンクごとの設定で指定されたより詳細な検索ドメインに一致するドメイン名の検索には影響しません。リンク単位の設定について詳しくは [[systemd-networkd#network ファイル]] を参照してください。 |
||
| − | * This option will not affect queries of domain names that match the more specific search domains specified in per-link configuration, they will still be resolved using their respective per-link DNS servers. |
||
| − | For more information on per-link configuration see [[systemd-networkd#network files]]. |
||
}} |
}} |
||
| 69行目: | 74行目: | ||
''systemd-resolved'' が[[ネットワークマネージャ]]から DNS サーバーアドレスを受信できず[[#手動|手動]]でも DNS サーバーが設定されていない場合、DNS 解決が常に機能するように ''systemd-resolved'' はフォールバック DNS アドレスにフォールバックします。 |
''systemd-resolved'' が[[ネットワークマネージャ]]から DNS サーバーアドレスを受信できず[[#手動|手動]]でも DNS サーバーが設定されていない場合、DNS 解決が常に機能するように ''systemd-resolved'' はフォールバック DNS アドレスにフォールバックします。 |
||
| − | {{Note|1=フォールバック DNS は |
+ | {{Note|1=フォールバック DNS は以下の順番で使われます: Cloudflare, Quad9, Google, サーバーがどこに定義されているかどうかは [https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/systemd#n103 systemd の PKGBUILD] を見てください。}} |
{{man|5|resolved.conf}} で {{ic|1=FallbackDNS=}} を設定することでフォールバックのアドレスは変更できます。例: |
{{man|5|resolved.conf}} で {{ic|1=FallbackDNS=}} を設定することでフォールバックのアドレスは変更できます。例: |
||
| 87行目: | 92行目: | ||
==== DNSSEC ==== |
==== DNSSEC ==== |
||
| + | {{Warning|2023年6月時点で、systemd-resolved における DNSSEC サポートは実験的かつ不完全と見なされています。[https://github.com/systemd/systemd/issues/25676#issuecomment-1634810897] そのため、{{Pkg|systemd}} はデフォルトで DNSSEC 検証が無効になった状態でビルドされています。}} |
||
| − | デフォルトでは、上流の DNS サーバーが [[DNSSEC]] をサポートしている場合のみ、DNSSEC 検証が有効になります。常に DNSSEC を確認したい場合 (DNSSEC をサポートしていない名前サーバーでは DNS 解決ができなくなります)、{{ic|1=DNSSEC=true}} を設定してください: |
||
| + | |||
| + | [[DNSSEC]] の検証は {{man|5|resolved.conf}} の {{ic|1=DNSSEC=}} 設定を変更することで有効にできます。 |
||
| + | |||
| + | * {{ic|1=DNSSEC=allow-downgrade}} を設定すると、上流の DNS サーバが DNSSEC をサポートしている場合のみ DNSSEC を検証します。 |
||
| + | * 以下のように、{{ic|1=DNSSEC=true}} を設定すると、常に DNSSEC 検証が行われますが、DNSSEC をサポートしていないネームサーバでは、DNS 解決が失敗します。例えば以下のように設定します: |
||
{{hc|/etc/systemd/resolved.conf.d/dnssec.conf|2= |
{{hc|/etc/systemd/resolved.conf.d/dnssec.conf|2= |
||
| 94行目: | 104行目: | ||
}} |
}} |
||
| + | 無効な署名を持つドメインにクエリを送信して、DNSSEC 検証をテストします: |
||
| − | {{Note| |
||
| − | * DNS サーバーが DNSSEC をサポートしておらずデフォルトの allow-downgrade モードでは問題が発生するとき (例: [https://github.com/systemd/systemd/issues/10579 systemd issue 10579])、{{ic|1=DNSSEC=false}} を設定することで systemd-resolved の DNSSEC サポートを明示的に無効化できます。 |
||
| − | * systemd-resolved may disable DNSSEC after a few unsuccessful validations. If the {{ic|DNSSEC}} option is set to {{ic|true}}, then DNS resolution will stop working entirely. See [https://github.com/systemd/systemd/issues/9867 systemd issue 9867]. |
||
| − | }} |
||
| − | |||
| − | 不正な署名のドメインを問い合わせて DNSSEC 検証をテスト: |
||
| − | {{hc|$ resolvectl query |
+ | {{hc|$ resolvectl query badsig.go.dnscheck.tools| |
| − | + | badsig.go.dnscheck.tools: resolve call failed: DNSSEC validation failed: invalid |
|
}} |
}} |
||
| − | + | 次に、有効な署名でドメインをテストします: |
|
| − | {{hc|$ resolvectl query |
+ | {{hc|$ resolvectl query go.dnscheck.tools| |
| + | go.dnscheck.tools: 2604:a880:400:d0::256e:b001 -- link: enp2s0 |
||
| − | sigok.verteiltesysteme.net: 134.91.78.139 |
||
| + | 142.93.10.179 -- link: enp2s0 |
||
| − | -- Information acquired via protocol DNS in |
+ | -- Information acquired via protocol DNS in 122.2ms. |
| − | -- Data is authenticated: yes |
+ | -- '''Data is authenticated: yes'''; Data was acquired via local or encrypted transport: no |
| + | -- Data from: network |
||
}} |
}} |
||
==== DNS over TLS ==== |
==== DNS over TLS ==== |
||
| − | DNS over TLS はデフォルトでは無効になっています。有効にするには {{man|5|resolved.conf}} の {{ic|[Resolve]}} セクションの {{ic|1=DNSOverTLS=}} 設定を変更してください。 |
+ | DNS over TLS はデフォルトでは無効になっています。有効にするには {{man|5|resolved.conf}} の {{ic|[Resolve]}} セクションの {{ic|1=DNSOverTLS=}} 設定を変更してください。DNS プロバイダのサーバ証明書の検証を有効にするには、{{ic|1=DNS=}} の設定にそのホスト名を{{ic|''ip_address''#''hostname''}} の形式で含めます。例えば: |
{{hc|/etc/systemd/resolved.conf.d/dns_over_tls.conf|2= |
{{hc|/etc/systemd/resolved.conf.d/dns_over_tls.conf|2= |
||
[Resolve] |
[Resolve] |
||
| + | DNS=9.9.9.9#dns.quad9.net |
||
DNSOverTLS=yes |
DNSOverTLS=yes |
||
}} |
}} |
||
| + | {{Note| |
||
| − | {{Note|使用する DNS サーバーが DNS over TLS をサポートしていない場合、DNS リクエストが全て失敗するようになります。}} |
||
| + | * {{ic|1=DNSOverTLS=yes}} を設定する場合、使用する DNS サーバーが DNS over TLS をサポートしている必要があります。そうでなければ、すべての DNS リクエストが失敗します。 |
||
| + | * 代替として、{{ic|1=DNSOverTLS=opportunistic}} を設定することで、サーバーが DNS over TLS をサポートしている場合のみ使用することもできます。この場合、使用する DNS サーバーが DNS over TLS をサポートしていない場合は、systemd-resolved が通常の暗号化されていない DNS にフォールバックします。 |
||
| + | }} |
||
| + | DNS over TLS は常にポート 853 を使用し、ポート 53 を使用しないので、{{pkg|ngrep}} は DNS over TLS が機能しているかどうかをテストするために使用することができます。コマンド {{ic|ngrep port 53}} はホスト名が DNS over TLS で解決されたときに何も出力せず、{{ic|ngrep port 853}} は暗号化された出力になるはずです。 |
||
| − | {{pkg|ngrep}} can be used to test if DNS over TLS is working since DNS over TLS always uses port 853 and never port 53. The command {{ic|ngrep port 53}} should produce no output when a hostname is resolved with DNS over TLS and {{ic|ngrep port 853}} should produce encrypted output. |
||
| + | |||
| + | [[Wireshark]] を使用すると、DNS over TLS クエリの詳細なパケット解析が可能です。 |
||
| + | |||
| + | ==== 追加のリスニングインターフェース ==== |
||
| + | |||
| + | "systemd-resolved" はデフォルトでループバックインターフェースを介してローカルアプリケーションの DNS リクエストに応答します。デフォルトのインターフェース以外にも DNS リクエストに応答させたい場合は、各追加インターフェースに対して {{man|5|resolved.conf}} 内でオプション {{ic|DNSStubListenerExtra}} を設定します。例えば以下のようにします: |
||
| + | |||
| + | {{hc|/etc/systemd/resolved.conf.d/additional-listening-interfaces.conf|2= |
||
| + | [Resolve] |
||
| + | DNSStubListenerExtra=192.168.10.10 |
||
| + | DNSStubListenerExtra=2001:db8:0:f102::10 |
||
| + | DNSStubListenerExtra=192.168.10.11:9953 |
||
| + | }} |
||
| + | {{Tip|これは、DNS サーバーとして機能する [[ルーター]] に ''systemd-forsolved'' を使用する場合に便利です。}} |
||
| − | [[Wireshark]] can be used for more detailed packet inspection of DNS over TLS queries. |
||
=== mDNS === |
=== mDNS === |
||
| 175行目: | 199行目: | ||
LLMNR と[[ファイアウォール]]を使う場合、UDP と TCP のポート {{ic|5355}} を開いてください。 |
LLMNR と[[ファイアウォール]]を使う場合、UDP と TCP のポート {{ic|5355}} を開いてください。 |
||
| − | == |
+ | == ルックアップ == |
DNS レコードや mDNS あるいは LLMNR ホストを問い合わせるには ''resolvectl'' ユーティリティを使います。 |
DNS レコードや mDNS あるいは LLMNR ホストを問い合わせるには ''resolvectl'' ユーティリティを使います。 |
||
| 188行目: | 212行目: | ||
-- Data is authenticated: no |
-- Data is authenticated: no |
||
}} |
}} |
||
| − | |||
| − | {{man|1|resolvectl|EXAMPLES}} には他の例が存在します。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
| 195行目: | 217行目: | ||
=== system-resolved がローカルドメインを検索しない === |
=== system-resolved がローカルドメインを検索しない === |
||
| − | ''systemd-resolved'' は、 {{ic|1=UseDomains = yes}} または {{ic|1=Domains=[domain-list]}} が存在する場合でも、ホスト名のみが指定されているとローカルドメインを検索しない場合があります。適切な [[systemd-networkd]]の ''.network'' ファイルにあり、そのファイルは {{ic|resolv.conf}} によって {{ic|search[domain-list]}} を生成します。 {{ic| |
+ | ''systemd-resolved'' は、 {{ic|1=UseDomains = yes}} または {{ic|1=Domains=[domain-list]}} が存在する場合でも、ホスト名のみが指定されているとローカルドメインを検索しない場合があります。適切な [[systemd-networkd]]の ''.network'' ファイルにあり、そのファイルは {{ic|resolv.conf}} によって {{ic|search[domain-list]}} を生成します。 {{ic|networkctl status}} または {{ic|resolvectl status}} を実行して、検索ドメインが実際に取得されているかどうかを確認できます。 |
考えられる回避策: |
考えられる回避策: |
||
| 207行目: | 229行目: | ||
=== systemd-resolved がサフィックスがないホスト名を解決できない === |
=== systemd-resolved がサフィックスがないホスト名を解決できない === |
||
| − | 完全修飾ドメイン名ではないシステム解決ホスト名を解決するには、 {{ic|1= |
+ | 完全修飾ドメイン名ではないシステム解決ホスト名を解決するには、 {{ic|1=ResolveUnicastSingleLabel=yes}} を {{ic|/etc/systemd/resolved.conf}} に追加します。 |
{{Warning|これにより、ユーザーの制御下にないグローバル DNS サーバーに単一ラベル名が転送されます。この動作は標準に準拠しておらず、プライバシーとセキュリティのリスクを引き起こす可能性があります。詳細については、 {{man|5|resolved.conf}} を参照してください。}} |
{{Warning|これにより、ユーザーの制御下にないグローバル DNS サーバーに単一ラベル名が転送されます。この動作は標準に準拠しておらず、プライバシーとセキュリティのリスクを引き起こす可能性があります。詳細については、 {{man|5|resolved.conf}} を参照してください。}} |
||
| − | これは、 LLMR が |
+ | これは、 LLMR が無効化 ({{ic|1=LLMR=no}}) されている場合にのみ発生するようです。 |
| − | [[systemd-networkd]] を使用している場合、DHCP サーバーまたは IPv6 ルーター通知によって提供されるドメインを検索ドメインとして使用できます。デフォルトでは無効になっており、インターフェイスの ''.network'' ファイルに追加して有効にします。 |
+ | [[systemd-networkd]] を使用している場合、DHCP サーバーまたは IPv6 ルーター通知によって提供されるドメインを検索ドメインとして使用できます。デフォルトでは無効になっており、インターフェイスの ''.network'' ファイルに以下を追加して有効にします。 |
{{bc|1= |
{{bc|1= |
||
| − | [ |
+ | [Network] |
UseDomains=true |
UseDomains=true |
||
| − | |||
| − | [IPv6AcceptRA] |
||
| − | UseDomains=yes |
||
}} |
}} |
||
| − | 各インターフェイスの systemd-resolved の内容を確認するには、次のコマンドを使用します |
+ | 各インターフェイスの systemd-resolved の内容を確認するには、次のコマンドを使用します: |
$ resolvectl domain |
$ resolvectl domain |
||
2025年2月5日 (水) 05:23時点における最新版
systemd-resolved は D-Bus インターフェイスと resolve NSS サービス (nss-resolve(8))、127.0.0.53 のローカル DNS スタブリスナによるネットワーク名前解決をローカルアプリケーションに提供する systemd サービスです。使用方法については systemd-resolved(8) を見てください。
目次
インストール
systemd-resolved はデフォルトでインストールされる systemd パッケージの一部です。
設定
systemd-resolved は Domain Name System (DNS) (DNSSEC と DNS over TLS を含む) と Multicast DNS (mDNS) そして Link-Local Multicast Name Resolution (LLMNR) のリゾルバサービスを提供します。
リゾルバは /etc/systemd/resolved.conf を編集するか、あるいは /etc/systemd/resolved.conf.d/ 中のドロップイン .conf ファイルで設定できます。resolved.conf(5) を参照してください。
systemd-resolved を使うには systemd-resolved.service を起動・有効化してください。
DNS
glibc の getaddrinfo(3) (または同等のもの)に依存するソフトウェアは、デフォルトで nss-resolve(8) が使用可能な場合、/etc/nsswitch.conf を使用するように設定されているため、そのまま使用できます。
ウェブブラウザ や GnuPG など、/etc/resolv.conf を直接読み取るソフトウェアにドメイン名前解決を提供するために、systemd-resolved にはファイルを処理するための 4 つの異なるモード( スタブ、スタティック、アップリンク そしてフォーリン )があります。それらは、systemd-resolved(8) § /ETC/RESOLV.CONF で説明されています。ここでは推奨モード、すなわち、/run/systemd/resolve/stub-resolv.conf を使用するスタブモードにのみ注目します。
/run/systemd/resolve/stub-resolv.conf には唯一の DNS サーバとしてのローカルスタブ 127.0.0.53 と検索ドメインのリストが含まれています。これは、systemd-resolved で管理された設定をすべてのクライアントに伝達する推奨の操作モードです。これを使用するには、/etc/resolv.conf をそのシンボリックリンクに置き換えます。
# ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
DNS サーバーの設定
自動
systemd-resolved は /etc/resolv.conf によってネットワークマネージャでは自動的に使用されます。systemd-resolved は /etc/resolv.conf シンボリックリンクで認識されるため特に設定は必要ありません。systemd-networkd や NetworkManager がその場合に該当します。
ただし DHCP や VPN クライアントが resolvconf プログラムを使用して名前サーバーや検索ドメインを設定する場合 (resolvconf を使用するソフトウェアの一覧については openresolv#使用プログラムを見てください)、/usr/bin/resolvconf シンボリックリンクを作るために追加パッケージ systemd-resolvconf が必要です。
手動
スタブモードとスタティックモードでは、カスタム DNS サーバを resolved.conf(5) ファイルで設定できます。
/etc/systemd/resolved.conf.d/dns_servers.conf
[Resolve] DNS=192.168.35.1 fd7b:d0bd:7a6e::1 Domains=~.
フォールバック
systemd-resolved がネットワークマネージャから DNS サーバーアドレスを受信できず手動でも DNS サーバーが設定されていない場合、DNS 解決が常に機能するように systemd-resolved はフォールバック DNS アドレスにフォールバックします。
resolved.conf(5) で FallbackDNS= を設定することでフォールバックのアドレスは変更できます。例:
/etc/systemd/resolved.conf.d/fallback_dns.conf
[Resolve] FallbackDNS=127.0.0.1 ::1
フォールバック DNS 機能を無効化したい場合は特にアドレスを指定せずに FallbackDNS オプションを設定してください:
/etc/systemd/resolved.conf.d/fallback_dns.conf
[Resolve] FallbackDNS=
DNSSEC
DNSSEC の検証は resolved.conf(5) の DNSSEC= 設定を変更することで有効にできます。
DNSSEC=allow-downgradeを設定すると、上流の DNS サーバが DNSSEC をサポートしている場合のみ DNSSEC を検証します。- 以下のように、
DNSSEC=trueを設定すると、常に DNSSEC 検証が行われますが、DNSSEC をサポートしていないネームサーバでは、DNS 解決が失敗します。例えば以下のように設定します:
/etc/systemd/resolved.conf.d/dnssec.conf
[Resolve] DNSSEC=true
無効な署名を持つドメインにクエリを送信して、DNSSEC 検証をテストします:
$ resolvectl query badsig.go.dnscheck.tools
badsig.go.dnscheck.tools: resolve call failed: DNSSEC validation failed: invalid
次に、有効な署名でドメインをテストします:
$ resolvectl query go.dnscheck.tools
go.dnscheck.tools: 2604:a880:400:d0::256e:b001 -- link: enp2s0
142.93.10.179 -- link: enp2s0
-- Information acquired via protocol DNS in 122.2ms.
-- Data is authenticated: yes; Data was acquired via local or encrypted transport: no
-- Data from: network
DNS over TLS
DNS over TLS はデフォルトでは無効になっています。有効にするには resolved.conf(5) の [Resolve] セクションの DNSOverTLS= 設定を変更してください。DNS プロバイダのサーバ証明書の検証を有効にするには、DNS= の設定にそのホスト名をip_address#hostname の形式で含めます。例えば:
/etc/systemd/resolved.conf.d/dns_over_tls.conf
[Resolve] DNS=9.9.9.9#dns.quad9.net DNSOverTLS=yes
DNS over TLS は常にポート 853 を使用し、ポート 53 を使用しないので、ngrep は DNS over TLS が機能しているかどうかをテストするために使用することができます。コマンド ngrep port 53 はホスト名が DNS over TLS で解決されたときに何も出力せず、ngrep port 853 は暗号化された出力になるはずです。
Wireshark を使用すると、DNS over TLS クエリの詳細なパケット解析が可能です。
追加のリスニングインターフェース
"systemd-resolved" はデフォルトでループバックインターフェースを介してローカルアプリケーションの DNS リクエストに応答します。デフォルトのインターフェース以外にも DNS リクエストに応答させたい場合は、各追加インターフェースに対して resolved.conf(5) 内でオプション DNSStubListenerExtra を設定します。例えば以下のようにします:
/etc/systemd/resolved.conf.d/additional-listening-interfaces.conf
[Resolve] DNSStubListenerExtra=192.168.10.10 DNSStubListenerExtra=2001:db8:0:f102::10 DNSStubListenerExtra=192.168.10.11:9953
mDNS
systemd-resolved は マルチキャスト DNS リゾルバ・レスポンダとして使えます。
リゾルバは "hostname.local" 命名規則によるホストネーム解決を提供します。
mDNS は systemd-resolved の全体設定 (resolved.conf(5) の MulticastDNS=) とネットワークマネージャの接続毎の設定の両方が有効になっている場合にのみ使われます。デフォルトで systemd-resolved は mDNS レスポンダを有効にしますが systemd-networkd と NetworkManager はどちらも接続毎の設定で有効にしません:
- systemd-networkd の場合、
[Network]セクションにMulticastDNS=設定があります。systemd.network(5) を見てください。 - NetworkManager の場合、設定は
[connection]セクションのmdns=です。利用可能な値:0- 無効,1- リゾルバのみ,2- リゾルバとレスポンダ [2]。
mDNS とファイアウォールを使う場合は、UDP ポート 5353 が開いていることを確認してください。
LLMNR
Link-Local Multicast Name Resolution は Microsoft によって作られたホストネーム解決プロトコルです。
LLMNR は systemd-resolved の全体設定 (resolved.conf(5) の LLMNR=) とネットワークマネージャの接続毎の設定の両方が有効になっている場合にのみ使われます。デフォルトで systemd-resolved は LLMNR レスポンダを有効にし、systemd-networkd と NetworkManager は接続の設定も有効にします。
- systemd-networkd の場合、設定は
[Network]セクションのLLMNR=です。systemd.network(5) を見てください。 - NetworkManager の場合、
[connection]セクションのllmnr=が設定です。nm-settings(5) を見てください。利用可能な値:0- 無効化,1- リゾルバのみ,2- リゾルバとレスポンダ。
LLMNR とファイアウォールを使う場合、UDP と TCP のポート 5355 を開いてください。
ルックアップ
DNS レコードや mDNS あるいは LLMNR ホストを問い合わせるには resolvectl ユーティリティを使います。
例えば DNS レコードを確認するには:
$ resolvectl query archlinux.org
archlinux.org: 2a01:4f8:172:1d86::1
138.201.81.199
-- Information acquired via protocol DNS in 48.4ms.
-- Data is authenticated: no
トラブルシューティング
system-resolved がローカルドメインを検索しない
systemd-resolved は、 UseDomains = yes または Domains=[domain-list] が存在する場合でも、ホスト名のみが指定されているとローカルドメインを検索しない場合があります。適切な systemd-networkdの .network ファイルにあり、そのファイルは resolv.conf によって search[domain-list] を生成します。 networkctl status または resolvectl status を実行して、検索ドメインが実際に取得されているかどうかを確認できます。
考えられる回避策:
- LLMNR を無効にすると、「systemd-resolved」がすぐに DNS サフィックスの追加を続行できるようになります。
/etc/nsswitch.confのhostsデータベースをトリミングします (たとえば、resolve service の)[!UNAVAIL=return]オプションを削除します- 完全修飾ドメイン名の使用に切り替えます。
- ホスト名を解決するには
/etc/hostsを使用します。 - systemdの
resolveを使用する代わりに、 glibc のdnsを使用するようにフォールバックします。
systemd-resolved がサフィックスがないホスト名を解決できない
完全修飾ドメイン名ではないシステム解決ホスト名を解決するには、 ResolveUnicastSingleLabel=yes を /etc/systemd/resolved.conf に追加します。
これは、 LLMR が無効化 (LLMR=no) されている場合にのみ発生するようです。
systemd-networkd を使用している場合、DHCP サーバーまたは IPv6 ルーター通知によって提供されるドメインを検索ドメインとして使用できます。デフォルトでは無効になっており、インターフェイスの .network ファイルに以下を追加して有効にします。
[Network] UseDomains=true
各インターフェイスの systemd-resolved の内容を確認するには、次のコマンドを使用します:
$ resolvectl domain