「Pdnsd」の版間の差分
(同期) |
Kusanaginoturugi (トーク | 投稿記録) |
||
(2人の利用者による、間の15版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:ドメインネームシステム]] |
[[en:Pdnsd]] |
[[en:Pdnsd]] |
||
[[es:Pdnsd]] |
[[es:Pdnsd]] |
||
76行目: | 76行目: | ||
ネットワークを使用するサービス ({{ic|network-online.target}}) がちゃんと DNS を使えるように、{{ic|network.target}} の後すぐに起動します (参照: [https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ Upstream Wiki])。 |
ネットワークを使用するサービス ({{ic|network-online.target}}) がちゃんと DNS を使えるように、{{ic|network.target}} の後すぐに起動します (参照: [https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ Upstream Wiki])。 |
||
+ | 2つ以上のNICを備えたPCで、有線およびワイヤレス接続でpdnsdが動作するようにするには、各NICに個別のプロファイルを設定してください {{ic|pdnsd.conf}} by 正しい{{ic|interface}} を指定する。 |
||
− | For any PC with two or more NICs to have pdnsd operational for any wired and wireless connection please configure separate profile for each NIC in {{ic|pdnsd.conf}} by specifying correct {{ic|interface}}. |
||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
82行目: | 82行目: | ||
=== ホームブロードバンドユーザー向けのパフォーマンス設定 === |
=== ホームブロードバンドユーザー向けのパフォーマンス設定 === |
||
+ | 多くのユーザーはブロードバンド接続を使用しており、DNSサーバーが遅いか信頼性が低く、 {{ic|pdnsd}} をキャッシュサーバーとして使用して、必要なDNSクエリの数を最小限に抑えたいと考えています。上記の詳細設定を行った後、 {{ic|/etc/pdnsd.conf}} の以下の設定は、この役割のパフォーマンスを向上させるのに役立ちます。 |
||
− | Many users have broadband connections where the DNS server is slow or unreliable, and would like to use {{ic|pdnsd}} as a caching server to minimize the number of DNS queries that need to be made. After doing the setup detailed above, the following settings in the {{ic|/etc/pdnsd.conf}} will help improve the performance in this role: |
||
− | + | global settings: |
|
neg_rrs_pol=on; |
neg_rrs_pol=on; |
||
par_queries=1; |
par_queries=1; |
||
− | + | server settings: |
|
proxy_only=on; |
proxy_only=on; |
||
purge_cache=off; |
purge_cache=off; |
||
+ | {{ic|1=neg_rrs_pol=on;}} ポリシーとは、クエリに対して否定的な応答が返された場合、応答が「信頼できる」ものでなくても、 pdnsd サーバーは結果をキャッシュすることを意味します。 DNS クエリを監視すると、 AAAA レコード (IPv6 の DNS クエリ) に対する多くの要求があることが明らかになるため、これは重要です。多くのドメインがIPv6を使用していないために結果を返すことはなく、すべてのドメインが MX レコードを持っているわけではないため MX レコードも同様です。ネガティブキャッシングがない場合、これらの要求はドメイン名がキャッシュされた後でも送信され、この役割では追加の DNS 要求が行われることを望まないでしょう。このオプションは、 {{ic|1=proxy_only=on;}} と組み合わせて使用することが重要です。システムから送信されるクエリの数を最小限に抑えるオプション。 |
||
− | The {{ic|1=neg_rrs_pol=on;}} policy means that when a negative response comes back for a query, pdnsd server will still cache the result even if the response is not "authoritative". This is important since watching DNS queries will reveal that there are many requests for AAAA records (DNS queries for IPv6) which will never return results since many domains are not using IPv6, as well as MX records since not every domain has an MX record. Without the negative caching, these requests will be sent even after a domain name has been cached, and in this role you do not want the extra DNS requests being made. It is important to use this option in conjunction with the {{ic|1=proxy_only=on;}} option to minimize the number of queries coming out of the system. |
||
+ | {{ic|1=par_queries=1;}} このオプションは、以下の「サーバー」セクションで複数の DNS サーバーを指定する場合に役立ちます。一度に実行される並列クエリの数の増分を指定します。たとえば、''server'' セクションに4つの DNS サーバーがリストされていて、 {{ic|1=par_queries=2;}} (デフォルト) の場合、最初の2つのサーバーが同時に照会され、最初の2つのサーバーの両方に障害が発生した場合、 {{ic|pdnsd}} は次の2つのサーバーに移動して、同時に照会します。上記の設定は、一度に1つのDNSサーバーが照会されることを意味するため、 ''server'' セクションに2つ以上の DNS サーバーをリストでき、2番目の DNS サーバーは、最初の DNS サーバーが失敗した場合にのみ照会されます。これはトラフィックを最小限に抑えるのに役立ちますが、最初のサーバーに障害が発生した場合は、2番目のサーバーが照会される前にタイムアウトになるまで待機する必要があります。この設定を独自の設定に合わせて調整します。 ''server'' セクションでサーバーを1つだけ指定する場合は、心配する必要はありません。 |
||
− | The {{ic|1=par_queries=1;}} option is useful if you specify more than one DNS server in your "server" section below. It specifies an increment of how many parallel queries will be made at once. For example, if four DNS servers are listed in the "server" section, and {{ic|1=par_queries=2;}} (the default), then the first 2 servers will be queried simultaneously, and if both of the first two servers fail, {{ic|pdnsd}} will move on to the next two and query them simultaneously. The setting used above means that one DNS server at a time gets queried, so you can list two or more DNS servers in the "server" section, and the second one will only be queried if the first one fails. This helps minimize traffic, but if the first server fails you will have to wait through the timeout before the second server will be queried. Tweak this setting for your own preferences, and if you only specify one server in the "server" section then you do not need to worry about it. |
||
+ | {{ic|1=proxy_only=on;}} 設定は、以下の FAQ で説明されており、ホームブロードバンドユーザーにとって重要です。これは、通常、完全なDNSサーバーが行うような本格的な階層的な名前解決を行うのではなく、1つまたは2つのDNSサーバーのみを使用するためです。この設定は、 {{ic|pdnsd}} が ''権限のある'' ネームサーバーまで解決しないようにし、代わりに、 ''server'' セクションですでに指定されている DNS サーバーの結果を受け入れます。繰り返しになりますが、これにより、必要な DNS クエリの数が減り、パフォーマンスが向上します。 |
||
− | The {{ic|1=proxy_only=on;}} setting is mentioned below in the FAQ and is important for home broadband users since you generally are using only one or two DNS servers instead of trying to do the full-blown hierarchical name resolution that a full DNS server would do. This setting will prevent {{ic|pdnsd}} from resolving all the way back to the "authoritative" name server, and instead accept the results of the DNS servers that were already specified in the "server" section. Once again, this reduces the number of DNS queries you need to make, improving performance. |
||
+ | {{ic|1=purge_cache=off;}} 設定は、DNSレコードの存続時間メトリックよりも長くてもキャッシュエントリを削除しないように {{ic|pdnsd}} に指示します。これは、ISPのDNSサーバーがダウンし、停止中に頻繁に使用するドメインの名前検索にアクセスできるようにする場合に非常に役立ちます。キャッシュがいっぱいになると、レコードは経過時間に基づいてキャッシュからバンプされます(キャッシュのサイズの設定方法については、{{man|5|pdnsd.conf}} を参照してください)。 |
||
− | The {{ic|1=purge_cache=off;}} setting tells {{ic|pdnsd}} not to remove cache entries even if they have outlived the DNS record's time-to-live metric. This can be very useful when your ISP's DNS server goes down and you want to be able to access name lookups for domains you frequently use despite the outage. Records will still be bumped out of the cache based on age once the cache becomes full (see {{man|5|pdnsd.conf}} on how to set the size of the cache). |
||
=== その他のパフォーマンス設定 === |
=== その他のパフォーマンス設定 === |
||
104行目: | 104行目: | ||
==== TTL (Time-To-Live) ==== |
==== TTL (Time-To-Live) ==== |
||
+ | サーバーから返される各 DNS リソースレコードには、最大存続可能時間 (TTL) が含まれます。これにより、受信者はレコードを保存する期間と、レコードを新しく検索するタイミングがわかります。多くの DNS レコードには、3600(1時間) などの比較的短いTTLがあります。つまり、1時間後、 pdnsd は、キャッシュされたレコードが利用可能かどうかに関係なく、このエントリに対して新しい検索を試みます。グローバルな最小 TTL を設定してこのデフォルト TTL をオーバーライドすることでパフォーマンスが向上し、実行されるルックアップが少なくなります。長すぎる最小 TTL を使用することの欠点は、キャッシュされたレコードが古くなる可能性があることです(ホストのIPアドレスが変更される可能性がありますが、クライアントはキャッシュされたアドレスを受け取るため、これを認識しません)。ただし、ほとんどの IP アドレスは1時間ごと、または毎日変更されることはありません。 時間はデフォルトで秒単位で指定されますが、「m」、「h」、「d」、または「w」を時間に追加して、分、時間、日、または週を指定することもできます。 グローバル設定の {{ic|1=min_ttl}} は、キャッシュされたレコードの最小TTLを設定するため、pdnsdはサーバーから受信したレコードのデフォルトTTLを無視します。遅い接続または遅いDNSサーバーでは、これを数時間に設定して、ルックアップの数を減らすことができます ( 例 {{ic|1=min_ttl=6h;}} ) グローバル設定の {{ic|1=neg_ttl}} は、存在しないドメインの最小 TTL を設定します。サーバーがドメインが存在しないことをpdnsdに通知した場合、この時間が経過するまで、サーバーはそのドメインを再度検索しようとしません。 |
||
− | Each DNS resource record returned from a server includes a maximum time-to-live, or TTL. This tells the recipient how long to store the record and when to do a new lookup on it. Many DNS records have relatively short TTLs, such as 3600 (one hour). This means that after one hour, pdnsd will attempt a new lookup on this entry, regardless of whether it has a cached record for it available. It will improve performance to override this default TTL by setting a global minimum TTL, causing fewer lookups to be performed. The disadvantage to using a minimum TTL that is too long is that a cached record may be out of date (the IP address of the host may be changed, but your client will not know this because it will receive the cached address). However, most IP addresses do not change hourly or even daily. |
||
− | |||
− | Times are specified in seconds by default, or you may append an "m", "h", "d", or "w" to the time to specify minutes, hours, days, or weeks. |
||
− | |||
− | {{ic|1=min_ttl}} in the global settings sets a minimum TTL for cached records, causing pdnsd to ignore the default TTL in the record received from the server. On a slow connection or with a slow DNS server, you may want to set this to several hours to reduce the number of lookups ( eg {{ic|1=min_ttl=6h;}} ). |
||
− | |||
− | {{ic|1=neg_ttl}} in the global settings sets a minimum TTL for non-existent domains. If a server tells pdnsd that a domain does not exist, it will not try to lookup that domain again until this amount of time has elapsed. |
||
==== タイムアウト ==== |
==== タイムアウト ==== |
||
+ | 短いタイムアウトを設定すると、 pdnsd はクエリ全体または特定のサーバークエリをより迅速に放棄し、パフォーマンスが向上します。タイムアウトの設定が短すぎる場合の短所は、単にサーバーが応答するのに十分な時間を与えられなかったために、 pdnsd がルックアップでエラーを返す可能性があることです。 |
||
− | Setting shorter timeouts means that pdnsd will give up on an entire query or a given server query more quickly, resulting in faster performance. The disadvantage to setting timeouts too short is that pdnsd might return an error on a lookup simply because the server was not given enough time to respond. |
||
+ | {{ic|timeout}} グローバル設定では、pdnsdがクエリ全体を断念し、ブラウザまたは他のクライアントにエラーを返すタイミングを決定します。グローバルタイムアウトオプションを設定すると、サーバーセクションで非常に短いタイムアウト間隔を指定できます (以下を参照)。これにより、最初のサーバーの応答が遅い場合にpdnsdが追加サーバーの照会をかなり迅速に開始するという効果があります(ただし、最初のサーバーからの応答は引き続きリッスンします)。 (query_method = tcp_udp を使用する場合、グローバルタイムアウトを最大サーバータイムアウトの少なくとも2倍にすることをお勧めします。そうしないと、 TCP 接続がタイムアウトした場合に pdnsd が UDP クエリを試行する時間がない場合があります。) |
||
− | {{ic|timeout}} in the global settings determines when pdnsd gives up on an entire query and returns an error to your browser or other client. Setting the global timeout option makes it possible to specify quite short timeout intervals in the server sections (see below). This will have the effect that pdnsd will start querying additional servers fairly quickly if the first servers are slow to respond (but will still continue to listen for responses from the first ones). (If you use query_method=tcp_udp it is recommended that you make the global timeout at least twice as large as the largest server timeout, otherwise pdnsd may not have time to try a UDP query if a TCP connection times out.) |
||
+ | {{ic|1=tcp_qtimeout}} グローバル設定で、TCPクエリ接続を開いたままにすることができる時間を決定します。 |
||
− | {{ic|1=tcp_qtimeout}} in the global settings determines how long a TCP query connection may be left open. |
||
+ | {{ic|1=timeout}} サーバー設定で、pdnsdが各サーバーからの応答を待機する時間を決定します。これをより短い時間に設定すると、 pdnsd は応答しないサーバーをより迅速に放棄し、次の使用可能なサーバーに移動するため、全体的な応答時間が速くなる場合があります。高速接続では、これを4秒または5秒に設定することも可能です。 |
||
− | {{ic|1=timeout}} in the server settings determines how long pdnsd will wait for a response from each server. Setting this to a shorter time means that pdnsd will give up on a non-responsive server more quickly and will move on to the next available server, sometimes resulting in a faster overall response time. On a fast connection, setting this to 4 or 5 seconds is not unreasonable. |
||
==== デバッグ ==== |
==== デバッグ ==== |
||
+ | 特定のルックアップに pdnsd が使用しているサーバー、タイムアウトの仕組み、およびドメインで使用されているデフォルト TTL を確認するには、グローバル設定でデバッグをオンにします。 |
||
− | To see what servers pdnsd is using for a particular lookup, how timeouts are working, and what default TTLs are being used by domains, turn debug on in the global settings: |
||
debug=on; |
debug=on; |
||
+ | pdnsd を再起動して、systemd ジャーナルの変更について pdnsd.service を監視します。 |
||
− | Restart pdnsd and monitor the pdnsd.service for changes with the systemd journal: |
||
journalctl -f _SYSTEMD_UNIT=pdnsd.service |
journalctl -f _SYSTEMD_UNIT=pdnsd.service |
||
+ | デバッグをオンのままにするとパフォーマンスが低下する可能性があるため、一般的な使用ではデバッグをオフにしてください。 |
||
− | Be sure to turn debug off for general use as leaving it on may degrade performance. |
||
==== キャッシュ容量 ==== |
==== キャッシュ容量 ==== |
||
+ | デフォルトでは、 pdnsd は自動的にすべてのエントリの信頼できるレコードを作成します {{ic|/etc/hosts}}. エントリが多数ある場合、たとえば広告のブロックに使用している場合、デフォルトの最大キャッシュサイズは {{ic|/etc/pdnsd.conf}} 十分な大きさではない可能性があり、その結果、予想される時間内にDNS要求がキャッシュされません。 |
||
− | By default, pdnsd will automatically create authoritative records for all entries in {{ic|/etc/hosts}}. If you have a lot of entries, for example if you are using it for ad blocking, the default maximum cache size provided by {{ic|/etc/pdnsd.conf}} may not be large enough, resulting in DNS requests not being cached for their expected amount of time. |
||
− | キャッシュ容量を増やすには、設定ファイルの 'global settings' セクションの {{ic|1=perm_cache}} 行を編集してください (単位は kB です)。 |
+ | キャッシュ容量を増やすには、設定ファイルの ''global settings'' セクションの {{ic|1=perm_cache}} 行を編集してください (単位は kB です)。 |
+ | または、オプション {{ic|1=authrec=off}} を ''source'' セクションに追加することにより、 pdnsd が hosts ファイルを先制的に調達するのを防ぐことができます。何らかの理由で authrec を off に設定しても機能しない場合、簡単な回避策は、システム情報のみを含む別のホストファイル {{ic|/etc/hosts-pdnsd など}}を作成し、代わりに ''source'' セクションをポイントすることです元のホストファイルをそのまま残します。この方法で、 pdnsd は検索を実行するときにのみ {{ic|/etc/hosts}} を参照します。たとえば、次のとおりです。 |
||
− | Alternatively, you can prevent pdnsd from preemptively sourcing your hosts file by adding the option {{ic|1=authrec=off}} to the 'source' section. If, for whatever reason, setting authrec to off does not work, an easy workaround is to create a separate hosts file (eg {{ic|/etc/hosts-pdnsd}}) with only your system information and point your 'source' section to that instead, while leaving your original hosts file intact. This way, pdnsd will reference {{ic|/etc/hosts}} only when performing lookups. So for example: |
||
{{hc|/etc/hosts-pdnsd|2=#<ip-address> <hostname.domain.org> <hostname> |
{{hc|/etc/hosts-pdnsd|2=#<ip-address> <hostname.domain.org> <hostname> |
||
127.0.0.1 localhost.localdomain my_hostname |
127.0.0.1 localhost.localdomain my_hostname |
||
147行目: | 141行目: | ||
ネットワーク上に複数のコンピュータが存在する場合、全てのコンピュータで pdnsd を DNS サーバーとして使うことができます。ひとつの DNS キャッシュをネットワーク全体で共有することで、ルックアップの速度がもっと高速になります。他のコンピュータから使用できるようにするには、{{ic|global}} セクションの {{ic|server_ip}} をネットワークインターフェイスの名前 (例: {{ic|eth0}}) に設定してください。ファイアウォールを使っている場合、ネットワーク上のアドレスからのポート 53 への接続を許可するようにしてください。 |
ネットワーク上に複数のコンピュータが存在する場合、全てのコンピュータで pdnsd を DNS サーバーとして使うことができます。ひとつの DNS キャッシュをネットワーク全体で共有することで、ルックアップの速度がもっと高速になります。他のコンピュータから使用できるようにするには、{{ic|global}} セクションの {{ic|server_ip}} をネットワークインターフェイスの名前 (例: {{ic|eth0}}) に設定してください。ファイアウォールを使っている場合、ネットワーク上のアドレスからのポート 53 への接続を許可するようにしてください。 |
||
+ | これで、ネットワーク上の他のコンピューターを構成して、PDNを実行しているコンピューターをプライマリDNSサーバーとして使用できます。 |
||
− | Now you can configure the other computers on your network to use the computer running pdns as their primary dns server. |
||
− | === 名前ブロック === |
+ | === 名前でブロック === |
+ | pdnsdを使用すると、結果を返してはならないホストまたはドメインを指定できます。これにより、特にプリミティブ広告またはコンテンツブロッカーとして使用できます。 {{ic|pdnsd.conf}} に新しい {{ic|neg}} セクションを作成します。否定セクションには2つの主要なオプションがあります。 {{ic|name}} は、ブロックするホストまたはドメインの名前です。 {{ic|types}} を {{ic|domain}} に設定して、特定のドメイン内のすべてのホストをブロックできます。デフォルトの {{ic|pdnsd.conf}} は、doubleclick.netからのすべての広告をブロックする例を示しています。 |
||
− | pdnsd allows you to specify hosts or domains that it should never return results for. This allows you to use it as a primitive ad or content blocker, among other things. Create a new {{ic|neg}} section in {{ic|pdnsd.conf}}. {{ic|neg}} sections have two main options. {{ic|name}} is the name of the host or domain you want to block. {{ic|types}} can be set to {{ic|domain}} to block all hosts in the given domain. The default {{ic|pdnsd.conf}} gives an example that blocks all ads from doubleclick.net. |
||
+ | |||
+ | ブロックごとに1つのドメインしか設定できないので、追加、トラッカー、悪意のあるコンテンツをブロックするためにはうまくスケールしません。しかし、{{ic|source}} セクションを追加することは可能です (既存の {{ic|/etc/hosts}} を読み込むものに加えて) このセクションは、ドメインを特別な IP アドレス 0.0.0.0 にバインドする形式 – ただし、{{ic|/etc/hosts}} ではワイルドカードが許可されていないため、サブドメインはブロックされません。これを行うことは、ルールを {{ic|/etc/hosts}} に追加することと同じですが、一部のアプリケーションを破壊する可能性のある巨大な {{ic|/etc/hosts}} ファイルをを避けることができます。 |
||
=== pdnsd-ctl === |
=== pdnsd-ctl === |
||
158行目: | 154行目: | ||
:'''''pdnsd-ctl''' は永続的なキャッシュを使う DNS プロキシサーバーである '''pdnsd''' を制御します。'''pdnsd-ctl''' を使う前に (pdnsd のコマンドラインや設定ファイルでオプションを指定して) ステータス制御ソケットを有効にする必要があるので注意してください。'' |
:'''''pdnsd-ctl''' は永続的なキャッシュを使う DNS プロキシサーバーである '''pdnsd''' を制御します。'''pdnsd-ctl''' を使う前に (pdnsd のコマンドラインや設定ファイルでオプションを指定して) ステータス制御ソケットを有効にする必要があるので注意してください。'' |
||
+ | これを行うには、オプションを含めます |
||
+ | status_ctl = on; |
||
+ | {{ic|/etc/pdnsd.conf}} のグローバルセクションにあります。 |
||
+ | |||
+ | {{ic|/etc/pdnsd.conf}} でキャッシュディレクトリを変更した場合は、{{ic|-c}} オプションを指定して {{ic|pdnsd-ctl}} を実行する必要があります。 |
||
+ | |||
+ | # pdnsd-ctl -c ''path/to/cache'' |
||
以下のようなコマンドが使えます。 |
以下のようなコマンドが使えます。 |
||
175行目: | 178行目: | ||
=== result of uptest for 192.168.x.x: failed === |
=== result of uptest for 192.168.x.x: failed === |
||
− | + | ログに次のように表示されていても、ISPの [[Wikipedia:Dynamic DNS|dynamic DNS]] に正常にpingを送信できます。 |
|
− | {{hc|<nowiki>$ journalctl -f |
+ | {{hc|<nowiki>$ journalctl -f -u pdnsd.service</nowiki>| |
result of uptest for 192.168.x.x: failed |
result of uptest for 192.168.x.x: failed |
||
}} |
}} |
||
+ | {{ic|/etc/pdnsd.conf}} のグローバルセクションに設定されているインターフェイスが存在することを確認します。 |
||
− | Check the interface configured in {{ic|/etc/pdnsd.conf}} global section exists: |
||
interface = any; |
interface = any; |
||
+ | もしくはサーバーセクションにあるもの。 |
||
− | or the one in the server section: |
||
interface=enp2s0; |
interface=enp2s0; |
||
+ | 正しい名前は、{{ic|ifconfig}} を実行して見つけることができます。 |
||
− | The correct name can be found by running: {{ic|ifconfig}}. |
||
== FAQ == |
== FAQ == |
||
; Q) あんまり速くありません。なぜ? : '''A)''' ローカル DNS キャッシュを使うことによる速度の向上はサーバーに接続するまでにかかる時間によります。スループット (いわゆる速度) に影響はありません。複数のサーバーから小さなダウンロードを行う、ウェブの閲覧などで違いは最も明白になります。接続速度が遅い、特にダイアルアップ接続などでは、スループットがボトルネックになるため、目で見てわかるほどの違いは生まれません。 |
; Q) あんまり速くありません。なぜ? : '''A)''' ローカル DNS キャッシュを使うことによる速度の向上はサーバーに接続するまでにかかる時間によります。スループット (いわゆる速度) に影響はありません。複数のサーバーから小さなダウンロードを行う、ウェブの閲覧などで違いは最も明白になります。接続速度が遅い、特にダイアルアップ接続などでは、スループットがボトルネックになるため、目で見てわかるほどの違いは生まれません。 |
||
− | ; Q) 前より遅くなっているんですが? : '''A)''' おそらく {{ic|pdnsd.conf}} のサーバーセクションのどれかで {{ic|proxy_only}} オプションがオフになっています。デフォルトで、pdnsd は |
+ | ; Q) 前より遅くなっているんですが? : '''A)''' おそらく {{ic|pdnsd.conf}} のサーバーセクションのどれかで {{ic|proxy_only}} オプションがオフになっています。デフォルトで、pdnsd はできる限り正確なレスポンスを得るために複数の DNS サーバーに頻繁にリクエストを行います。{{ic|proxy_only}} オプションはこの機能を無効化します。ISP によって提供されている DNS サーバーを使っている場合はオンにしたほうが良いでしょう。 |
2024年8月15日 (木) 13:39時点における最新版
pdnsd は DNS 情報をローカルでキャッシュするように設計された DNS サーバーです。正しく設定することで、ブロードバンド接続でのブラウジング速度を劇的に上げることができます。BIND や dnsmasq と対照的に、再起動後もキャッシュを保持します。"p" は永続 (persistent) です。
インストール
設定
パッケージにはサンプル設定ファイル /usr/share/doc/pdnsd/pdnsd.conf
が付属しています。カスタマイズした設定ファイルを /etc/pdnsd.conf
に作成してください。
フォーマット
pdnsd.conf
ファイルのフォーマットはとても単純ですが、よくある設定ファイルとは少し違うところもあります。様々なタイプのセクションから成ります。セクションのタイプの名前と波括弧 ({) でセクションの開始を示して同じく波括弧 (}) で閉じます。セクションは入れ子にできません。
各ブロックでは以下の形式でオプションを指定します:
option_name=option_value;
セミコロンが最後に付いていることに気をつけて下さい。他のフォーマットと違って、セミコロンは必須です。
コメントは # か /* のどちらかで始めます。前者は行全体がコメントになり、後者は */ までずっとコメントになります。
DNS サーバー
DNS 情報を取得するために、最低でも一つの DNS のサーバーのアドレスを pdnsd に指定する必要があります。設定する箇所はブロードバンド接続なのかダイアルアップ接続なのかで変わってきます。ブロードバンドを使っている場合は最初のサーバーセクションを使って下さい。ダイアルアップ接続の場合、2番目のセクションを使って、それ以外のサーバーセクションはコメントアウトしてください。
- label
label
オプションはサーバーセクションに名前を付けるのに使います。使用は任意ですが、ISP の名前を使うと良いでしょう。- ip
- デフォルトのブロードバンド設定で使われるこのオプションは pdnsd に使用する DNS サーバーのアドレスを指定します。アドレスが複数ある場合はカンマで区切って下さい。カンマの前後には空白を挟むことができます。
/etc/resolv.conf
からアドレスをコピーするだけでかまいません。 - file
ip
の代わりにfile
オプションを使うことで DNS サーバーの IP のセットを指定することができます。resolv.conf
と同じ形式でサーバーがリストアップされたファイルのパスを値にします。ダイアルアップ接続の設定はデフォルトでfile
を使います。PPP クライアントは/etc/ppp/resolv.conf
に PPP サーバーから得られたアドレスを書き込むからです。ISP から取得できるデフォルトの DNS サーバーを使わない場合でなければ変更する必要はありません。- interface
- uptest=if オプションで使うネットワークインターフェイス。デフォルトでは eth0 ですが、基本的に別のインターフェイスになるはずです。pdnsd サービスを起動しても DNS レコードが返ってこない場合、このオプションが間違っていないか疑って下さい。
サーバーセクションの上記以外のオプションは変えなくてもかまいません。利用可能なオプションの詳細は pdnsd マニュアル を見て下さい。
DNS サーバーと DHCP 接続
netctl をインストールしている場合、pdnsd は resolvconf でネームサーバーの IP アドレスを知ることができます (resolvconf(8) を参照)。プロファイルの自動切り替えをしている場合、動的に IP アドレスが伝えられます。
この機能を設定するには、ブロードバンドのサーバーセクションを削除してダイアルアップのサーバーセクションに以下の変更を加えて下さい:
label = resolvconf; file = /etc/pdnsd-resolv.conf;
/etc/resolvconf.conf
を編集して pdnsd を使うように resolvconf を設定します:
name_servers=127.0.0.1 pdnsd_resolv=/etc/pdnsd-resolv.conf
それから resolvconf -u
を実行してネームサーバーのアドレスが載っている /etc/pdnsd-resolv.conf
を更新してください (pdnsd ソケットにアクセスできないというエラーメッセージは無視してください)。手動で pdnsd を起動する前に一度更新する必要があります。
OpenDNS
pdnsd.conf
ファイルには OpenDNS の設定が初めから入っています。ダイアルアップとブロードバンドセクションを削除 (またはコメントアウト) して (ファイルの上部にある全体の設定を削除してしまわないように注意してください)、OpenDNS の設定をアンコメントすることで OpenDNS を使うことができます。
ただし OpenDNS は Google で問題が発生することがあります。問題を避けるには OpenDNS の Google プロキシマシンを返答する OpenDNS の結果を拒否しなければなりません (大抵の場合 Google のリクエストが 15ms から 75ms 以上にまで遅くなります)。実際のサーバーの IP は代わりますが、(ldns に含まれている) drill www.google.com @208.67.222.222
で現在の IP を確認できます。サーバーの名前が google.navigation.opendns.com
のように解決されるので、クエリがプロキシを通しているかどうか知ることができます。執筆時点では、アドレスは 208.67.216.230
と 208.67.216.231
でした。
IP がわかったら、pdnsd.conf
の OpenDNS server { …
} にある既存の rejected
IP を置き換えてください。プリフィックスは削除しないでください。
OpenDNS の代替として OpenNIC というサービスも存在します。
テスト
pdnsd
デーモンが機能するか確認するために、起動してください。
テストする方法は Resolv.conf#Linux における DNS を参照してください。
127.0.0.1
を使ってアドレスをルックアップすると、問い合わせ時間は 1 ms 以下になるはずです。
システム設定
pdnsd
サービスを有効化してください。
ネットワークを使用するサービス (network-online.target
) がちゃんと DNS を使えるように、network.target
の後すぐに起動します (参照: Upstream Wiki)。
2つ以上のNICを備えたPCで、有線およびワイヤレス接続でpdnsdが動作するようにするには、各NICに個別のプロファイルを設定してください pdnsd.conf
by 正しいinterface
を指定する。
ヒントとテクニック
ホームブロードバンドユーザー向けのパフォーマンス設定
多くのユーザーはブロードバンド接続を使用しており、DNSサーバーが遅いか信頼性が低く、 pdnsd
をキャッシュサーバーとして使用して、必要なDNSクエリの数を最小限に抑えたいと考えています。上記の詳細設定を行った後、 /etc/pdnsd.conf
の以下の設定は、この役割のパフォーマンスを向上させるのに役立ちます。
global settings:
neg_rrs_pol=on; par_queries=1;
server settings:
proxy_only=on; purge_cache=off;
neg_rrs_pol=on;
ポリシーとは、クエリに対して否定的な応答が返された場合、応答が「信頼できる」ものでなくても、 pdnsd サーバーは結果をキャッシュすることを意味します。 DNS クエリを監視すると、 AAAA レコード (IPv6 の DNS クエリ) に対する多くの要求があることが明らかになるため、これは重要です。多くのドメインがIPv6を使用していないために結果を返すことはなく、すべてのドメインが MX レコードを持っているわけではないため MX レコードも同様です。ネガティブキャッシングがない場合、これらの要求はドメイン名がキャッシュされた後でも送信され、この役割では追加の DNS 要求が行われることを望まないでしょう。このオプションは、 proxy_only=on;
と組み合わせて使用することが重要です。システムから送信されるクエリの数を最小限に抑えるオプション。
par_queries=1;
このオプションは、以下の「サーバー」セクションで複数の DNS サーバーを指定する場合に役立ちます。一度に実行される並列クエリの数の増分を指定します。たとえば、server セクションに4つの DNS サーバーがリストされていて、 par_queries=2;
(デフォルト) の場合、最初の2つのサーバーが同時に照会され、最初の2つのサーバーの両方に障害が発生した場合、 pdnsd
は次の2つのサーバーに移動して、同時に照会します。上記の設定は、一度に1つのDNSサーバーが照会されることを意味するため、 server セクションに2つ以上の DNS サーバーをリストでき、2番目の DNS サーバーは、最初の DNS サーバーが失敗した場合にのみ照会されます。これはトラフィックを最小限に抑えるのに役立ちますが、最初のサーバーに障害が発生した場合は、2番目のサーバーが照会される前にタイムアウトになるまで待機する必要があります。この設定を独自の設定に合わせて調整します。 server セクションでサーバーを1つだけ指定する場合は、心配する必要はありません。
proxy_only=on;
設定は、以下の FAQ で説明されており、ホームブロードバンドユーザーにとって重要です。これは、通常、完全なDNSサーバーが行うような本格的な階層的な名前解決を行うのではなく、1つまたは2つのDNSサーバーのみを使用するためです。この設定は、 pdnsd
が 権限のある ネームサーバーまで解決しないようにし、代わりに、 server セクションですでに指定されている DNS サーバーの結果を受け入れます。繰り返しになりますが、これにより、必要な DNS クエリの数が減り、パフォーマンスが向上します。
purge_cache=off;
設定は、DNSレコードの存続時間メトリックよりも長くてもキャッシュエントリを削除しないように pdnsd
に指示します。これは、ISPのDNSサーバーがダウンし、停止中に頻繁に使用するドメインの名前検索にアクセスできるようにする場合に非常に役立ちます。キャッシュがいっぱいになると、レコードは経過時間に基づいてキャッシュからバンプされます(キャッシュのサイズの設定方法については、pdnsd.conf(5) を参照してください)。
その他のパフォーマンス設定
TTL (Time-To-Live)
サーバーから返される各 DNS リソースレコードには、最大存続可能時間 (TTL) が含まれます。これにより、受信者はレコードを保存する期間と、レコードを新しく検索するタイミングがわかります。多くの DNS レコードには、3600(1時間) などの比較的短いTTLがあります。つまり、1時間後、 pdnsd は、キャッシュされたレコードが利用可能かどうかに関係なく、このエントリに対して新しい検索を試みます。グローバルな最小 TTL を設定してこのデフォルト TTL をオーバーライドすることでパフォーマンスが向上し、実行されるルックアップが少なくなります。長すぎる最小 TTL を使用することの欠点は、キャッシュされたレコードが古くなる可能性があることです(ホストのIPアドレスが変更される可能性がありますが、クライアントはキャッシュされたアドレスを受け取るため、これを認識しません)。ただし、ほとんどの IP アドレスは1時間ごと、または毎日変更されることはありません。 時間はデフォルトで秒単位で指定されますが、「m」、「h」、「d」、または「w」を時間に追加して、分、時間、日、または週を指定することもできます。 グローバル設定の min_ttl
は、キャッシュされたレコードの最小TTLを設定するため、pdnsdはサーバーから受信したレコードのデフォルトTTLを無視します。遅い接続または遅いDNSサーバーでは、これを数時間に設定して、ルックアップの数を減らすことができます ( 例 min_ttl=6h;
) グローバル設定の neg_ttl
は、存在しないドメインの最小 TTL を設定します。サーバーがドメインが存在しないことをpdnsdに通知した場合、この時間が経過するまで、サーバーはそのドメインを再度検索しようとしません。
タイムアウト
短いタイムアウトを設定すると、 pdnsd はクエリ全体または特定のサーバークエリをより迅速に放棄し、パフォーマンスが向上します。タイムアウトの設定が短すぎる場合の短所は、単にサーバーが応答するのに十分な時間を与えられなかったために、 pdnsd がルックアップでエラーを返す可能性があることです。
timeout
グローバル設定では、pdnsdがクエリ全体を断念し、ブラウザまたは他のクライアントにエラーを返すタイミングを決定します。グローバルタイムアウトオプションを設定すると、サーバーセクションで非常に短いタイムアウト間隔を指定できます (以下を参照)。これにより、最初のサーバーの応答が遅い場合にpdnsdが追加サーバーの照会をかなり迅速に開始するという効果があります(ただし、最初のサーバーからの応答は引き続きリッスンします)。 (query_method = tcp_udp を使用する場合、グローバルタイムアウトを最大サーバータイムアウトの少なくとも2倍にすることをお勧めします。そうしないと、 TCP 接続がタイムアウトした場合に pdnsd が UDP クエリを試行する時間がない場合があります。)
tcp_qtimeout
グローバル設定で、TCPクエリ接続を開いたままにすることができる時間を決定します。
timeout
サーバー設定で、pdnsdが各サーバーからの応答を待機する時間を決定します。これをより短い時間に設定すると、 pdnsd は応答しないサーバーをより迅速に放棄し、次の使用可能なサーバーに移動するため、全体的な応答時間が速くなる場合があります。高速接続では、これを4秒または5秒に設定することも可能です。
デバッグ
特定のルックアップに pdnsd が使用しているサーバー、タイムアウトの仕組み、およびドメインで使用されているデフォルト TTL を確認するには、グローバル設定でデバッグをオンにします。
debug=on;
pdnsd を再起動して、systemd ジャーナルの変更について pdnsd.service を監視します。
journalctl -f _SYSTEMD_UNIT=pdnsd.service
デバッグをオンのままにするとパフォーマンスが低下する可能性があるため、一般的な使用ではデバッグをオフにしてください。
キャッシュ容量
デフォルトでは、 pdnsd は自動的にすべてのエントリの信頼できるレコードを作成します /etc/hosts
. エントリが多数ある場合、たとえば広告のブロックに使用している場合、デフォルトの最大キャッシュサイズは /etc/pdnsd.conf
十分な大きさではない可能性があり、その結果、予想される時間内にDNS要求がキャッシュされません。
キャッシュ容量を増やすには、設定ファイルの global settings セクションの perm_cache
行を編集してください (単位は kB です)。
または、オプション authrec=off
を source セクションに追加することにより、 pdnsd が hosts ファイルを先制的に調達するのを防ぐことができます。何らかの理由で authrec を off に設定しても機能しない場合、簡単な回避策は、システム情報のみを含む別のホストファイル /etc/hosts-pdnsd など
を作成し、代わりに source セクションをポイントすることです元のホストファイルをそのまま残します。この方法で、 pdnsd は検索を実行するときにのみ /etc/hosts
を参照します。たとえば、次のとおりです。
/etc/hosts-pdnsd
#<ip-address> <hostname.domain.org> <hostname> 127.0.0.1 localhost.localdomain my_hostname ::1 localhost.localdomain localhost
共有サーバー
ネットワーク上に複数のコンピュータが存在する場合、全てのコンピュータで pdnsd を DNS サーバーとして使うことができます。ひとつの DNS キャッシュをネットワーク全体で共有することで、ルックアップの速度がもっと高速になります。他のコンピュータから使用できるようにするには、global
セクションの server_ip
をネットワークインターフェイスの名前 (例: eth0
) に設定してください。ファイアウォールを使っている場合、ネットワーク上のアドレスからのポート 53 への接続を許可するようにしてください。
これで、ネットワーク上の他のコンピューターを構成して、PDNを実行しているコンピューターをプライマリDNSサーバーとして使用できます。
名前でブロック
pdnsdを使用すると、結果を返してはならないホストまたはドメインを指定できます。これにより、特にプリミティブ広告またはコンテンツブロッカーとして使用できます。 pdnsd.conf
に新しい neg
セクションを作成します。否定セクションには2つの主要なオプションがあります。 name
は、ブロックするホストまたはドメインの名前です。 types
を domain
に設定して、特定のドメイン内のすべてのホストをブロックできます。デフォルトの pdnsd.conf
は、doubleclick.netからのすべての広告をブロックする例を示しています。
ブロックごとに1つのドメインしか設定できないので、追加、トラッカー、悪意のあるコンテンツをブロックするためにはうまくスケールしません。しかし、source
セクションを追加することは可能です (既存の /etc/hosts
を読み込むものに加えて) このセクションは、ドメインを特別な IP アドレス 0.0.0.0 にバインドする形式 – ただし、/etc/hosts
ではワイルドカードが許可されていないため、サブドメインはブロックされません。これを行うことは、ルールを /etc/hosts
に追加することと同じですが、一部のアプリケーションを破壊する可能性のある巨大な /etc/hosts
ファイルをを避けることができます。
pdnsd-ctl
pdnsd-ctl(8) man ページより:
- pdnsd-ctl は永続的なキャッシュを使う DNS プロキシサーバーである pdnsd を制御します。pdnsd-ctl を使う前に (pdnsd のコマンドラインや設定ファイルでオプションを指定して) ステータス制御ソケットを有効にする必要があるので注意してください。
これを行うには、オプションを含めます
status_ctl = on;
/etc/pdnsd.conf
のグローバルセクションにあります。
/etc/pdnsd.conf
でキャッシュディレクトリを変更した場合は、-c
オプションを指定して pdnsd-ctl
を実行する必要があります。
# pdnsd-ctl -c path/to/cache
以下のようなコマンドが使えます。
キャッシュを表示:
# pdnsd-ctl dump
キャッシュを消去:
# pdnsd-ctl empty-cache
DNSCrypt
pdnsd は DNSCrypt と一緒に使うことができます。DNSCrypt はドメイン名のルックアップを暗号化します。必要になったときに pdnsd は DNSCrypt を呼び出します。設定例は DNSCrypt#pdnsd にあります。
トラブルシューティング
result of uptest for 192.168.x.x: failed
ログに次のように表示されていても、ISPの dynamic DNS に正常にpingを送信できます。
$ journalctl -f -u pdnsd.service
result of uptest for 192.168.x.x: failed
/etc/pdnsd.conf
のグローバルセクションに設定されているインターフェイスが存在することを確認します。
interface = any;
もしくはサーバーセクションにあるもの。
interface=enp2s0;
正しい名前は、ifconfig
を実行して見つけることができます。
FAQ
- Q) あんまり速くありません。なぜ?
- A) ローカル DNS キャッシュを使うことによる速度の向上はサーバーに接続するまでにかかる時間によります。スループット (いわゆる速度) に影響はありません。複数のサーバーから小さなダウンロードを行う、ウェブの閲覧などで違いは最も明白になります。接続速度が遅い、特にダイアルアップ接続などでは、スループットがボトルネックになるため、目で見てわかるほどの違いは生まれません。
- Q) 前より遅くなっているんですが?
- A) おそらく
pdnsd.conf
のサーバーセクションのどれかでproxy_only
オプションがオフになっています。デフォルトで、pdnsd はできる限り正確なレスポンスを得るために複数の DNS サーバーに頻繁にリクエストを行います。proxy_only
オプションはこの機能を無効化します。ISP によって提供されている DNS サーバーを使っている場合はオンにしたほうが良いでしょう。