「Unbound」の版間の差分
(同期) |
|||
2行目: | 2行目: | ||
[[en:Unbound]] |
[[en:Unbound]] |
||
[[zh-cn:Unbound]] |
[[zh-cn:Unbound]] |
||
+ | {{Related articles start}} |
||
+ | {{Related4|DNSSEC}} |
||
+ | {{Related|BIND}} |
||
+ | {{Related|DNSCrypt}} |
||
+ | {{Related|dnsmasq}} |
||
+ | {{Related|Pdnsd}} |
||
+ | {{Related articles end}} |
||
[https://unbound.net/ Unbound] は検証をおこなったり再帰・キャッシュをする DNS リゾルバです。 |
[https://unbound.net/ Unbound] は検証をおこなったり再帰・キャッシュをする DNS リゾルバです。 |
||
8行目: | 15行目: | ||
[[公式リポジトリ]]から {{Pkg|unbound}} パッケージをインストールしてください。 |
[[公式リポジトリ]]から {{Pkg|unbound}} パッケージをインストールしてください。 |
||
− | さらに、[[en2:DNSSEC|DNSSEC]] 検証をするには {{Pkg|expat}} が必要です。 |
+ | さらに、[[en2:DNSSEC|DNSSEC]] 検証をするには {{Pkg|expat}} パッケージが必要です。 |
== 設定 == |
== 設定 == |
||
− | + | デフォルト設定は {{ic|/etc/unbound/unbound.conf}} に含まれています。さらに、他のオプションが使われているサンプル設定ファイルが {{ic|/etc/unbound/unbound.conf.example}} に存在します。以下のセクションでは様々な設定を説明します。詳しい設定は {{ic|man unbound.conf}} を見てください。 |
|
+ | |||
+ | 特に指定しない場合、以下のセクションで説明しているオプションは設定ファイルの {{ic|server}} セクションの下に記述してください: |
||
+ | |||
+ | {{hc|/etc/unbound/unbound.conf| |
||
+ | server: |
||
+ | ... |
||
+ | ''setting'': ''value'' |
||
+ | ... |
||
+ | }} |
||
=== アクセス制御 === |
=== アクセス制御 === |
||
32行目: | 48行目: | ||
access-control: 192.168.1.0/24 allow |
access-control: 192.168.1.0/24 allow |
||
− | ''action'' は {{ic|deny}} ( |
+ | ''action'' に指定できるのは {{ic|deny}} (メッセージを破棄), {{ic|refuse}} (エラー応答), {{ic|allow}} (再帰を許可), {{ic|allow_snoop}} (再帰と非再帰を許可) です。デフォルトでは、ローカルホスト以外の全てが拒否されます。 |
=== ルートヒント === |
=== ルートヒント === |
||
− | アドレスがキャッシュされていないホストを問い合わせられた場合、リゾルバはサーバーツリーの一番上からルートサーバーに問い合わせて、アドレスを問い合わせることができるトップレベルドメインの場所を知る必要があります。し |
+ | アドレスがキャッシュされていないホストを問い合わせられた場合、リゾルバはサーバーツリーの一番上からルートサーバーに問い合わせて、アドレスを問い合わせることができるトップレベルドメインの場所を知る必要があります。Unbound にはデフォルトで hints が付属していますが、古くなっている可能性があるのでルートヒントファイルを使用することを推奨します。 |
+ | ''unbound'' に {{ic|root.hints}} ファイルを指定: |
||
− | {{bc|<nowiki># curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache</nowiki>}} |
||
− | |||
− | ルートサーバーのリストを最新にするために、上記のコマンドは6ヶ月ごとに実行すると良いでしょう。手動で実行してもかまいませんが、[[cron]] ジョブでタスクを設定する方法もあります。 |
||
− | |||
− | ''unbound'' から {{ic|root.hints}} ファイルの場所を設定してください: |
||
root-hints: "/etc/unbound/root.hints" |
root-hints: "/etc/unbound/root.hints" |
||
+ | それからルートヒントファイルを ''unbound'' の設定ディレクトリに配置してください。以下のコマンドを実行するだけで配置できます: |
||
− | === ローカル DNS サーバーを使うように /etc/resolv.conf を設定 === |
||
+ | {{bc|<nowiki># curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache</nowiki>}} |
||
− | {{ic|/etc/resolv.conf}} を編集 ([[resolv.conf]] を見て下さい): |
||
− | |||
− | nameserver 127.0.0.1 |
||
− | |||
− | また、完全修飾ドメイン名ではなくローカルマシンのホスト名を使いたい場合、ローカルドメインを以下のように追加してください: |
||
− | |||
− | domain localdomain.com |
||
− | nameserver 127.0.0.1 |
||
+ | ルートサーバーのリストを最新に保つために {{ic|root.hints}} は6ヶ月ごとに更新すると良いでしょう。手動で実行してもよいですし、[[Systemd/タイマー]]を使う方法もあります。タイマーを使う場合は[[#ルートヒント systemd タイマー]]を参照。 |
||
− | 上記の設定で ssh コマンドを使うときに mainmachine1.localdomain.com などのローカルホストをシンプルに mainmachine1 で指定することができます。ただし drill コマンドはルックアップをするために完全修飾ドメイン名が必要になります。 |
||
+ | === ローカル DNS サーバー === |
||
− | デフォルトにする前に {{Pkg|ldns}} パッケージの drill コマンドを使うことでサーバーのテストが出来ます。以下はアドレスの内外転送と逆引きをする例です: |
||
+ | ローカル DNS サーバーとして ''unbound'' を使いたい場合、[[resolv.conf]] でネームサーバーを {{ic|127.0.0.1}} に設定してください。ネームサーバーの設定が[[Resolv.conf#DNS 設定の保護|変更されないように設定]]する必要があります。 |
||
− | $ drill @127.0.0.1 www.cnn.com |
||
− | $ drill @127.0.0.1 localmachine.localdomain.com |
||
− | $ drill @127.0.0.1 -x w.x.y.z |
||
+ | {{Tip|1={{pkg|openresolv}} パッケージをインストールして {{ic|/etc/resolvconf.conf}} の {{ic|1=name_servers=127.0.0.1}} 行をアンコメントして {{ic|resolvconf -u}} を実行することで {{ic|/etc/resolv.conf}} を生成できます。}} |
||
− | {{ic|w.x.y.z}} はローカルあるいは外部の IP アドレスに置き換えて {{ic|-x}} オプションで逆引きを行います。全てが問題ないようでしたら、{{ic|/etc/resolv.conf}} でネームサーバーに {{ic|127.0.0.1}} を使うように設定すれば ''drill'' コマンドに {{ic|@127.0.0.1}} を指定する必要はなくなります。デフォルトの DNS サーバーを使ってもう一度テストを行うことができます。各コマンドの出力の下部に表示される、使用サーバーが {{ic|127.0.0.1}} に問い合わせていることを確認してください。 |
||
+ | 設定のテスト方法については [[Resolv.conf#Linux における DNS]] を読んでください。 |
||
− | === ログ出力 === |
||
+ | [[resolv.conf]] に変更を加えた後に {{ic|127.0.0.1}} が使用されていることを確認してください。 |
||
− | ''unbound'' のログを記録したい場合、ログファイルを作成してください。同一ディレクトリでもかまいませんし、別の場所を選択することも可能です。root で以下を実行すれば作成できます: |
||
+ | === DNSSEC 検証 === |
||
− | # touch /etc/unbound/unbound.log |
||
− | # chown unbound:unbound /etc/unbound/unbound.log |
||
+ | ''unbound'' は自動的にルートサーバーの信頼鍵アンカーファイルを {{ic|/etc/trusted-key.key}} から {{ic|/etc/unbound/trusted-key.key}} にコピーします。DNSSEC 検証を使用するには以下の文字列を追加して ''unbound'' にファイルを指定してください: |
||
− | そしてメインの {{ic|unbound.conf}} ファイルを設定するときに logging パラメータを記述してください。 |
||
+ | trust-anchor-file: trusted-key.key |
||
+ | DNS サーバーへの[[#クエリの転送|転送]]を設定した場合、上記をコメントアウトしてください。そうしないと、DNS クエリが失敗するようになります。DNS サーバーが対応している場合にのみ DNSSEC 検証が行われるようになります。 |
||
− | === DNSSEC 検証 === |
||
+ | {{Note|DNSSEC のチェックを有効にすると最初のルックアップ時の DNS 問い合わせ時間が長くなります。アドレスがローカルにキャッシュされたら、瞬時に解決されます。}} |
||
− | ルートサーバーのトラストアンカーキーファイルが必要になります。ファイルは (依存パッケージとしてインストールされる) {{Pkg|dnssec-anchors}} パッケージに含まれていますが、''unbound'' からファイルに読み書きできるようにしなくてはなりません。{{ic|unbound.service}} サービスが {{ic|/etc/trusted-key.key}} ファイルを {{ic|/etc/unbound/trusted-key.key}} にコピーすることで ''unbound'' からアクセスできるようにします。コピーしたファイルを使うように ''unbound'' を設定してください: |
||
− | {{hc|/etc/unbound/unbound.conf| |
||
− | server: |
||
− | ... |
||
− | trust-anchor-file: trusted-key.key |
||
− | ... |
||
− | }} |
||
+ | DNSSEC が機能しているか確認するには ''drill'' を使用: |
||
− | Also make sure that if a general [[#Forwarding queries|forward]] to the Google servers had been in place, then comment them out otherwise DNS queries will fail. DNSSEC validation will be done if the DNS server being queried supports it. |
||
+ | $ drill sigfail.verteiltesysteme.net |
||
− | {{Note|DNSSEC の確認を追加すると最初の DNS ルックアップ時にかかる時間が大幅に増えます。アドレスがローカルにキャッシュされれば、ルックアップは瞬間的になされるようになります。}} |
||
+ | $ drill sigok.verteiltesysteme.net |
||
+ | 最初のコマンドの {{ic|rcode}} が {{ic|SERVFAIL}} に、2番目のコマンドの {{ic|rcode}} が {{ic|NOERROR}} になっていれば問題ありません。 |
||
− | {{Pkg|ldns}} (依存パッケージとしてインストールされます) の ''drill'' を使って DNSSEC が機能しているかテストできます: |
||
+ | === クエリの転送 === |
||
− | drill sigfail.verteiltesysteme.net # should return rcode: SERVFAIL |
||
− | drill sigok.verteiltesysteme.net # should return rcode: NOERROR |
||
+ | {{Tip|転送を設定することで Unbound から [[DNSCrypt]] を使うことができます。[[DNSCrypt#例: Unbound の設定]]を参照。}} |
||
− | === クエリの転送 === |
||
+ | DNS クエリを送りたいローカルネットワークに DNS サーバーが存在しクエリを転送したい場合、以下の行を記述してください: |
||
− | If you have a local network which you wish to have DNS queries for and there is a local DNS server that you would like to forward queries to then you should include this line: |
||
private-address: ''local_subnet/subnet_mask'' |
private-address: ''local_subnet/subnet_mask'' |
||
105行目: | 102行目: | ||
private-address: 10.0.0.0/24 |
private-address: 10.0.0.0/24 |
||
− | {{ |
+ | {{Note|プライベートアドレスを使うことで DNS Rebind 攻撃から身を守ることができます。RFC1918 ネットワーク (10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 169.254.0.0/16 fd00::/8 fe80::/10) を有効にすることができます。Unbound はデフォルトでは機能を有効にしません。}} |
+ | ローカルアドレスの正引き・逆引きの両方でローカル DNS サーバーを使うには、正引きと逆引きのそれぞれで以下のような行を設定する必要があります (下の例で使用している 10.0.0.1 は DNS 機能を提供するサーバーの IP アドレスに置き換えてください): |
||
− | To include a local DNS server for both forward and reverse local addresses a set of lines similar to these below is necessary with a forward and reverse lookup (choose the IP address of the server providing DNS for the local network accordingly by changing 10.0.0.1 in the lines below): |
||
local-zone: "10.in-addr.arpa." transparent |
local-zone: "10.in-addr.arpa." transparent |
||
+ | 上記の行は逆引きを正しく動作させるために必要です。 |
||
− | This line above is important to get the reverse lookup to work correctly. |
||
forward-zone: |
forward-zone: |
||
name: "mynetwork.com." |
name: "mynetwork.com." |
||
− | forward-addr: 10.0.0.1 |
+ | forward-addr: 10.0.0.1 |
forward-zone: |
forward-zone: |
||
123行目: | 120行目: | ||
{{Note|There is a difference between forward zones and stub zones - stub zones will only work when connected to an authoritative DNS server directly. This would work for lookups from a [[BIND]] DNS server if it is providing authoritative DNS - but if you are referring queries to an ''unbound'' server in which internal lookups are forwarded on to another DNS server, then defining the referral as a stub zone in the machine here will not work. In that case it is necessary to define a forward zone as above, since forward zones can have daisy chain lookups onward to other DNS servers. i.e. forward zones can refer queries to recursive DNS servers. This distinction is important as you do not get any error messages indicating what the problem is if you use a stub zone inappropriately.}} |
{{Note|There is a difference between forward zones and stub zones - stub zones will only work when connected to an authoritative DNS server directly. This would work for lookups from a [[BIND]] DNS server if it is providing authoritative DNS - but if you are referring queries to an ''unbound'' server in which internal lookups are forwarded on to another DNS server, then defining the referral as a stub zone in the machine here will not work. In that case it is necessary to define a forward zone as above, since forward zones can have daisy chain lookups onward to other DNS servers. i.e. forward zones can refer queries to recursive DNS servers. This distinction is important as you do not get any error messages indicating what the problem is if you use a stub zone inappropriately.}} |
||
+ | 以下のようにすることでローカルホストの正引き・逆引きを設定できます: |
||
− | You can set up the localhost forward and reverse lookups with the following lines: |
||
local-zone: "localhost." static |
local-zone: "localhost." static |
||
134行目: | 131行目: | ||
local-data: "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost." |
local-data: "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost." |
||
+ | デフォルトの正引きゾーンで、ローカルマシンやローカルネットワークの外側のサーバーを使用するには、設定ファイルに以下を追加 (例として Google と OpenDNS の DNS サーバーを指定しています): |
||
− | Then to use specific servers for default forward zones that are outside of the local machine and outside of the local network (i.e. all other queries will be forwarded to them, and then cached) add this to the configuration file (and in this example the first two addresses are the fast google DNS servers): |
||
forward-zone: |
forward-zone: |
||
143行目: | 140行目: | ||
forward-addr: 208.67.220.220 |
forward-addr: 208.67.220.220 |
||
+ | 上記の設定で ''unbound'' は外部ルックアップの正引きゾーンで Google と OpenDNS サーバーを使用します。 |
||
− | This will make ''unbound'' use Google and OpenDNS servers as the forward zone for external lookups. |
||
+ | {{Note|OpenDNS はレスポンスから DNSSEC レコードを省略するため、[[#DNSSEC 検証|DNSSEC 検証]]を有効にする場合は上記の設定は使わないでください。}} |
||
− | {{Note|OpenDNS strips DNSSEC records from responses. Do not use the above forward zone if you want to enable [[#DNSSEC validation]].}} |
||
== 使用方法 == |
== 使用方法 == |
||
151行目: | 148行目: | ||
=== Unbound の起動 === |
=== Unbound の起動 === |
||
− | + | {{ic|unbound.service}} を[[起動]]・[[有効化]]してください。 |
|
=== Unbound の遠隔操作 === |
=== Unbound の遠隔操作 === |
||
198行目: | 195行目: | ||
* 再設定しないで統計を出力 |
* 再設定しないで統計を出力 |
||
− | + | # unbound-control stats_noreset |
|
* キャッシュを標準出力にダンプ |
* キャッシュを標準出力にダンプ |
||
− | + | # unbound-control dump_cache |
|
* キャッシュを消去して設定をリロード |
* キャッシュを消去して設定をリロード |
||
− | + | # unbound-control reload |
|
詳しくは {{ic|man 8 unbound-control}} を参照してください。 |
詳しくは {{ic|man 8 unbound-control}} を参照してください。 |
||
+ | == Tips and tricks == |
||
− | == Adding an authoritative DNS server == |
||
+ | |||
+ | === ブロック通知 === |
||
+ | [https://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&startdate%5Bday%5D=&startdate%5Bmonth%5D=&startdate%5Byear%5D=&mimetype=plaintext adservers] ファイルを作成して以下の設定を Unbound に追加してください: |
||
+ | {{hc|/etc/unbound/unbound.conf| |
||
+ | ... |
||
+ | include: /etc/unbound/adservers |
||
+ | }} |
||
+ | |||
+ | {{Note|In order to return some OK statuses on those hosts, you can change the 127.0.0.1 redirection to a server you control and have that server respond with empty 204 replies, see [http://www.shadowandy.net/2014/04/adblocking-nginx-serving-1-pixel-gif-204-content.htm this page]}} |
||
+ | |||
+ | === 権威 DNS サーバーの追加 === |
||
+ | |||
+ | 検証・再帰・キャッシュ DNS サーバーと権威 DNS サーバーを同じマシンで動作させたい場合、[[NSD]] のページを参照してください。全ての機能を提供する DNS サーバーを動作させるより、権威サーバーとキャッシュサーバーを分けることでセキュリティを向上させることができます。[[NSD]] のページには BIND から移行する際に役立つ情報を載せています。 |
||
+ | |||
+ | === WAN と DNS === |
||
+ | |||
+ | listen しているサーバーの設定ファイルやインターフェイスを変更することで、ローカルネットワーク外のマシンからのクエリから LAN 内の特定のマシンにアクセスできるように設定できます。どこからでもアクセスできるようにするウェブサーバーやメールサーバーなどで有用です。 |
||
+ | |||
+ | === ルートヒント systemd タイマー === |
||
+ | |||
+ | 以下は[[#ルートヒント]]に書かれている方法で {{ic|root.hints}} を1ヶ月ごとに更新する systemd サービスとタイマーの例です: |
||
+ | |||
+ | {{hc|1=/etc/systemd/system/roothints.service|2= |
||
+ | [Unit] |
||
+ | Description=Update root hints for unbound |
||
+ | After=network.target |
||
+ | |||
+ | [Service] |
||
+ | ExecStart=/usr/bin/curl -o /etc/unbound/root.hints <nowiki>https://www.internic.net/domain/named.cache</nowiki> |
||
+ | }} |
||
+ | {{hc|1=/etc/systemd/system/roothints.timer|2= |
||
− | For users who wish to run both a validating, recursive, caching DNS server as well as an authoritative DNS server on a single machine then it may be useful to refer to the wiki page [[en2:nsd|nsd]] which gives an example of a configuration for such a system. Having one server for authoritative DNS queries and a separate DNS server for the validating, recursive, caching DNS functions gives increased security over a single DNS server providing all of these functions. Many users have used bind as a single DNS server, and some help on migration from bind to the combination of running nsd and bind is provided in the [[en2:nsd|nsd]] wiki page. |
||
+ | [Unit] |
||
+ | Description=Run root.hints monthly |
||
+ | [Timer] |
||
− | == WAN と DNS == |
||
+ | OnCalendar=monthly |
||
+ | Persistent=true |
||
+ | |||
+ | [Install] |
||
+ | WantedBy=timers.target}} |
||
+ | {{ic|roothints.timer}} systemd タイマーを[[起動]]・[[有効化]]してください。 |
||
− | It is also possible to change the configuration files and interfaces on which the server is listening so that DNS queries from machines outside of the local network can access specific machines within the LAN. This is useful for web and mail servers which are accessible from anywhere, and the same techniques can be employed as has been achieved using bind for many years, in combination with suitable port forwarding on firewall machines to forward incoming requests to the right machine. |
||
+ | == トラブルシューティング == |
||
− | == num-threads の問題 == |
||
+ | === num-threads の問題 === |
||
− | The man page for {{ic|unbound.conf}} mentions: |
||
+ | {{ic|unbound.conf}} の man ページより: |
||
− | outgoing-range: <number> |
||
− | Number of ports to open. This number of file descriptors can be opened per thread. |
||
+ | outgoing-range: <number> |
||
− | and some sources suggest that the {{ic|num-threads}} parameter should be set to the number of cpu cores. The sample {{ic|unbound.conf.example}} file merely has: |
||
+ | Number of ports to open. This number of file descriptors can be opened per thread. |
||
+ | 一部のウェブサイトでは {{ic|num-threads}} は CPU コアの数に設定するように推奨しています。{{ic|unbound.conf.example}} サンプルファイルの記述: |
||
− | # number of threads to create. 1 disables threading. |
||
− | # num-threads: 1 |
||
+ | # number of threads to create. 1 disables threading. |
||
− | However it is not possible to arbitrarily increase {{ic|num-threads}} above {{ic|1}} without causing ''unbound'' to start with warnings in the logs about exceeding the number of file descriptors. In reality for most users running on small networks or on a single machine it should be unnecessary to seek performance enhancement by increasing {{ic|num-threads}} above {{ic|1}}. If you do wish to do so then refer to [http://www.unbound.net/documentation/howto_optimise.html official documentation] and the following rule of thumb should work: |
||
+ | # num-threads: 1 |
||
+ | ただし {{ic|num-threads}} を {{ic|1}} より大きな値に設定すると ''unbound'' を起動したときにログにファイル記述子の数が多すぎるという警告が吐かれます。小規模なネットワークで Unbound を使っている場合、{{ic|num-threads}} を {{ic|1}} より大きな値に設定して性能をあげようとしても無駄です。設定したい場合は [http://www.unbound.net/documentation/howto_optimise.html 公式ドキュメント] を参照してください。 |
||
− | :''Set {{ic|num-threads}} equal to the number of CPU cores on the system. E.g. for 4 CPUs with 2 cores each, use 8.'' |
||
Set the {{ic|outgoing-range}} to as large a value as possible, see the sections in the referred web page above on how to overcome the limit of {{ic|1024}} in total. This services more clients at a time. With 1 core, try {{ic|950}}. With 2 cores, try {{ic|450}}. With 4 cores try {{ic|200}}. The {{ic|num-queries-per-thread}} is best set at half the number of the {{ic|outgoing-range}}. |
Set the {{ic|outgoing-range}} to as large a value as possible, see the sections in the referred web page above on how to overcome the limit of {{ic|1024}} in total. This services more clients at a time. With 1 core, try {{ic|950}}. With 2 cores, try {{ic|450}}. With 4 cores try {{ic|200}}. The {{ic|num-queries-per-thread}} is best set at half the number of the {{ic|outgoing-range}}. |
||
238行目: | 272行目: | ||
== 参照 == |
== 参照 == |
||
+ | * [https://fedoraproject.org/wiki/Changes/Default_Local_DNS_Resolver Fedora change to Unbound] |
||
* [https://github.com/jodrell/unbound-block-hosts/ Block hosts that contain advertisements] |
* [https://github.com/jodrell/unbound-block-hosts/ Block hosts that contain advertisements] |
2017年1月8日 (日) 15:07時点における版
Unbound は検証をおこなったり再帰・キャッシュをする DNS リゾルバです。
目次
インストール
公式リポジトリから unbound パッケージをインストールしてください。
さらに、DNSSEC 検証をするには expat パッケージが必要です。
設定
デフォルト設定は /etc/unbound/unbound.conf
に含まれています。さらに、他のオプションが使われているサンプル設定ファイルが /etc/unbound/unbound.conf.example
に存在します。以下のセクションでは様々な設定を説明します。詳しい設定は man unbound.conf
を見てください。
特に指定しない場合、以下のセクションで説明しているオプションは設定ファイルの server
セクションの下に記述してください:
/etc/unbound/unbound.conf
server: ... setting: value ...
アクセス制御
IP アドレスによってクエリに応答するインターフェイスを指定できます。localhost で listen するには、以下を使用:
interface: 127.0.0.1
全てのインターフェイスで listen するには、以下を使用:
interface: 0.0.0.0
access-control
オプションを使うことでさらに細かくアクセスを設定できます:
access-control: subnet action
例:
access-control: 192.168.1.0/24 allow
action に指定できるのは deny
(メッセージを破棄), refuse
(エラー応答), allow
(再帰を許可), allow_snoop
(再帰と非再帰を許可) です。デフォルトでは、ローカルホスト以外の全てが拒否されます。
ルートヒント
アドレスがキャッシュされていないホストを問い合わせられた場合、リゾルバはサーバーツリーの一番上からルートサーバーに問い合わせて、アドレスを問い合わせることができるトップレベルドメインの場所を知る必要があります。Unbound にはデフォルトで hints が付属していますが、古くなっている可能性があるのでルートヒントファイルを使用することを推奨します。
unbound に root.hints
ファイルを指定:
root-hints: "/etc/unbound/root.hints"
それからルートヒントファイルを unbound の設定ディレクトリに配置してください。以下のコマンドを実行するだけで配置できます:
# curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache
ルートサーバーのリストを最新に保つために root.hints
は6ヶ月ごとに更新すると良いでしょう。手動で実行してもよいですし、Systemd/タイマーを使う方法もあります。タイマーを使う場合は#ルートヒント systemd タイマーを参照。
ローカル DNS サーバー
ローカル DNS サーバーとして unbound を使いたい場合、resolv.conf でネームサーバーを 127.0.0.1
に設定してください。ネームサーバーの設定が変更されないように設定する必要があります。
設定のテスト方法については Resolv.conf#Linux における DNS を読んでください。
resolv.conf に変更を加えた後に 127.0.0.1
が使用されていることを確認してください。
DNSSEC 検証
unbound は自動的にルートサーバーの信頼鍵アンカーファイルを /etc/trusted-key.key
から /etc/unbound/trusted-key.key
にコピーします。DNSSEC 検証を使用するには以下の文字列を追加して unbound にファイルを指定してください:
trust-anchor-file: trusted-key.key
DNS サーバーへの転送を設定した場合、上記をコメントアウトしてください。そうしないと、DNS クエリが失敗するようになります。DNS サーバーが対応している場合にのみ DNSSEC 検証が行われるようになります。
DNSSEC が機能しているか確認するには drill を使用:
$ drill sigfail.verteiltesysteme.net $ drill sigok.verteiltesysteme.net
最初のコマンドの rcode
が SERVFAIL
に、2番目のコマンドの rcode
が NOERROR
になっていれば問題ありません。
クエリの転送
DNS クエリを送りたいローカルネットワークに DNS サーバーが存在しクエリを転送したい場合、以下の行を記述してください:
private-address: local_subnet/subnet_mask
例:
private-address: 10.0.0.0/24
ローカルアドレスの正引き・逆引きの両方でローカル DNS サーバーを使うには、正引きと逆引きのそれぞれで以下のような行を設定する必要があります (下の例で使用している 10.0.0.1 は DNS 機能を提供するサーバーの IP アドレスに置き換えてください):
local-zone: "10.in-addr.arpa." transparent
上記の行は逆引きを正しく動作させるために必要です。
forward-zone: name: "mynetwork.com." forward-addr: 10.0.0.1
forward-zone: name: "10.in-addr.arpa." forward-addr: 10.0.0.1
以下のようにすることでローカルホストの正引き・逆引きを設定できます:
local-zone: "localhost." static local-data: "localhost. 10800 IN NS localhost." local-data: "localhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" local-data: "localhost. 10800 IN A 127.0.0.1" local-zone: "127.in-addr.arpa." static local-data: "127.in-addr.arpa. 10800 IN NS localhost." local-data: "127.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 2 3600 1200 604800 10800" local-data: "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost."
デフォルトの正引きゾーンで、ローカルマシンやローカルネットワークの外側のサーバーを使用するには、設定ファイルに以下を追加 (例として Google と OpenDNS の DNS サーバーを指定しています):
forward-zone: name: "." forward-addr: 8.8.8.8 forward-addr: 8.8.4.4 forward-addr: 208.67.222.222 forward-addr: 208.67.220.220
上記の設定で unbound は外部ルックアップの正引きゾーンで Google と OpenDNS サーバーを使用します。
使用方法
Unbound の起動
unbound.service
を起動・有効化してください。
Unbound の遠隔操作
unbound には unbound-control
ユーティリティが付いており、リモートの unbound サーバーを管理することができます。pdnsd の pdnsd-ctl コマンドに似ています。
unbound-control の設定
使用する前に、以下の設定が必要です:
1) まず、以下のコマンドを実行してください:
# unbound-control-setup
自己署名証明書とサーバーとクライアントの秘密鍵が生成されます。これらのファイルは /etc/unbound
ディレクトリに保存されます。
2) その後、/etc/unbound/unbound.conf
を編集して以下の内容を記述してください。control-enable: yes
オプションは必須ですが、他のオプションは必要に応じて変更できます。
remote-control: # Enable remote control with unbound-control(8) here. # set up the keys and certificates with unbound-control-setup. control-enable: yes # what interfaces are listened to for remote control. # give 0.0.0.0 and ::0 to listen to all interfaces. control-interface: 127.0.0.1 # port number for remote control operations. control-port: 8953 # unbound server key file. server-key-file: "/etc/unbound/unbound_server.key" # unbound server certificate file. server-cert-file: "/etc/unbound/unbound_server.pem" # unbound-control key file. control-key-file: "/etc/unbound/unbound_control.key" # unbound-control certificate file. control-cert-file: "/etc/unbound/unbound_control.pem"
unbound-control を使う
unbound-control で使用できるコマンドの例:
- 再設定しないで統計を出力
# unbound-control stats_noreset
- キャッシュを標準出力にダンプ
# unbound-control dump_cache
- キャッシュを消去して設定をリロード
# unbound-control reload
詳しくは man 8 unbound-control
を参照してください。
Tips and tricks
ブロック通知
adservers ファイルを作成して以下の設定を Unbound に追加してください:
/etc/unbound/unbound.conf
... include: /etc/unbound/adservers
権威 DNS サーバーの追加
検証・再帰・キャッシュ DNS サーバーと権威 DNS サーバーを同じマシンで動作させたい場合、NSD のページを参照してください。全ての機能を提供する DNS サーバーを動作させるより、権威サーバーとキャッシュサーバーを分けることでセキュリティを向上させることができます。NSD のページには BIND から移行する際に役立つ情報を載せています。
WAN と DNS
listen しているサーバーの設定ファイルやインターフェイスを変更することで、ローカルネットワーク外のマシンからのクエリから LAN 内の特定のマシンにアクセスできるように設定できます。どこからでもアクセスできるようにするウェブサーバーやメールサーバーなどで有用です。
ルートヒント systemd タイマー
以下は#ルートヒントに書かれている方法で root.hints
を1ヶ月ごとに更新する systemd サービスとタイマーの例です:
/etc/systemd/system/roothints.service
[Unit] Description=Update root hints for unbound After=network.target [Service] ExecStart=/usr/bin/curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache
/etc/systemd/system/roothints.timer
[Unit] Description=Run root.hints monthly [Timer] OnCalendar=monthly Persistent=true [Install] WantedBy=timers.target
roothints.timer
systemd タイマーを起動・有効化してください。
トラブルシューティング
num-threads の問題
unbound.conf
の man ページより:
outgoing-range: <number> Number of ports to open. This number of file descriptors can be opened per thread.
一部のウェブサイトでは num-threads
は CPU コアの数に設定するように推奨しています。unbound.conf.example
サンプルファイルの記述:
# number of threads to create. 1 disables threading. # num-threads: 1
ただし num-threads
を 1
より大きな値に設定すると unbound を起動したときにログにファイル記述子の数が多すぎるという警告が吐かれます。小規模なネットワークで Unbound を使っている場合、num-threads
を 1
より大きな値に設定して性能をあげようとしても無駄です。設定したい場合は 公式ドキュメント を参照してください。
Set the outgoing-range
to as large a value as possible, see the sections in the referred web page above on how to overcome the limit of 1024
in total. This services more clients at a time. With 1 core, try 950
. With 2 cores, try 450
. With 4 cores try 200
. The num-queries-per-thread
is best set at half the number of the outgoing-range
.
Because of the limit on outgoing-range
thus also limits num-queries-per-thread
, it is better to compile with libevent, so that there is no 1024
limit on outgoing-range
. If you need to compile this way for a heavy duty DNS server then you will need to compile the programme from source instead of using the unbound package.