「Dnsmasq」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (校正) |
Kusanaginoturugi (トーク | 投稿記録) |
||
(他の1人の利用者による、間の7版が非表示) | |||
1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
− | [[Category: |
+ | [[Category:ドメインネームシステム]] |
+ | [[de:Dnsmasq]] |
||
[[en:Dnsmasq]] |
[[en:Dnsmasq]] |
||
[[es:Dnsmasq]] |
[[es:Dnsmasq]] |
||
− | [[it:Dnsmasq]] |
||
[[pt:Dnsmasq]] |
[[pt:Dnsmasq]] |
||
− | [[ru:Dnsmasq]] |
||
[[zh-hans:Dnsmasq]] |
[[zh-hans:Dnsmasq]] |
||
{{Lowercase_title}} |
{{Lowercase_title}} |
||
+ | dnsmasq は、[[Wikipedia:ja:DNSサーバ|DNS サーバー]]、[[Wikipedia:ja:DHCPv6|DHCPv6]] と [[Wikipedia:ja:Preboot Execution Environment|PXE]] をサポートする [[Wikipedia:ja:Dynamic Host Configuration Protocol|DHCP サーバー]] および [[Wikipedia:ja:Trivial File Transfer Protocol|TFTP サーバー]] を提供します。また、dnsmasq は DNS クエリをキャッシュし、過去に訪問したことのあるサイトへの DNS 検索速度を向上させるように設定することができます。 |
||
− | |||
− | [http://www.thekelleys.org.uk/dnsmasq/doc.html dnsmasq] は DNS キャッシュと DHCP サーバーとしてのサービスを提供します。ドメインネームサーバ (DNS) としては DNS クエリをキャッシュすることで以前に訪れたことのあるサイトへの接続速度を向上させることができ、DHCP サーバーとして dnsmasq は LAN 上のコンピュータに内部 IP アドレスとルートを割り当てるのに使えます。サービスのどちらか、または両方として役立てることが可能です。dnsmasq は軽量で設定が簡単です。個人のコンピュータでの利用や、50以下のコンピュータが繋がったネットワークでの使用を想定して作られています。また、[[PXE]] サーバーも含まれています。 |
||
== インストール == |
== インストール == |
||
− | + | {{Pkg|dnsmasq}} パッケージを [[インストール]] します。次に、{{ic|dnsmasq.service}} を [[起動/有効化]] します。 |
|
− | |||
− | == デーモンの起動 == |
||
− | |||
− | {{ic|dnsmasq.service}} を [[systemd#ユニットを使う|スタート/有効化]] します。 |
||
− | |||
− | dnsmasq が正常に起動したかどうかは、システムの [[systemd/ジャーナル|ジャーナル]] を確認します。 |
||
− | |||
− | # journalctl -u dnsmasq.service |
||
− | + | DHCP クライアントが新しい {{ic|/etc/resolv.conf}} を作成できるように、ネットワークを再起動する必要があります。 |
|
== 設定 == |
== 設定 == |
||
54行目: | 44行目: | ||
listen-address=::1,127.0.0.1,192.168.1.1 |
listen-address=::1,127.0.0.1,192.168.1.1 |
||
− | キャッシュされるドメイン名の数を {{ic|1=cache-size=''size''}} で設定します |
+ | キャッシュされるドメイン名の数を {{ic|1=cache-size=''size''}} で設定します(デフォルトは {{ic|150}} で、ハードリミットは {{ic|10000}} です。) |
cache-size=1000 |
cache-size=1000 |
||
132行目: | 122行目: | ||
==== テスト ==== |
==== テスト ==== |
||
− | dnsmasq を起動してから一度も訪問していないウェブサイトを選択して、検索速度をテストします |
+ | dnsmasq を起動してから一度も訪問していないウェブサイトを選択して、検索速度をテストします(''drill''は {{Pkg|ldns}}パッケージの一部です) |
$ drill archlinux.org | grep "Query time" |
$ drill archlinux.org | grep "Query time" |
||
251行目: | 241行目: | ||
OpenDNS が全ての Google クエリを OpenDNS の検索サーバーにリダイレクトを止めさせるには、以下を {{ic|/etc/dnsmasq.conf}} に追加してください: |
OpenDNS が全ての Google クエリを OpenDNS の検索サーバーにリダイレクトを止めさせるには、以下を {{ic|/etc/dnsmasq.conf}} に追加してください: |
||
{{bc|1=server=/www.google.com/<ISP DNS IP>}} |
{{bc|1=server=/www.google.com/<ISP DNS IP>}} |
||
− | |||
− | === リースを表示する === |
||
− | {{bc|$ cat /var/lib/misc/dnsmasq.leases}} |
||
=== アドレスの上書き === |
=== アドレスの上書き === |
||
284行目: | 271行目: | ||
=== ドメインのブロックリスト化 === |
=== ドメインのブロックリスト化 === |
||
− | ドメインをブロックリスト化する、つまり NXDOMAIN でドメインに対するクエリに答えるには、IP アドレスを指定せずに {{ic|address}} オプションを使用します |
+ | ドメインをブロックリスト化する、つまり NXDOMAIN でドメインに対するクエリに答えるには、IP アドレスを指定せずに {{ic|address}} オプションを使用します: |
address=/blocked.example/ |
address=/blocked.example/ |
||
address=/anotherblocked.example/ |
address=/anotherblocked.example/ |
||
+ | {{Note|{{ic|/etc/hosts}} ファイルとは異なり、dnsmasq はこれらのドメインと、''subdomain.blocked.example'' などのすべてのサブドメインをブロックします。}} |
||
− | ブロックリストを別のファイル、例えば {{ic|/etc/dnsmasq.d/blocklist.conf}} に置き、 {{ic|1=conf-file=/etc/dnsmasq.d/blocklist.conf}} または {{ic|1=conf-dir=/etc/dnsmasq.d/,*.conf}} でロードすると使い勝手がよいです。 |
||
+ | ワイルドカードもサポートされています。パターンの先頭に {{ic|*}} を追加します: |
||
− | {{Tip|ブロックリストのソース候補のリストは [https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md OpenWrt の adblock パッケージの README] で見ることができます。}} |
||
+ | |||
+ | # blocks both ''blocked.example'' and ''anotherblocked.example'' and all their subdomains |
||
+ | address=/*blocked.example/ |
||
+ | |||
+ | # blocks subdomains like ''mail.google.com'' but not ''google.com'' |
||
+ | address=/*.google.com/ |
||
+ | |||
+ | 一部の特定のサブドメインは、サーバーアドレスとして {{ic|#}} を使用してブロックを解除できます: |
||
+ | |||
+ | # blocks ''google.com'' and all subdomains except ''mail.google.com''. |
||
+ | address=/google.com/ |
||
+ | server=/mail.google.com/# |
||
+ | |||
+ | {{Note| |
||
+ | * オプション {{ic|1=address=/example.com/}} と {{ic|1=server=/example.com/}} は等価です。どちらも NXDOMAIN でクエリに答えます。 |
||
+ | * {{ic|1=address=/example.com/#}} と {{ic|1=server=/example.com/#}} は等価ではありません。 |
||
+ | ** {{ic|1=address=/example.com/#}} は、NULL アドレス (0.0.0.0 または IPv6 の ::) を持つドメインに対するクエリに応答します。 |
||
+ | ** {{ic|1=server=/example.com/#}} は、ドメインに対するクエリを、標準設定されているサーバーに送ります。 |
||
+ | * パターン {{ic|/example.com/}} と {{ic|/.example.com/}} は等価です。どちらも ''example.com'' とそのすべてのサブドメインにマッチします。 |
||
+ | }} |
||
+ | |||
+ | 使いやすいようにブロックリストを別のファイル、例えば {{ic|/etc/dnsmasq.d/blocklist.conf}} に置き、{{ic|/etc/dnsmasq.conf}} から {{ic|1=conf-file=/etc/dnsmasq.d/blocklist.conf}} または {{ic|1=conf-dir=/etc/dnsmasq.d/,*.conf}} でロードします。 |
||
+ | |||
+ | {{Tip| |
||
+ | * [https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md OpenWrt の広告ブロックパッケージの README] にリストがあります。 |
||
+ | * hostsファイルのブロックリストは {{ic|1=addn-hosts=hosts.txt}} オプションで使うこともできますし、以下の awk コマンドで dnsmasq ブロックリストに変換することもできます: {{ic|1=awk '/^[^#]/ { print "address=/"$2"/"$1"" }' hosts.txt}} |
||
+ | }} |
||
== 参照 == |
== 参照 == |
2024年8月15日 (木) 13:38時点における最新版
dnsmasq は、DNS サーバー、DHCPv6 と PXE をサポートする DHCP サーバー および TFTP サーバー を提供します。また、dnsmasq は DNS クエリをキャッシュし、過去に訪問したことのあるサイトへの DNS 検索速度を向上させるように設定することができます。
目次
インストール
dnsmasq パッケージを インストール します。次に、dnsmasq.service
を 起動/有効化 します。
DHCP クライアントが新しい /etc/resolv.conf
を作成できるように、ネットワークを再起動する必要があります。
設定
dnsmasq を設定するには、/etc/dnsmasq.conf
を編集します。 ファイルにはオプションを説明するコメントが含まれています。 利用可能なすべてのオプションについては dnsmasq(8) を参照してください。
DNS サーバー
dnsmasq を1台のコンピュータで DNS キャッシュデーモンとして設定するには、 listen-address
ディレクティブでローカルホストの IP アドレスを追加してください。
listen-address=::1,127.0.0.1
このコンピュータを使用して、ネットワーク上の他のコンピュータの LAN IP アドレスをリッスンします。この場合、静的 LAN IP を使用することをお勧めします。例
listen-address=::1,127.0.0.1,192.168.1.1
キャッシュされるドメイン名の数を cache-size=size
で設定します(デフォルトは 150
で、ハードリミットは 10000
です。)
cache-size=1000
DNSSEC の検証には、dnsmasq パッケージが提供する DNSSEC トラストアンカーを読み込み、オプション dnssec
を設定します。
conf-file=/usr/share/dnsmasq/trust-anchors.conf dnssec
使いたいオプションは dnsmasq(8) を参照してください。
DNS アドレスファイル
dnsmasq を設定した後は、DHCP クライアントが /etc/resolv.conf
にある既知の DNS アドレスの前にローカルホストのアドレスを挿入させるようにする必要があります。これによって外部の DNS でクエリを解決しようとする前に全てのクエリが dnsmasq に送られるようになります。DHCP クライアントを設定した後は変更を適用するためにネットワークを再起動してください。
openresolv
ネットワークマネージャが resolvconf をサポートしていれば、/etc/resolv.conf
を直接変更する代わりに、 openresolv を使って dnsmasq の設定ファイルを生成 することができます。
/etc/resolvconf.conf
を編集し、ループバックアドレスをネームサーバとして追加し、dnsmasq 設定を書き出すように openresolv を設定します。
/etc/resolvconf.conf
# Use the local name server name_servers="::1 127.0.0.1" resolv_conf_options="trust-ad" # Write out dnsmasq extended configuration and resolv files dnsmasq_conf=/etc/dnsmasq-conf.conf dnsmasq_resolv=/etc/dnsmasq-resolv.conf
resolvconf-u
を実行して、設定ファイルを作成します。ファイルが存在しない場合、dnsmasq.service
は起動に失敗します。
dnsmasq の設定ファイルを編集して、openresolv が生成した設定を使用します [1]
# Read configuration generated by openresolv conf-file=/etc/dnsmasq-conf.conf resolv-file=/etc/dnsmasq-resolv.conf
手動転送
まず、/etc/resolv.conf
でネームサーバーとして localhost のアドレスのみを設定する必要があります。
/etc/resolv.conf
nameserver ::1 nameserver 127.0.0.1 options trust-ad
ドメイン名前解決#/etc/resolv.conf の書き込み保護 の説明に従って、/etc/resolv.conf
を上書きから保護していることを確認してください。
その後、dnsmasq の設定ファイルに server=server_address
として上流の DNS サーバのアドレスを指定する必要があります。また、/etc/resolv.conf
を読み込んで、dnsmasq が自分自身のローカルホストのアドレスだけを読み込むことがないように、no-resolv
を追加してください。
/etc/dnsmasq.conf
[...] no-resolv # Google's nameservers, for example server=8.8.8.8 server=8.8.4.4
これでDNSクエリは dnsmasq で解決され、キャッシュからクエリに答えられない場合のみ外部サーバをチェックするようになります。
カスタムドメインの追加
(ローカル) ネットワークの hosts にカスタムドメインを追加することができます:
local=/home.lan/ domain=home.lan
この例では hostname.home.lan
を (hosts ファイルに定義されている) ホスト/デバイスとして ping できます。
hosts エントリにカスタムドメインを追加するには expand-hosts
をアンコメントしてください:
expand-hosts
この設定を使わない場合、/etc/hosts
のエントリにドメインを追加する必要があります。
テスト
dnsmasq を起動してから一度も訪問していないウェブサイトを選択して、検索速度をテストします(drillは ldnsパッケージの一部です)
$ drill archlinux.org | grep "Query time"
再度コマンドを実行すると、キャッシュされた DNS IP が使用され、dnsmasq が正しく設定されていれば、検索時間はより速くなります。
$ drill archlinux.org | grep "Query time"
;; Query time: 18 msec
$ drill archlinux.org | grep "Query time"
;; Query time: 2 msec
DNSSEC の検証が機能しているかどうかを調べるには、DNSSEC#テスト をご覧ください。
DHCP サーバー
dnsmasq はデフォルトでは DHCP 機能がオフになっていますので、使用したい場合はオンにする必要があります。 以下、重要な設定項目です。
# Only listen to routers' LAN NIC. Doing so opens up tcp/udp port 53 to localhost and udp port 67 to world: interface=enp0s0 # dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with dynamic interfaces (assigning dynamic IPs). # dnsmasq will discard world requests to them, but the paranoid might like to close them and let the kernel handle them. bind-interfaces # Optionally set a domain name domain=example.org # Set default gateway dhcp-option=3,0.0.0.0 # Set DNS servers to announce dhcp-option=6,0.0.0.0 # If your dnsmasq server is also doing the routing for your network, you can use option 121 to push a static route out. # x.x.x.x is the destination LAN, yy is the CIDR notation (usually /24), and z.z.z.z is the host which will do the routing. dhcp-option=121,x.x.x.x/yy,z.z.z.z # Dynamic range of IPs to make available to LAN PC and the lease time. # Ideally set the lease time to 5m only at first to test everything works okay before you set long-lasting records. dhcp-range=192.168.111.50,192.168.111.100,12h # Provide IPv6 DHCP leases, the range is constructed using the network interface as prefix dhcp-range=::f,::ff,constructor:enp0s0 # If you’d like to have dnsmasq assign static IPs to some clients, bind the LAN computers NIC MAC addresses: dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50 dhcp-host=aa:bb:cc:ff:dd:ee,192.168.111.51
その他のオプションについては dnsmasq(8) を参照してください。
プロキシDHCP
ネットワーク上にすでに DHCP サーバーがあり、それと相互運用したい場合、dnsmasq を プロキシ DHCP として動作させ、#PXEサーバー 固有の情報のみをクライアントに提供するように設定することが可能です。このモードは IPv4 でのみ利用可能です。以下の構文を使用し、既存の DHCP サーバーのアドレスを指定します。
dhcp-range=192.168.0.1,proxy
テスト
dnsmasq がインストールされているコンピュータに接続し、DHCP を使用して IP アドレスを自動的に割り当てるように設定し、ネットワークに正常にログインできるか試します。
サーバ上の /var/lib/misc/dnsmasq.leases
ファイルを調査すると、リースが確認できるはずです。
TFTP サーバーの設定
転送ファイルを保存する TFTP のルートディレクトリ (例: /srv/tftp
) を作成してください。
dnsmasq の TFTP セキュアモードを使うには TFTP のルートディレクトリとファイルの所有者を全て dnsmasq
ユーザーに設定してください。
dnsmasq.conf
で TFTP を有効化:
/etc/dnsmasq.conf
enable-tftp tftp-root=/srv/tftp tftp-secure
PXE の設定
PXE を使うには DHCP と TFTP サーバーが必要ですが、どちらの機能も dnsmasq によって提供されています.
- TFTP サーバーと DHCP サーバーを設定
- PXE 互換のブートローダー (例: PXELINUX) を TFTP のルートにコピーして設定
/etc/dnsmasq.conf
で PXE を有効化:
ファイルを送信するには:
dhcp-boot=lpxelinux.0
クライアントアーキテクチャに応じてファイルを送信するには:
pxe-service=x86PC, "PXELINUX (BIOS)", "bios/lpxelinux" pxe-service=X86-64_EFI, "PXELINUX (EFI)", "efi64/syslinux.efi"
dhcp-match=set:efi-x86_64,option:client-arch,7 dhcp-match=set:efi-x86_64,option:client-arch,9 dhcp-match=set:efi-x86,option:client-arch,6 dhcp-match=set:bios,option:client-arch,0 dhcp-boot=tag:efi-x86_64,"efi64/syslinux.efi" dhcp-boot=tag:efi-x86,"efi32/syslinux.efi" dhcp-boot=tag:bios,"bios/lpxelinux.0"
後はブートローダー次第です。
ヒントとテクニック
OpenDNS が Google へのクエリをリダイレクトするのを止める
OpenDNS が全ての Google クエリを OpenDNS の検索サーバーにリダイレクトを止めさせるには、以下を /etc/dnsmasq.conf
に追加してください:
server=/www.google.com/<ISP DNS IP>
アドレスの上書き
キャプティブポータルを使用する場合など、特定の場面では特定のドメインをハードコードされたアドレスセットに解決するのが役に立つ場合があります。address
の設定で解決できます:
address=/example.com/1.2.3.4
さらに、特殊なワイルドカードを使うことで /etc/hosts
や DHCP が返答がないドメイン名について特定のアドレスを返すようにすることが可能です:
address=/#/1.2.3.4
複数のインスタンスを動作する
複数の dnsmasq サーバーをインターフェイスで動作させたい場合:
固定
インターフェイスごとに固定のサーバーを使いたい場合、interface
と bind-interface
オプションを使ってください。2番目の dnsmasq が起動するようになります。
動的
インターフェイスを除外して他のインターフェイスにバインドできます:
except-interface=lo bind-dynamic
ドメインのブロックリスト化
ドメインをブロックリスト化する、つまり NXDOMAIN でドメインに対するクエリに答えるには、IP アドレスを指定せずに address
オプションを使用します:
address=/blocked.example/ address=/anotherblocked.example/
ワイルドカードもサポートされています。パターンの先頭に *
を追加します:
# blocks both blocked.example and anotherblocked.example and all their subdomains address=/*blocked.example/ # blocks subdomains like mail.google.com but not google.com address=/*.google.com/
一部の特定のサブドメインは、サーバーアドレスとして #
を使用してブロックを解除できます:
# blocks google.com and all subdomains except mail.google.com. address=/google.com/ server=/mail.google.com/#
使いやすいようにブロックリストを別のファイル、例えば /etc/dnsmasq.d/blocklist.conf
に置き、/etc/dnsmasq.conf
から conf-file=/etc/dnsmasq.d/blocklist.conf
または conf-dir=/etc/dnsmasq.d/,*.conf
でロードします。