「ドメイン名前解決」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→DNS 設定の保護: 削除) |
Kusanaginoturugi (トーク | 投稿記録) (ルックアップを探索に変更) |
||
(3人の利用者による、間の32版が非表示) | |||
1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
− | [[Category: |
+ | [[Category:ドメインネームシステム]] |
[[Category:ネットワーク設定]] |
[[Category:ネットワーク設定]] |
||
[[de:Resolv.conf]] |
[[de:Resolv.conf]] |
||
12行目: | 12行目: | ||
{{Related|パフォーマンスの最大化#ネットワーク}} |
{{Related|パフォーマンスの最大化#ネットワーク}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | 一般に、ドメイン名は IP アドレスを表し、 |
+ | 一般に、[[Wikipedia:ja:ドメイン名|ドメイン名]] は IP アドレスを表し、[[Wikipedia:ja:Domain Name System|ドメインネームシステム]] (DNS) で IP アドレスに関連付けられます。 |
+ | |||
+ | ここでは、ドメイン名前解決の設定方法とドメイン名の解決方法について説明します。 |
||
== Name Service Switch == |
== Name Service Switch == |
||
+ | [[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) 機能は GNU C ライブラリ ({{Pkg|glibc}}) の一部であり、{{man|3|getaddrinfo}} API をサポートしており、ドメイン名を解決するために使用されます。NSS では、システムデータベースを別々のサービスで提供することができ、その検索順序は管理者が {{man|5|nsswitch.conf}} で設定することができます。ドメイン名の解決を行うデータベースは ''hosts'' データベースであり、glibc は以下のサービスを提供しています。 |
||
− | {{Expansion|Mention {{Pkg|nss-mdns}}, {{AUR|nss-tls-git}} and others.}} |
||
+ | * ''files'': {{ic|/etc/hosts}} ファイルを読み込む。{{man|5|hosts}} を参照してください。 |
||
− | The [[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) facility is part of the GNU C Library ({{Pkg|glibc}}) and backs the {{man|3|getaddrinfo}} API, used to resolve domain names. NSS allows system databases to be provided by separate services, whose search order can be configured by the administrator in {{man|5|nsswitch.conf}}. The database responsible for domain name resolution is the ''hosts'' database, for which glibc offers the following services: |
||
+ | * ''dns'' :{{ic|/etc/resolv.conf}} を読み込む [[#Glibc resolver|glibc resolver]]。 {{man|5|resolv.conf}} を参照してください。 |
||
+ | [[systemd]] はホスト名解決のために 3 つの NSS サービスを提供します。 |
||
− | * ''files'': reads the {{ic|/etc/hosts}} file, see {{man|5|hosts}} |
||
− | * ''dns'': the [[#Glibc resolver|glibc resolver]] which reads {{ic|/etc/resolv.conf}}, see {{man|5|resolv.conf}} |
||
+ | * {{man|8|nss-resolve}} — で説明されているキャッシング DNS スタブ リゾルバ [[systemd-resolved]] |
||
− | [[systemd]] provides three NSS services for hostname resolution: |
||
+ | * {{man|8|nss-myhostname}} — {{ic|/etc/hosts}} を編集せずに [[ネットワーク設定#ローカルのホストネーム解決]] を提供します。 |
||
+ | * {{man|8|nss-mymachines}} — ローカル {{man|8|systemd-machined}} コンテナの名前のホスト名解決を提供します |
||
+ | === NSS を使用してドメイン名を解決する === |
||
− | * {{man|8|nss-resolve}} — a caching DNS stub resolver, described in [[systemd-resolved]] |
||
− | * {{man|8|nss-myhostname}} — provides local hostname resolution without having to edit {{ic|/etc/hosts}}, described in [[Network configuration#Local hostname resolution]] |
||
− | * {{man|8|nss-mymachines}} — provides hostname resolution for the names of local {{man|8|systemd-machined}} containers |
||
+ | NSS データベースは {{man|1|getent}} でクエリできます。ドメイン名は、NSS を介して解決できます。 |
||
− | === Resolve a domain name using NSS === |
||
− | |||
− | NSS databases can be queried with {{man|1|getent}}. A domain name can be resolved through NSS using: |
||
$ getent hosts ''domain_name'' |
$ getent hosts ''domain_name'' |
||
+ | {{Note|ほとんどのプログラムは NSS を使用してドメイン名を解決しますが、{{ic|/etc/resolv.conf}} や {{ic|/etc/hosts}} を直接読み取るプログラムもあります。[[ネットワーク設定#localhost がネットワーク上で解決される]] を参照してください。}} |
||
− | {{Note|While most programs resolve domain names using NSS, some may read {{ic|/etc/resolv.conf}} and/or {{ic|/etc/hosts}} directly. See [[Network configuration#Local hostname resolution]].}} |
||
− | == Glibc |
+ | == Glibc リゾルバ == |
+ | glibc リゾルバは、解決ごとに {{ic|/etc/resolv.conf}} を読み取り、使用するネームサーバーとオプションを決定します。 |
||
− | The glibc resolver reads {{ic|/etc/resolv.conf}} for every resolution to determine the nameservers and options to use. |
||
+ | {{man|5|resolv.conf}} は、ネームサーバーといくつかの設定オプションをリストアップします。 |
||
− | {{man|5|resolv.conf}} lists nameservers together with some configuration options. |
||
+ | 最初にリストされたネームサーバーが最初に試され、最大3つのネームサーバーをリストすることができます。数字記号 {{man|5|resolv.conf}} は、ネームサーバーといくつかの設定オプションをリストアップします。 |
||
− | Nameservers listed first are tried first, up to three nameservers may be listed. Lines starting with a number sign ({{ic|#}}) are ignored. |
||
+ | {{Note|glibc リゾルバはクエリをキャッシュしません。クエリの探索時間を改善するために、キャッシングリゾルバを設定できます。glibc リゾルバも DNSSEC を検証できません。そのためには、DNSSEC 対応のバリデータリゾルバが必要です。詳細については、[[#DNS サーバー]] を参照してください。}} |
||
− | {{Note|The glibc resolver does not cache queries. To improve query lookup time you can set up a caching resolver. Glibc resolver also can not validate DNSSEC. A DNSSEC capable validator resolver is required for that one. See [[#DNS servers]] for more information.}} |
||
− | === |
+ | === /etc/resolv.conf の上書き === |
+ | [[ネットワーク設定#ネットワークマネージャ|Network manager]] は {{ic|/etc/resolv.conf}} を上書きする傾向があります。詳細については、対応するセクションを参照してください。 |
||
− | [[Network manager]]s tend to overwrite {{ic|/etc/resolv.conf}}, for specifics see the corresponding section: |
||
* [[dhcpcd#/etc/resolv.conf]] |
* [[dhcpcd#/etc/resolv.conf]] |
||
55行目: | 55行目: | ||
* [[ConnMan#/etc/resolv.conf]] |
* [[ConnMan#/etc/resolv.conf]] |
||
+ | プログラムが {{ic|/etc/resolv.conf}} を上書きするのを防ぐために、不変の [[ファイルのパーミッションと属性#ファイルの属性|ファイル属性]] を設定して書き込み保護することもできます。 |
||
− | To prevent programs from overwriting {{ic|/etc/resolv.conf}}, it is also possible to write-protect it by setting the immutable [[file attribute]]: |
||
# chattr +i /etc/resolv.conf |
# chattr +i /etc/resolv.conf |
||
− | {{Tip| |
+ | {{Tip|複数のプロセスで {{ic|/etc/resolv.conf}} に書き込みたい場合は、[[Openresolv|resolvconf]] を使用できます。}} |
− | === |
+ | ==== nmcli を使用した代替方法 ==== |
+ | [[NetworkManager]] を使用する場合、{{man|1|nmcli}} を使用して {{ic|/etc/resolv.conf}} の永続オプションを設定できます。''Wired'' を接続の名前に変更します。例: |
||
− | If you are confronted with a very long hostname lookup (may it be in [[pacman]] or while browsing), it often helps to define a small timeout after which an alternative nameserver is used. To do so, put the following in {{ic|/etc/resolv.conf}}. |
||
+ | |||
+ | # nmcli con mod Wired +ipv4.dns-options 'rotate,single-request,timeout:1' |
||
+ | |||
+ | その他のオプションについては、{{man|1|nmcli}}、{{man|5|nm-settings-nmcli}}、および {{man|5|resolv.conf}} のマニュアルページを参照してください: |
||
+ | |||
+ | === 探索時間を制限する === |
||
+ | |||
+ | 非常に長いホスト名の探索に直面したとき ([[pacman]] やブラウジング中など)、代替ネームサーバーが使われるまでの小さなタイムアウトを定義することがしばしば役に立ちます。これを行うには、{{ic|/etc/resolv.conf}} に以下を記述してください。 |
||
options timeout:1 |
options timeout:1 |
||
+ | === IPv6 でホスト名の解決が遅れる === |
||
− | === Hostname lookup delayed with IPv6 === |
||
+ | ホスト名の解決時に5秒の遅延が発生した場合は、DNS サーバー/ファイアウォールの誤動作が原因である可能性があり、並列の A および AAAA 要求に対して1つの応答しか返さない可能性があります。[https://udrepper.livejournal.com/20948.html] {{ic|/etc/resolv.conf}} で次のオプションを設定することで、これを修正できます。 |
||
− | If you experience a 5 second delay when resolving hostnames it might be due to a DNS-server/Firewall misbehaving and only giving one reply to a parallel A and AAAA request.[https://udrepper.livejournal.com/20948.html] You can fix that by setting the following option in {{ic|/etc/resolv.conf}}: |
||
options single-request |
options single-request |
||
− | === |
+ | === ローカルドメイン名 === |
+ | ローカルマシン名のホスト名を完全修飾ドメイン名なしで使用できるようにするには、{{ic|/etc/resolv.conf}} にローカルドメインの行を以下のように追加してください。 |
||
− | To be able to use the hostname of local machine names without the fully qualified domain name, add a line to {{ic|/etc/resolv.conf}} with the local domain such as: |
||
domain example.org |
domain example.org |
||
+ | これにより、''ssh'' コマンドを使用する際に {{ic|mainmachine1.example.org}} のようなローカルホストを単に {{ic|mainmachine1}} として参照することができますが、 [[ドメイン名前解決#ルックアップユーティリティ|drill]] コマンドなどは検索を行うために完全修飾ドメイン名を要求します。 |
||
− | That way you can refer to local hosts such as {{ic|mainmachine1.example.org}} as simply {{ic|mainmachine1}} when using the ''ssh'' command, but the [[#Lookup utilities|drill]] command still requires the fully qualified domain names in order to perform lookups. |
||
+ | == ルックアップユーティリティ == |
||
− | == Lookup utilities == |
||
− | + | 特定の DNS サーバーと DNS/[[DNSSEC]] レコードを照会するには、専用の DNS ルックアップユーティリティを使用できます。これらのツールは DNS 自体を実装し、[[#Name Service Switch|NSS]] を使用しません。 |
|
+ | {{Pkg|ldns}} は、DNS から情報を取得するために設計されたツールである {{man|1|drill}} を提供します。 |
||
− | {{Pkg|ldns}} provides {{man|1|drill}}, which is a tool designed to retrieve information out of the DNS. |
||
+ | たとえば、''drill'' を使用して特定のネームサーバーにドメインの TXT レコードを照会するには、次のようにします: |
||
− | For example, to query a specific nameserver with ''drill'' for the TXT records of a domain: |
||
$ drill @''nameserver'' TXT ''domain'' |
$ drill @''nameserver'' TXT ''domain'' |
||
+ | DNS サーバーが指定されていない場合、''drill'' は {{ic|/etc/resolv.conf}} で定義されたネームサーバーを使用します。 |
||
− | Unless a DNS server is specified, ''drill'' will use the nameservers defined in {{ic|/etc/resolv.conf}}. |
||
+ | {{Tip|一部の DNS サーバーには、独自の DNS 探索ユーティリティが付属しています。例えば |
||
− | {{Tip|Some DNS servers ship with their own DNS lookup utilities. E.g. |
||
− | * {{Pkg|knot}} |
+ | * {{Pkg|knot}} {{man|1|khost}} と {{man|1|kdig}} を提供します。 |
− | * [[Unbound]] |
+ | * [[Unbound]] {{man|1|unbound-host}} を持っています。 |
− | * [[BIND]] |
+ | * [[BIND]] には、{{man|1|dig}}、{{man|1|host}}、{{man|1|nslookup}}、および多数の {{ic|dnssec-}} ツールがあります。 |
+ | * [[systemd-resolved]] {{man|1|resolvectl}} があり、DNS 探索用の {{ic|query}} サブコマンドを提供します。 |
||
}} |
}} |
||
101行目: | 110行目: | ||
== Resolver のパフォーマンス == |
== Resolver のパフォーマンス == |
||
− | Glibc resolver は問い合わせをキャッシュしません。ローカルキャッシュを実装するには、 [[systemd-resolved]] を使用するか、ローカルキャッシュ [https://wiki.archlinux.org/title/Domain_name_resolution#DNS_servers DNS server] を設定し、 {{ic|127.0.0.1}} と {{ic|::1}} を {{ic|/etc/resolv.conf}} または {{ic|/etc/resolvconf}} ([[openresolv]] を使用する場合) でネームサーバとして使用します。 |
+ | Glibc resolver は問い合わせをキャッシュしません。ローカルキャッシュを実装するには、 [[systemd-resolved]] を使用するか、ローカルキャッシュ [https://wiki.archlinux.org/title/Domain_name_resolution#DNS_servers DNS server] を設定し、 {{ic|127.0.0.1}} と {{ic|::1}} を {{ic|/etc/resolv.conf}} または {{ic|/etc/resolvconf}} ([[openresolv]] を使用する場合) でネームサーバーとして使用します。 |
{{Tip| |
{{Tip| |
||
* ''drill'' または ''dig'' は、クエリー時間を報告します。 |
* ''drill'' または ''dig'' は、クエリー時間を報告します。 |
||
− | * 通常、ルータは自身のキャッシングリゾルバ を ネットワークの DNS サーバとして設定し、ネットワーク全体に DNS キャッシュを提供します。 |
+ | * 通常、ルータは自身のキャッシングリゾルバ を ネットワークの DNS サーバーとして設定し、ネットワーク全体に DNS キャッシュを提供します。 |
− | * 次の DNS サーバへの切り替えに時間がかかりすぎる場合は、 [[ドメイン名前解決#timeout オプションを使ってホスト名の検索時間を減らす]] を試してください。}} |
+ | * 次の DNS サーバーへの切り替えに時間がかかりすぎる場合は、 [[ドメイン名前解決#timeout オプションを使ってホスト名の検索時間を減らす]] を試してください。}} |
− | == |
+ | == プライバシーとセキュリティ == |
+ | DNS プロトコルは暗号化されておらず、機密性、完全性、認証を考慮していないため、信頼されていないネットワークや悪意のある ISP を使用すると、DNS クエリが盗聴され、応答が [[Wikipedia:ja:中間者攻撃|manipulated]] される可能性があります。さらに、DNSサーバーは [[Wikipedia:DNS hijacking|DNS hijacking]] を行うこともできます。 |
||
− | === ローカルドメイン名 === |
||
+ | |||
+ | DNS サーバーがあなたのクエリを機密扱いにすることを信頼する必要があります。DNS サーバーは ISP や [[ドメイン名前解決#サードパーティの DNS サービス|サードパーティ]] によって提供されています。また、自分で [[ドメイン名前解決#DNS サーバー|再帰型ネームサーバー]] を運用することもできますが、より多くの労力がかかります。信頼できないネットワークで [[DHCP]] クライアントを使う場合は、任意の DNS サーバーを使ったり、その影響を受けたりしないように、必ず静的なネームサーバーを設定するようにしてください。リモート DNS サーバーとの通信を安全にするために、[[Wikipedia:DNS over TLS|DNS over TLS]] ([[RFC:7858|RFC 7858]]) や [[Wikipedia:ja:DNS over HTTPS|DNS over HTTPS]] ([[RFC:8484|RFC 8484]]) または [[Wikipedia:DNSCrypt|DNSCrypt]] などの暗号化プロトコルを使用するとよいでしょう。ただし上流サーバと [[#DNS server|リゾルバ]] がこのプロトコルをサポートしていることが条件です。また、[[stunnel]] などの通信を暗号化・復号化する専用ソフトを利用する方法もあります。[[Wikipedia:ja:DNSサーバ|認証付きのサーバー]] からの応答であることを確認するために、[[DNSSEC]] を検証することができます ([[ドメイン名前解決#DNS サーバー|リゾルバ]] と上流のサーバの両方がサポートしている場合) |
||
+ | |||
+ | === アプリケーションレベルの DNS === |
||
+ | |||
+ | 主要な Web ブラウザ [https://support.mozilla.org/en-US/kb/firefox-dns-over-https] [https://www.chromium.org/developers/dns-over-https] などの一部のクライアントソフトウェアは、HTTPS 上で DNS を実装し始めていることに注意してください。クエリの暗号化は、しばしばボーナスとみなされるかもしれませんが、それは、ソフトウェアがシステムリゾルバの設定の周りでクエリを横取りすることも意味します[https://blog.powerdns.com/2019/09/25/centralised-doh-is-bad-for-privacy-in-2019-and-beyond/] |
||
+ | |||
+ | [[Firefox]] では、DNS over HTTPS の有効・無効やDNSサーバーを選択するための [https://support.mozilla.org/en-US/kb/firefox-dns-over-https#w_manually-enabling-and-disabling-dns-over-https 設定オプション] が提供されています。 |
||
+ | |||
+ | [[Chromium]] はユーザーのシステムリゾルバを調査し、システムリゾルバのアドレスが DNS over HTTPS も提供することが分かっている場合、DNS over HTTPS を有効にします。詳細と DNS over HTTPS を無効にする方法については、[https://blog.chromium.org/2020/05/a-safer-and-more-private-browsing-DoH.html このブログの記事] を参照してください。 |
||
+ | |||
+ | Mozilla [https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https] は、システムリゾルバがドメイン {{ic|use-application-dns.net}} を解決できない場合、普遍的にアプリケーションレベル DNS を無効にすることを提案しています。現在のところ、これはFirefoxにのみ実装されています。 |
||
+ | |||
+ | === 忘却の DNS === |
||
+ | |||
+ | [https://odns.cs.princeton.edu/ Oblivious DNS] は、多くの DNS プライバシーの問題に対処するシステムです。詳しくは[https://blog.cloudflare.com/oblivious-dns/ Cloudflare の記事] をご覧ください。 |
||
+ | |||
+ | == サードパーティの DNS サービス == |
||
+ | |||
+ | {{Note|サードパーティの DNS サービスを使用する前に、そのサービスのプライバシーポリシーで、ユーザーデータの処理方法に関する情報を確認してください。ユーザーデータには価値があり、他の当事者に販売することができます。}} |
||
+ | |||
+ | さまざまな [[Wikipedia:Public recursive name server|Public recursive name server]] が利用可能であり、その一部には専用のソフトウェアもあります。 |
||
+ | |||
+ | * {{App|[[cloudflared]]|HTTPS 経由の Cloudflare DNS の DNS クライアント|https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy|{{Pkg|cloudflared}}}} |
||
+ | * {{App|dingo|HTTPS 経由の Google DNS の DNS クライアント|https://github.com/pforemski/dingo|{{AUR|dingo-git}}}} |
||
+ | * {{App|opennic-up|最も応答性の高い OpenNIC サーバーを使用して、DNS サーバーの更新を自動化します|https://github.com/kewlfft/opennic-up|{{AUR|opennic-up}}}} |
||
+ | * {{App|nextdns|NextDNS 用の DNS-over-HTTPS CLI クライアント|https://github.com/nextdns/nextdns|{{AUR|nextdns}}}} |
||
+ | |||
+ | [https://github.com/cleanbrowsing/dnsperftest dnsperftest] を使用して、最も一般的な DNS リゾルバのパフォーマンスを自分の場所からテストできます。[https://www.dnsperf.com/#!dns-resolvers dnsperf.com] は、プロバイダー間のグローバルベンチマークを提供します。 |
||
+ | |||
+ | == DNS サーバー == |
||
+ | |||
+ | DNSサーバーには、[[Wikipedia:Authoritative name server|authoritative]] と [[Wikipedia:Name server#Recursive query|recursive]] があります。そのどちらでもない場合、それらは '''スタブリゾルバ''' と呼ばれ、単にすべてのクエリーを別の再帰的ネームサーバーに転送するだけである。スタブリゾルバは通常、ローカルホストまたはネットワークに DNSキャッシュを導入するために使用される。同じことが、本格的なネームサーバーでも実現できることに注意してください。このセクションでは、利用可能なDNSサーバーを比較します。より詳細な比較は、[[Wikipedia:Comparison of DNS server software]]を参照してください。 |
||
+ | |||
+ | {| class="wikitable sortable" style="text-align:center" |
||
+ | ! rowspan=2 | 名前 !! rowspan=2 | パッケージ !! colspan=4 | 機能 !! rowspan=2 | [[resolvconf]] !! colspan=5 | サポートされているプロトコル |
||
+ | |- |
||
+ | ! [[Wikipedia:Authoritative name server|Authoritative]] !! [[Wikipedia:Name server#Recursive query|Recursive]] !! [[Wikipedia:Name server#Caching name server|Cache]] !! [[Wikipedia:Domain Name System Security Extensions#The lookup procedure|Validates]]<br>[[DNSSEC]] !! [[Wikipedia:Domain Name System|DNS]] !! [[Wikipedia:DNSCrypt|DNSCrypt]] !! [[Wikipedia:DNS over TLS|DNS<br>over TLS]] !! [[Wikipedia:DNS over HTTPS|DNS<br>over HTTPS]] !! [https://datatracker.ietf.org/doc/html/rfc9250 DNS<br>over QUIC] |
||
+ | |- |
||
+ | ! [[BIND]] |
||
+ | | {{Pkg|bind}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{Y|Server<sup>1</sup>}} || {{Y|Server}} || {{No|https://gitlab.isc.org/isc-projects/bind9/-/issues/3635}} |
||
+ | |- |
||
+ | ! [[CoreDNS]] |
||
+ | | {{AUR|coredns}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No|https://github.com/coredns/coredns/issues/5583}} |
||
+ | |- |
||
+ | ! [[DNS over HTTPS|DNS-over-HTTPS]] |
||
+ | | {{Pkg|dns-over-https}} || {{No}} || {{No}} || {{No}} || {{No}} || ? || ? || {{No}} || {{No|https://github.com/m13253/dns-over-https/issues/104}} || {{Yes}} || {{No|https://github.com/m13253/dns-over-https/issues/129}} |
||
+ | |- |
||
+ | ! [https://maradns.samiam.org/deadwood/doc/Deadwood.html Deadwood] ([[Wikipedia:MaraDNS|MaraDNS]] recursor) |
||
+ | | {{AUR|maradns}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} |
||
+ | |- |
||
+ | ! [[DNSCrypt|dnscrypt-proxy]] |
||
+ | | {{Pkg|dnscrypt-proxy}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Y|Server}} || {{Y|Resolver}} || {{No|https://github.com/DNSCrypt/dnscrypt-proxy/issues/1124}} || {{Yes}} || ? |
||
+ | |- |
||
+ | ! [[dnsmasq]] |
||
+ | | {{Pkg|dnsmasq}} || {{Y|Partial}}<sup>2</sup> || {{No}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{No|https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2018q2/012131.html}} || {{No}} || {{No}} |
||
+ | |- |
||
+ | ! [https://github.com/AdguardTeam/dnsproxy dnsproxy] |
||
+ | | {{AUR|dnsproxy}} || {{No}} || {{No}} || {{Yes}} || {{No|https://github.com/AdguardTeam/dnsproxy/issues/10}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} |
||
+ | |- |
||
+ | ! [[Knot Resolver]] |
||
+ | | {{Pkg|knot-resolver}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Y|[https://knot-resolver.readthedocs.io/en/stable/daemon-bindings-net_tlssrv.html#dns-over-https-doh Server]}} || {{No|https://gitlab.nic.cz/knot/knot-resolver/-/issues/548}} |
||
+ | |- |
||
+ | ! [[pdnsd]] |
||
+ | | {{Pkg|pdnsd}} || {{Yes}} || {{Yes}} || {{G|Permanent}} || {{No}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} |
||
+ | |- |
||
+ | ! [[Wikipedia:PowerDNS#Recursor|PowerDNS Recursor]] |
||
+ | | {{Pkg|powerdns-recursor}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{Y|[https://github.com/PowerDNS/pdns/pull/10338 Partial]}} || {{No}} || ? |
||
+ | |- |
||
+ | ! [[Rescached]] |
||
+ | | {{AUR|rescached-git}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes|https://github.com/shuLhan/rescached-go#integration-with-openresolv}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} |
||
+ | |- |
||
+ | ! [https://github.com/folbricht/routedns RouteDNS] |
||
+ | | {{AUR|routedns-git}} || {{No}} || {{No}} || {{Yes}}<sup>3</sup> || {{No|https://github.com/folbricht/routedns/issues/123}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} |
||
+ | |- |
||
+ | ! [https://github.com/pymumu/smartdns SmartDNS] |
||
+ | | {{Pkg|smartdns}} || {{No}} || {{No}} || {{Yes}} || {{No|https://github.com/pymumu/smartdns/issues/19}} || ? || {{Yes}} || {{No}} || {{Y|Resolver}} || {{Y|Resolver}} || {{No}} |
||
+ | |- |
||
+ | ! [[Stubby]] |
||
+ | | {{Pkg|stubby}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Y|Server}} || {{No}} || {{Y|Resolver}} || {{No|https://github.com/getdnsapi/stubby/issues/278}} || {{No|https://github.com/getdnsapi/stubby/issues/288}} |
||
+ | |- |
||
+ | !style="white-space: nowrap;"| [[systemd-resolved]] |
||
+ | | {{Pkg|systemd}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{G|[[systemd-resolved|Yes]]}} || {{Y|Resolver and [https://github.com/systemd/systemd/issues/4621#issuecomment-260050033 limited server]}} || {{No}} || {{Y|Resolver}} || {{No|https://github.com/systemd/systemd/issues/8639}} || {{No|https://github.com/systemd/systemd/issues/23770}} |
||
+ | |- |
||
+ | ! [[Unbound]] |
||
+ | | {{Pkg|unbound}} || {{Y|Partial}} || {{Yes}} || {{Yes}}<sup>3</sup> || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{Y|Server}} || {{Yes}} || {{Y|[https://github.com/NLnetLabs/unbound/issues/308 Server]}} || {{No|https://github.com/NLnetLabs/unbound/issues/743}} |
||
+ | |} |
||
+ | |||
+ | # BIND は DNS over TLS と DNS over HTTPS の両方を提供できますが ([https://downloads.isc.org/isc/bind9/9.18.0/doc/arm/html/reference.html#tls tls{}] と [https://downloads.isc.org/isc/bind9/9.18.0/doc/arm/html/reference.html#interfaces listen-on] を参照)、DNS over TLS/DNS over HTTPS アップストリームにクエリを転送することはまだできません。''dig'' ツールは DNS over TLS と DNS over HTTPS ({{ic|+tls}} と {{ic|+https}} オプションを使用) でクエリを実行できますが [https://gitlab.isc.org/isc-projects/bind9/-/issues/3163 証明書チェックなし] です。 |
||
+ | # [[Wikipedia:DNSサーバーソフトウェアの比較#cite_note-masqauth-32|Wikipedia]]より: dnsmasq は認証付きのサポートが制限されており、公共のインターネット利用よりもむしろ内部ネットワーク利用を意図しています。 |
||
+ | # [[Redis]] バックエンドを使用して、Unbound に永続的なキャッシュを提供できます。 |
||
+ | |||
+ | === 認証専用サーバー === |
||
+ | |||
+ | {| class="wikitable sortable" style="text-align:center" |
||
+ | ! 名前 !! パッケージ !! [[DNSSEC]] !! 地理的<br>バランシング |
||
+ | |- |
||
+ | ! gdnsd |
||
+ | | {{Pkg|gdnsd}} || {{No}} || {{Yes}} |
||
+ | |- |
||
+ | ! [[Wikipedia:Knot DNS|Knot DNS]] |
||
+ | | {{Pkg|knot}} || {{Yes}} || {{Yes|https://www.knot-dns.cz/docs/2.7/singlehtml/#geoip-geography-based-responses}} |
||
+ | |- |
||
+ | ! [[Wikipedia:MaraDNS|MaraDNS]] |
||
+ | | {{AUR|maradns}} || {{No}} || ? |
||
+ | |- |
||
+ | ! [[NSD]] |
||
+ | | {{Pkg|nsd}} || {{No}} || {{No}} |
||
+ | |- |
||
+ | ! [[PowerDNS]] |
||
+ | | {{Pkg|powerdns}} || {{Yes}} || {{Yes}} |
||
+ | |} |
||
+ | |||
+ | === 条件付き転送 === |
||
+ | |||
+ | 特定のドメイン名を照会するときに、特定の DNS リゾルバを使用することができます。これは、VPN に接続する場合に特に便利です。これにより、VPN ネットワークへのクエリは VPN の DNS によって解決されますが、インターネットへのクエリは引き続き標準の DNS リゾルバによって解決されます。ローカルネットワークでも使用できます。 |
||
+ | |||
+ | これを実装するには、[[#DNS サーバー|ローカル リゾルバ]] を使用する必要があります。これは、glibc がサポートしていないためです。 |
||
+ | |||
+ | 動的な環境 (ラップトップやある程度はデスクトップ)では、接続しているネットワーク (複数) に基づいてリゾルバを設定する必要があります。そのための最良の方法は [[openresolv]] を使うことです。なぜなら [[openresolv#Subscribers|multiple subscribers]] をサポートしているからです。いくつかの [[ネットワークマネージャ]] は openresolv を通して、あるいはリゾルバを直接設定して、これをサポートしています。NetworkManager [[NetworkManager#DNS caching and conditional forwarding|supports conditional forwarding without openresolv]] は、openresolv を使わずに条件付き転送をサポートしています。 |
||
+ | {{Note|転送に他の条件 (送信元 IP アドレスなど) を使用することもできますが、"条件付き転送" は、"照会されたドメイン" を条件に使用される名前です。}} |
||
− | 完全修飾ドメイン名を使わずにローカルマシンのホストネームを使いたい場合、以下のように {{ic|resolv.conf}} にローカルドメインを追加してください: |
||
+ | == 参照 == |
||
− | domain localdomain.com |
||
+ | * [https://www.tldp.org/LDP/nag2/x-087-2-resolv.html Linux Network Administrators Guide] |
||
− | 上記の設定によって ''ssh'' コマンドを使用する際に {{ic|mainmachine1.localdomain.com}} とローカルホストを指定するところを {{ic|mainmachine1}} だけで参照できるようになります。ただし、''drill'' コマンドを実行するときはルックアップを実行するため完全修飾ドメイン名が必要になります。 |
||
+ | * [https://www.debian.org/doc/manuals/debian-handbook/sect.hostname-name-service.en.html#sect.name-resolution Debian Handbook] |
||
+ | * [[RFC:7706]] - ループバックで動作させることでルートサーバーへのアクセス時間を短縮 |
||
+ | * [http://linux-ip.net/pages/diagrams.html#domain-name-system-overview Domain name system overview] - DNS に関する図 |
||
+ | * [[代替 DNS サービス]] |
2024年8月18日 (日) 08:59時点における最新版
一般に、ドメイン名 は IP アドレスを表し、ドメインネームシステム (DNS) で IP アドレスに関連付けられます。
ここでは、ドメイン名前解決の設定方法とドメイン名の解決方法について説明します。
目次
Name Service Switch
Name Service Switch (NSS) 機能は GNU C ライブラリ (glibc) の一部であり、getaddrinfo(3) API をサポートしており、ドメイン名を解決するために使用されます。NSS では、システムデータベースを別々のサービスで提供することができ、その検索順序は管理者が nsswitch.conf(5) で設定することができます。ドメイン名の解決を行うデータベースは hosts データベースであり、glibc は以下のサービスを提供しています。
- files:
/etc/hosts
ファイルを読み込む。hosts(5) を参照してください。 - dns :
/etc/resolv.conf
を読み込む glibc resolver。 resolv.conf(5) を参照してください。
systemd はホスト名解決のために 3 つの NSS サービスを提供します。
- nss-resolve(8) — で説明されているキャッシング DNS スタブ リゾルバ systemd-resolved
- nss-myhostname(8) —
/etc/hosts
を編集せずに ネットワーク設定#ローカルのホストネーム解決 を提供します。 - nss-mymachines(8) — ローカル systemd-machined(8) コンテナの名前のホスト名解決を提供します
NSS を使用してドメイン名を解決する
NSS データベースは getent(1) でクエリできます。ドメイン名は、NSS を介して解決できます。
$ getent hosts domain_name
Glibc リゾルバ
glibc リゾルバは、解決ごとに /etc/resolv.conf
を読み取り、使用するネームサーバーとオプションを決定します。
resolv.conf(5) は、ネームサーバーといくつかの設定オプションをリストアップします。 最初にリストされたネームサーバーが最初に試され、最大3つのネームサーバーをリストすることができます。数字記号 resolv.conf(5) は、ネームサーバーといくつかの設定オプションをリストアップします。
/etc/resolv.conf の上書き
Network manager は /etc/resolv.conf
を上書きする傾向があります。詳細については、対応するセクションを参照してください。
- dhcpcd#/etc/resolv.conf
- Netctl#/etc/resolv.conf
- NetworkManager#/etc/resolv.conf
- ConnMan#/etc/resolv.conf
プログラムが /etc/resolv.conf
を上書きするのを防ぐために、不変の ファイル属性 を設定して書き込み保護することもできます。
# chattr +i /etc/resolv.conf
nmcli を使用した代替方法
NetworkManager を使用する場合、nmcli(1) を使用して /etc/resolv.conf
の永続オプションを設定できます。Wired を接続の名前に変更します。例:
# nmcli con mod Wired +ipv4.dns-options 'rotate,single-request,timeout:1'
その他のオプションについては、nmcli(1)、nm-settings-nmcli(5)、および resolv.conf(5) のマニュアルページを参照してください:
探索時間を制限する
非常に長いホスト名の探索に直面したとき (pacman やブラウジング中など)、代替ネームサーバーが使われるまでの小さなタイムアウトを定義することがしばしば役に立ちます。これを行うには、/etc/resolv.conf
に以下を記述してください。
options timeout:1
IPv6 でホスト名の解決が遅れる
ホスト名の解決時に5秒の遅延が発生した場合は、DNS サーバー/ファイアウォールの誤動作が原因である可能性があり、並列の A および AAAA 要求に対して1つの応答しか返さない可能性があります。[1] /etc/resolv.conf
で次のオプションを設定することで、これを修正できます。
options single-request
ローカルドメイン名
ローカルマシン名のホスト名を完全修飾ドメイン名なしで使用できるようにするには、/etc/resolv.conf
にローカルドメインの行を以下のように追加してください。
domain example.org
これにより、ssh コマンドを使用する際に mainmachine1.example.org
のようなローカルホストを単に mainmachine1
として参照することができますが、 drill コマンドなどは検索を行うために完全修飾ドメイン名を要求します。
ルックアップユーティリティ
特定の DNS サーバーと DNS/DNSSEC レコードを照会するには、専用の DNS ルックアップユーティリティを使用できます。これらのツールは DNS 自体を実装し、NSS を使用しません。
ldns は、DNS から情報を取得するために設計されたツールである drill(1) を提供します。
たとえば、drill を使用して特定のネームサーバーにドメインの TXT レコードを照会するには、次のようにします:
$ drill @nameserver TXT domain
DNS サーバーが指定されていない場合、drill は /etc/resolv.conf
で定義されたネームサーバーを使用します。
Resolver のパフォーマンス
Glibc resolver は問い合わせをキャッシュしません。ローカルキャッシュを実装するには、 systemd-resolved を使用するか、ローカルキャッシュ DNS server を設定し、 127.0.0.1
と ::1
を /etc/resolv.conf
または /etc/resolvconf
(openresolv を使用する場合) でネームサーバーとして使用します。
プライバシーとセキュリティ
DNS プロトコルは暗号化されておらず、機密性、完全性、認証を考慮していないため、信頼されていないネットワークや悪意のある ISP を使用すると、DNS クエリが盗聴され、応答が manipulated される可能性があります。さらに、DNSサーバーは DNS hijacking を行うこともできます。
DNS サーバーがあなたのクエリを機密扱いにすることを信頼する必要があります。DNS サーバーは ISP や サードパーティ によって提供されています。また、自分で 再帰型ネームサーバー を運用することもできますが、より多くの労力がかかります。信頼できないネットワークで DHCP クライアントを使う場合は、任意の DNS サーバーを使ったり、その影響を受けたりしないように、必ず静的なネームサーバーを設定するようにしてください。リモート DNS サーバーとの通信を安全にするために、DNS over TLS (RFC 7858) や DNS over HTTPS (RFC 8484) または DNSCrypt などの暗号化プロトコルを使用するとよいでしょう。ただし上流サーバと リゾルバ がこのプロトコルをサポートしていることが条件です。また、stunnel などの通信を暗号化・復号化する専用ソフトを利用する方法もあります。認証付きのサーバー からの応答であることを確認するために、DNSSEC を検証することができます (リゾルバ と上流のサーバの両方がサポートしている場合)
アプリケーションレベルの DNS
主要な Web ブラウザ [2] [3] などの一部のクライアントソフトウェアは、HTTPS 上で DNS を実装し始めていることに注意してください。クエリの暗号化は、しばしばボーナスとみなされるかもしれませんが、それは、ソフトウェアがシステムリゾルバの設定の周りでクエリを横取りすることも意味します[4]
Firefox では、DNS over HTTPS の有効・無効やDNSサーバーを選択するための 設定オプション が提供されています。
Chromium はユーザーのシステムリゾルバを調査し、システムリゾルバのアドレスが DNS over HTTPS も提供することが分かっている場合、DNS over HTTPS を有効にします。詳細と DNS over HTTPS を無効にする方法については、このブログの記事 を参照してください。
Mozilla [5] は、システムリゾルバがドメイン use-application-dns.net
を解決できない場合、普遍的にアプリケーションレベル DNS を無効にすることを提案しています。現在のところ、これはFirefoxにのみ実装されています。
忘却の DNS
Oblivious DNS は、多くの DNS プライバシーの問題に対処するシステムです。詳しくはCloudflare の記事 をご覧ください。
サードパーティの DNS サービス
さまざまな Public recursive name server が利用可能であり、その一部には専用のソフトウェアもあります。
- cloudflared — HTTPS 経由の Cloudflare DNS の DNS クライアント
- dingo — HTTPS 経由の Google DNS の DNS クライアント
- opennic-up — 最も応答性の高い OpenNIC サーバーを使用して、DNS サーバーの更新を自動化します
- nextdns — NextDNS 用の DNS-over-HTTPS CLI クライアント
dnsperftest を使用して、最も一般的な DNS リゾルバのパフォーマンスを自分の場所からテストできます。dnsperf.com は、プロバイダー間のグローバルベンチマークを提供します。
DNS サーバー
DNSサーバーには、authoritative と recursive があります。そのどちらでもない場合、それらは スタブリゾルバ と呼ばれ、単にすべてのクエリーを別の再帰的ネームサーバーに転送するだけである。スタブリゾルバは通常、ローカルホストまたはネットワークに DNSキャッシュを導入するために使用される。同じことが、本格的なネームサーバーでも実現できることに注意してください。このセクションでは、利用可能なDNSサーバーを比較します。より詳細な比較は、Wikipedia:Comparison of DNS server softwareを参照してください。
名前 | パッケージ | 機能 | resolvconf | サポートされているプロトコル | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Authoritative | Recursive | Cache | Validates DNSSEC |
DNS | DNSCrypt | DNS over TLS |
DNS over HTTPS |
DNS over QUIC | |||
BIND | bind | Yes | Yes | Yes | Yes | Yes | Yes | No | Server1 | Server | No |
CoreDNS | corednsAUR | Yes | No | Yes | No | No | Yes | No | Yes | Yes | No |
DNS-over-HTTPS | dns-over-https | No | No | No | No | ? | ? | No | No | Yes | No |
Deadwood (MaraDNS recursor) | maradnsAUR | No | Yes | Yes | No | No | Yes | No | No | No | No |
dnscrypt-proxy | dnscrypt-proxy | No | No | Yes | No | No | Server | Resolver | No | Yes | ? |
dnsmasq | dnsmasq | Partial2 | No | Yes | Yes | Yes | Yes | No | No | No | No |
dnsproxy | dnsproxyAUR | No | No | Yes | No | No | Yes | Yes | Yes | Yes | Yes |
Knot Resolver | knot-resolver | No | Yes | Yes | Yes | No | Yes | No | Yes | Server | No |
pdnsd | pdnsd | Yes | Yes | Permanent | No | Yes | Yes | No | No | No | No |
PowerDNS Recursor | powerdns-recursor | No | Yes | Yes | Yes | Yes | Yes | No | Partial | No | ? |
Rescached | rescached-gitAUR | No | No | Yes | No | Yes | Yes | No | Yes | Yes | No |
RouteDNS | routedns-gitAUR | No | No | Yes3 | No | No | Yes | No | Yes | Yes | Yes |
SmartDNS | smartdns | No | No | Yes | No | ? | Yes | No | Resolver | Resolver | No |
Stubby | stubby | No | No | No | Yes | No | Server | No | Resolver | No | No |
systemd-resolved | systemd | No | No | Yes | Yes | Yes | Resolver and limited server | No | Resolver | No | No |
Unbound | unbound | Partial | Yes | Yes3 | Yes | Yes | Yes | Server | Yes | Server | No |
- BIND は DNS over TLS と DNS over HTTPS の両方を提供できますが (tls{} と listen-on を参照)、DNS over TLS/DNS over HTTPS アップストリームにクエリを転送することはまだできません。dig ツールは DNS over TLS と DNS over HTTPS (
+tls
と+https
オプションを使用) でクエリを実行できますが 証明書チェックなし です。 - Wikipediaより: dnsmasq は認証付きのサポートが制限されており、公共のインターネット利用よりもむしろ内部ネットワーク利用を意図しています。
- Redis バックエンドを使用して、Unbound に永続的なキャッシュを提供できます。
認証専用サーバー
名前 | パッケージ | DNSSEC | 地理的 バランシング |
---|---|---|---|
gdnsd | gdnsd | No | Yes |
Knot DNS | knot | Yes | Yes |
MaraDNS | maradnsAUR | No | ? |
NSD | nsd | No | No |
PowerDNS | powerdns | Yes | Yes |
条件付き転送
特定のドメイン名を照会するときに、特定の DNS リゾルバを使用することができます。これは、VPN に接続する場合に特に便利です。これにより、VPN ネットワークへのクエリは VPN の DNS によって解決されますが、インターネットへのクエリは引き続き標準の DNS リゾルバによって解決されます。ローカルネットワークでも使用できます。
これを実装するには、ローカル リゾルバ を使用する必要があります。これは、glibc がサポートしていないためです。
動的な環境 (ラップトップやある程度はデスクトップ)では、接続しているネットワーク (複数) に基づいてリゾルバを設定する必要があります。そのための最良の方法は openresolv を使うことです。なぜなら multiple subscribers をサポートしているからです。いくつかの ネットワークマネージャ は openresolv を通して、あるいはリゾルバを直接設定して、これをサポートしています。NetworkManager supports conditional forwarding without openresolv は、openresolv を使わずに条件付き転送をサポートしています。
参照
- Linux Network Administrators Guide
- Debian Handbook
- RFC:7706 - ループバックで動作させることでルートサーバーへのアクセス時間を短縮
- Domain name system overview - DNS に関する図
- 代替 DNS サービス