「ドメイン名前解決」の版間の差分
→DNS サーバ: 一部翻訳 |
→Glibc リゾルバ: 同期 |
||
| (2人の利用者による、間の23版が非表示) | |||
| 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 アドレスに関連付けられます。 |
||
ここでは、ドメイン名前解決の設定方法とドメイン名の解決方法について説明します。 |
|||
| ⚫ | |||
| ⚫ | |||
{{Expansion|Mention {{Pkg|nss-mdns}}, {{AUR|nss-tls-git}} and others.}} |
|||
[[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) 機能は GNU C ライブラリ ({{Pkg|glibc}}) の一部であり、{{man|3|getaddrinfo}} API をサポートしており、ドメイン名を解決するために使用されます。NSS では、システムデータベースを別々のサービスで提供することができ、その検索順序は管理者が {{man|5|nsswitch.conf}} で設定することができます。ドメイン名の解決を行うデータベースは ''hosts'' データベースであり、glibc は以下のサービスを提供しています。 |
[[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) 機能は GNU C ライブラリ ({{Pkg|glibc}}) の一部であり、{{man|3|getaddrinfo}} API をサポートしており、ドメイン名を解決するために使用されます。NSS では、システムデータベースを別々のサービスで提供することができ、その検索順序は管理者が {{man|5|nsswitch.conf}} で設定することができます。ドメイン名の解決を行うデータベースは ''hosts'' データベースであり、glibc は以下のサービスを提供しています。 |
||
| 25行目: | 25行目: | ||
[[systemd]] はホスト名解決のために 3 つの NSS サービスを提供します。 |
[[systemd]] はホスト名解決のために 3 つの NSS サービスを提供します。 |
||
* {{man|8|nss-resolve}} — |
* {{man|8|nss-resolve}} — で説明されているキャッシング DNS スタブ リゾルバ [[systemd-resolved]] |
||
* {{man|8|nss-myhostname}} — |
* {{man|8|nss-myhostname}} — {{ic|/etc/hosts}} を編集せずに [[ネットワーク設定#ローカルのホストネーム解決]] を提供します。 |
||
* {{man|8|nss-mymachines}} — |
* {{man|8|nss-mymachines}} — ローカル {{man|8|systemd-machined}} コンテナの名前のホスト名解決を提供します |
||
=== NSS を使用してドメイン名を解決する === |
=== NSS を使用してドメイン名を解決する === |
||
| 37行目: | 37行目: | ||
{{Note|ほとんどのプログラムは NSS を使用してドメイン名を解決しますが、{{ic|/etc/resolv.conf}} や {{ic|/etc/hosts}} を直接読み取るプログラムもあります。[[ネットワーク設定#localhost がネットワーク上で解決される]] を参照してください。}} |
{{Note|ほとんどのプログラムは NSS を使用してドメイン名を解決しますが、{{ic|/etc/resolv.conf}} や {{ic|/etc/hosts}} を直接読み取るプログラムもあります。[[ネットワーク設定#localhost がネットワーク上で解決される]] を参照してください。}} |
||
== 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}}は、ネームサーバー(nameservers)といくつかの設定オプションを記載するファイルです。 |
||
最初に記載された名前解決サーバーが優先的に使用され、最大3つまで記載できます。 |
|||
Nameservers listed first are tried first, up to three nameservers may be listed. Lines starting with a number sign ({{ic|#}}) are ignored. |
|||
先頭に ({{ic|#}}) が付いた行は無視されます。 |
|||
{{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行目: | 56行目: | ||
* [[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'' を接続の名前に変更します。例: |
|||
| ⚫ | |||
# nmcli con mod Wired +ipv4.dns-options 'rotate,single-request,timeout:1' |
|||
その他のオプションについては、{{man|1|nmcli}}、{{man|5|nm-settings-nmcli}}、および {{man|5|resolv.conf}} のマニュアルページを参照してください: |
|||
| ⚫ | |||
| ⚫ | |||
options timeout:1 |
options timeout:1 |
||
| 85行目: | 94行目: | ||
{{Pkg|ldns}} は、DNS から情報を取得するために設計されたツールである {{man|1|drill}} を提供します。 |
{{Pkg|ldns}} は、DNS から情報を取得するために設計されたツールである {{man|1|drill}} を提供します。 |
||
たとえば、''drill'' を使用して特定のネームサーバーにドメインの TXT レコードを照会するには、次のようにします |
たとえば、''drill'' を使用して特定のネームサーバーにドメインの TXT レコードを照会するには、次のようにします: |
||
$ drill @''nameserver'' TXT ''domain'' |
$ drill @''nameserver'' TXT ''domain'' |
||
| 91行目: | 100行目: | ||
DNS サーバーが指定されていない場合、''drill'' は {{ic|/etc/resolv.conf}} で定義されたネームサーバーを使用します。 |
DNS サーバーが指定されていない場合、''drill'' は {{ic|/etc/resolv.conf}} で定義されたネームサーバーを使用します。 |
||
{{Tip|一部の DNS サーバーには、独自の DNS |
{{Tip|一部の DNS サーバーには、独自の DNS 探索ユーティリティが付属しています。例えば |
||
* {{Pkg|knot}} {{man|1|khost}} と {{man|1|kdig}} を提供します。 |
* {{Pkg|knot}} {{man|1|khost}} と {{man|1|kdig}} を提供します。 |
||
* [[Unbound]] {{man|1|unbound-host}} を持っています。 |
* [[Unbound]] {{man|1|unbound-host}} を持っています。 |
||
* [[BIND]] には、{{man|1|dig}}、{{man|1|host}}、{{man|1|nslookup}}、および多数の {{ic|dnssec-}} ツールがあります。 |
* [[BIND]] には、{{man|1|dig}}、{{man|1|host}}、{{man|1|nslookup}}、および多数の {{ic|dnssec-}} ツールがあります。 |
||
* [[systemd-resolved]] {{man|1|resolvectl}} があり、DNS 探索用の {{ic|query}} サブコマンドを提供します。 |
|||
}} |
}} |
||
| 101行目: | 111行目: | ||
== 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 オプションを使ってホスト名の検索時間を減らす]] を試してください。}} |
||
== プライバシーとセキュリティ == |
|||
== Privacy and security == |
|||
DNS プロトコルは暗号化されておらず、機密性、完全性、認証を考慮していないため、信頼されていないネットワークや悪意のある ISP を使用すると、DNS クエリが盗聴され、応答が [[Wikipedia:ja:中間者攻撃|manipulated]] される可能性があります。さらに、DNSサーバーは [[Wikipedia:DNS hijacking|DNS hijacking]] を行うこともできます。 |
|||
The DNS protocol is unencrypted and does not account for confidentiality, integrity or authentication, so if you use an untrusted network or a malicious ISP, your DNS queries can be eavesdropped and the responses [[Wikipedia:Man-in-the-middle attack|manipulated]]. Furthermore, DNS servers can conduct [[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 サーバー|リゾルバ]] と上流のサーバの両方がサポートしている場合) |
|||
You need to trust your DNS server to treat your queries confidentially. DNS servers are provided by ISPs and [[#Third-party DNS services|third-parties]]. Alternatively you can run your own [[#DNS servers|recursive name server]], which however takes more effort. If you use a [[DHCP]] client in untrusted networks, be sure to set static name servers to avoid using and being subject to arbitrary DNS servers. To secure your communication with a remote DNS server you can use an encrypted protocol, like [[Wikipedia:DNS over TLS|DNS over TLS]] ([[RFC:7858|RFC 7858]]), [[Wikipedia:DNS over HTTPS|DNS over HTTPS]] ([[RFC:8484|RFC 8484]]), or [[Wikipedia:DNSCrypt|DNSCrypt]], provided that both the upstream server and your [[#DNS servers|resolver]] support the protocol. An alternative can be a dedicated software to encrypt and decrypt the communication, such as [[stunnel]]. To verify that responses are actually from [[Wikipedia:Authoritative name server|authoritative name servers]], you can validate [[DNSSEC]], provided that both the upstream server(s) and your [[#DNS servers|resolver]] support it. |
|||
=== |
=== アプリケーションレベルの 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]] |
[[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]] |
[[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 |
Mozilla [https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https] は、システムリゾルバがドメイン {{ic|use-application-dns.net}} を解決できない場合、普遍的にアプリケーションレベル DNS を無効にすることを提案しています。現在のところ、これはFirefoxにのみ実装されています。 |
||
=== Oblivious DNS === |
=== Oblivious DNS === |
||
[https://odns.cs.princeton.edu/ Oblivious DNS] |
[https://odns.cs.princeton.edu/ Oblivious DNS] は、多くの DNS プライバシーの問題に対処するシステムです。詳しくは[https://blog.cloudflare.com/oblivious-dns/ Cloudflare の記事] をご覧ください。 |
||
== |
== サードパーティの DNS サービス == |
||
{{Note|サードパーティの DNS サービスを使用する前に、そのサービスのプライバシーポリシーで、ユーザーデータの処理方法に関する情報を確認してください。ユーザーデータには価値があり、他の当事者に販売することができます。}} |
|||
{{Note|Before using a third-party DNS service, check its privacy policy for information on how user data is handled. User data has value and can be sold to other parties.}} |
|||
さまざまな [[Wikipedia:Public recursive name server|Public recursive name server]] が利用可能であり、その一部には専用のソフトウェアもあります。 |
|||
* {{App|[[cloudflared]]| |
* {{App|[[cloudflared]]|HTTPS 経由の Cloudflare DNS の DNS クライアント|https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy|{{Pkg|cloudflared}}}} |
||
* {{App|dingo| |
* {{App|dingo|HTTPS 経由の Google DNS の DNS クライアント|https://github.com/pforemski/dingo|{{AUR|dingo-git}}}} |
||
* {{App|opennic-up| |
* {{App|opennic-up|最も応答性の高い OpenNIC サーバーを使用して、DNS サーバーの更新を自動化します|https://github.com/kewlfft/opennic-up|{{AUR|opennic-up}}}} |
||
* {{App|nextdns| |
* {{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 サーバー == |
||
DNSサーバーには、[[Wikipedia:Authoritative name server|authoritative]] と [[Wikipedia:Name server#Recursive query|recursive]] があります。そのどちらでもない場合、それらは '''スタブリゾルバ''' と呼ばれ、単にすべてのクエリーを別の再帰的ネームサーバーに転送するだけである。スタブリゾルバは通常、ローカルホストまたはネットワークに DNSキャッシュを導入するために使用される。同じことが、本格的なネームサーバーでも実現できることに注意してください。このセクションでは、利用可能なDNSサーバーを比較します。より詳細な比較は、[[Wikipedia:Comparison of DNS server software]]を参照してください。 |
DNSサーバーには、[[Wikipedia:Authoritative name server|authoritative]] と [[Wikipedia:Name server#Recursive query|recursive]] があります。そのどちらでもない場合、それらは '''スタブリゾルバ''' と呼ばれ、単にすべてのクエリーを別の再帰的ネームサーバーに転送するだけである。スタブリゾルバは通常、ローカルホストまたはネットワークに DNSキャッシュを導入するために使用される。同じことが、本格的なネームサーバーでも実現できることに注意してください。このセクションでは、利用可能なDNSサーバーを比較します。より詳細な比較は、[[Wikipedia:Comparison of DNS server software]]を参照してください。 |
||
{{Expansion|Fill in the unknowns.}} |
|||
{| class="wikitable sortable" style="text-align:center" |
{| class="wikitable sortable" style="text-align:center" |
||
! rowspan=2 | 名前 !! rowspan=2 | パッケージ !! colspan=4 | 機能 !! rowspan=2 | [[ |
! 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]] |
! [[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]] |
! [[BIND]] |
||
| {{Pkg|bind}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{Y|Server<sup>1</sup>}} || {{Y|Server}} |
| {{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]] |
! [[CoreDNS]] |
||
| {{AUR|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) |
! [https://maradns.samiam.org/deadwood/doc/Deadwood.html Deadwood] ([[Wikipedia:MaraDNS|MaraDNS]] recursor) |
||
| {{AUR|maradns}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} |
| {{AUR|maradns}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} |
||
|- |
|- |
||
! [[dnscrypt-proxy]] |
! [[DNSCrypt|dnscrypt-proxy]] |
||
| {{Pkg|dnscrypt-proxy}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Y|Server}} || {{Y|Resolver}} || {{No}} || {{Yes}} |
| {{Pkg|dnscrypt-proxy}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Y|Server}} || {{Y|Resolver}} || {{No|https://github.com/DNSCrypt/dnscrypt-proxy/issues/1124}} || {{Yes}} || ? |
||
|- |
|- |
||
! [[dnsmasq]] |
! [[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}} |
| {{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]] |
! [[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]}} |
| {{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]] |
! [[pdnsd]] |
||
| {{Pkg|pdnsd}} || {{Yes}} || {{Yes}} || {{G|Permanent}} || {{No}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{No}} || {{No}} |
| {{Pkg|pdnsd}} || {{Yes}} || {{Yes}} || {{G|Permanent}} || {{No}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}} |
||
|- |
|- |
||
! [[Wikipedia:PowerDNS#Recursor|PowerDNS Recursor]] |
! [[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}} |
| {{Pkg|powerdns-recursor}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{Y|[https://github.com/PowerDNS/pdns/pull/10338 Partial]}} || {{No}} || ? |
||
|- |
|- |
||
! [[Rescached]] |
! [[Rescached]] |
||
| {{AUR|rescached-git}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes|https://github.com/shuLhan/rescached-go#integration-with-openresolv}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} |
| {{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] |
! [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}} |
| {{Pkg|smartdns}} || {{No}} || {{No}} || {{Yes}} || {{No|https://github.com/pymumu/smartdns/issues/19}} || ? || {{Yes}} || {{No}} || {{Y|Resolver}} || {{Y|Resolver}} || {{No}} |
||
|- |
|- |
||
! [[Stubby]] |
! [[Stubby]] |
||
| {{Pkg|stubby}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Y|Server}} || {{No}} || {{Y|Resolver}} || {{No|https://github.com/getdnsapi/stubby/issues/278}} |
| {{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]] |
!style="white-space: nowrap;"| [[systemd-resolved]] |
||
| {{Pkg|systemd}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{G|[[systemd- |
| {{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]] |
! [[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]}} |
| {{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}} |
||
|} |
|} |
||
| 199行目: | 216行目: | ||
{| class="wikitable sortable" style="text-align:center" |
{| class="wikitable sortable" style="text-align:center" |
||
! 名前 !! パッケージ !! [[DNSSEC]] !! |
! 名前 !! パッケージ !! [[DNSSEC]] !! 地理的<br>バランシング |
||
|- |
|- |
||
! gdnsd |
! gdnsd |
||
| 219行目: | 236行目: | ||
=== 条件付き転送 === |
=== 条件付き転送 === |
||
特定のドメイン名を照会するときに、特定の DNS リゾルバ |
特定のドメイン名を照会するときに、特定の DNS リゾルバを使用することができます。これは、VPN に接続する場合に特に便利です。これにより、VPN ネットワークへのクエリは VPN の DNS によって解決されますが、インターネットへのクエリは引き続き標準の DNS リゾルバによって解決されます。ローカルネットワークでも使用できます。 |
||
これを実装するには、[[#DNS サーバー|ローカル リゾルバ]] を使用する必要があります。これは、glibc がサポートしていないためです。 |
これを実装するには、[[#DNS サーバー|ローカル リゾルバ]] を使用する必要があります。これは、glibc がサポートしていないためです。 |
||
| 227行目: | 244行目: | ||
{{Note|転送に他の条件 (送信元 IP アドレスなど) を使用することもできますが、"条件付き転送" は、"照会されたドメイン" を条件に使用される名前です。}} |
{{Note|転送に他の条件 (送信元 IP アドレスなど) を使用することもできますが、"条件付き転送" は、"照会されたドメイン" を条件に使用される名前です。}} |
||
== |
== 参照 == |
||
* [https://www.tldp.org/LDP/nag2/x-087-2-resolv.html Linux Network Administrators Guide] |
* [https://www.tldp.org/LDP/nag2/x-087-2-resolv.html Linux Network Administrators Guide] |
||
* [https://www.debian.org/doc/manuals/debian-handbook/sect.hostname-name-service.en.html#sect.name-resolution Debian Handbook] |
* [https://www.debian.org/doc/manuals/debian-handbook/sect.hostname-name-service.en.html#sect.name-resolution Debian Handbook] |
||
* [[RFC:7706]] - ループバックで動作させることでルートサーバーへのアクセス時間を短縮 |
|||
* [[RFC:7706]] - Decreasing Access Time to Root Servers by Running One on Loopback |
|||
* [http://linux-ip.net/pages/diagrams.html#domain-name-system-overview Domain name system overview] - |
* [http://linux-ip.net/pages/diagrams.html#domain-name-system-overview Domain name system overview] - DNS に関する図 |
||
* [[ |
* [[代替 DNS サービス]] |
||
2025年2月1日 (土) 05:55時点における最新版
一般に、ドメイン名 は 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
/etc/resolv.conf や /etc/hosts を直接読み取るプログラムもあります。ネットワーク設定#localhost がネットワーク上で解決される を参照してください。Glibc リゾルバ
glibc リゾルバは、解決ごとに /etc/resolv.conf を読み取り、使用するネームサーバーとオプションを決定します。
resolv.conf(5)は、ネームサーバー(nameservers)といくつかの設定オプションを記載するファイルです。
最初に記載された名前解決サーバーが優先的に使用され、最大3つまで記載できます。
先頭に (#) が付いた行は無視されます。
/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
/etc/resolv.conf に書き込みたい場合は、resolvconf を使用できます。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 で定義されたネームサーバーを使用します。
- knot khost(1) と kdig(1) を提供します。
- Unbound unbound-host(1) を持っています。
- BIND には、dig(1)、host(1)、nslookup(1)、および多数の
dnssec-ツールがあります。 - systemd-resolved resolvectl(1) があり、DNS 探索用の
queryサブコマンドを提供します。
Resolver のパフォーマンス
Glibc resolver は問い合わせをキャッシュしません。ローカルキャッシュを実装するには、 systemd-resolved を使用するか、ローカルキャッシュ DNS server を設定し、 127.0.0.1 と ::1 を /etc/resolv.conf または /etc/resolvconf (openresolv を使用する場合) でネームサーバーとして使用します。
- drill または dig は、クエリー時間を報告します。
- 通常、ルータは自身のキャッシングリゾルバ を ネットワークの DNS サーバーとして設定し、ネットワーク全体に DNS キャッシュを提供します。
- 次の DNS サーバーへの切り替えに時間がかかりすぎる場合は、 ドメイン名前解決#timeout オプションを使ってホスト名の検索時間を減らす を試してください。
プライバシーとセキュリティ
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にのみ実装されています。
Oblivious 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 サービス