「Dnsmasq」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
1行目: 1行目:
  +
{{Lowercase title}}
 
[[Category:Domain Name System]]
 
[[Category:Domain Name System]]
 
[[en:Dnsmasq]]
 
[[en:Dnsmasq]]
8行目: 9行目:
 
{{Lowercase_title}}
 
{{Lowercase_title}}
   
'''dnsmasq''' は DNS キャッシュと DHCP サーバーとしてのサービスを提供します。ドメインネームサーバ (DNS) としては DNS クエリをキャッシュすることで以前に訪れたことのあるサイトへの接続速度を向上させることができ、DHCP サーバーとして {{Pkg|dnsmasq}} は LAN 上のコンピュータに内部 IP アドレスとルートを割り当てるのに使えます。サービスのどちらか、または両方として役立てることが可能です。dnsmasq は軽量で設定が簡単です。個人のコンピュータでの利用や、50以下のコンピュータが繋がったネットワークでの使用を想定して作られています。また、[[PXE]] サーバーも含まれています。
+
[http://www.thekelleys.org.uk/dnsmasq/doc.html dnsmasq] は DNS キャッシュと DHCP サーバーとしてのサービスを提供します。ドメインネームサーバ (DNS) としては DNS クエリをキャッシュすることで以前に訪れたことのあるサイトへの接続速度を向上させることができ、DHCP サーバーとして dnsmasq は LAN 上のコンピュータに内部 IP アドレスとルートを割り当てるのに使えます。サービスのどちらか、または両方として役立てることが可能です。dnsmasq は軽量で設定が簡単です。個人のコンピュータでの利用や、50以下のコンピュータが繋がったネットワークでの使用を想定して作られています。また、[[PXE]] サーバーも含まれています。
   
 
== インストール ==
 
== インストール ==
   
 
[[公式リポジトリ]]から {{Pkg|dnsmasq}} を[[pacman|インストール]]してください。
 
[[公式リポジトリ]]から {{Pkg|dnsmasq}} を[[pacman|インストール]]してください。
  +
  +
== 設定 ==
  +
  +
dnsmasq を設定するには {{ic|/etc/dnsmasq.conf}} を編集する必要があります。ファイルにはオプションに関して詳しいコメントが付いています。
  +
  +
{{Warning|dnsmasq はデフォルトで DNS サーバーを有効にします。DNS サーバーが不要の場合、DNS ポートを {{ic|0}} に設定して明示的に無効化する必要があります:
  +
{{hc|/etc/dnsmasq.conf|2=port=0}}
  +
}}
  +
  +
{{Tip|設定ファイルをチェックしたい場合、次のコマンドを実行してください: {{ic|$ dnsmasq --test}}。}}
   
 
== DNS キャッシュの設定 ==
 
== DNS キャッシュの設定 ==
26行目: 37行目:
 
この場合は LAN の固定 ip を使用することが推奨されます。
 
この場合は LAN の固定 ip を使用することが推奨されます。
   
複数 IP アドレス設定:
+
複数 IP アドレス設定:
   
listen-address=127.0.0.1,192.168.1.1
+
listen-address=127.0.0.1,192.168.1.1
   
 
=== DNS アドレスファイル ===
 
=== DNS アドレスファイル ===
63行目: 74行目:
 
}}
 
}}
   
それからt {{ic|/etc/dnsmasq.conf}} を新しい resolv ファイルを使用するように編集してください:
+
それから {{ic|/etc/dnsmasq.conf}} を新しい resolv ファイルを使用するように編集してください:
   
 
{{hc|/etc/dnsmasq.conf|
 
{{hc|/etc/dnsmasq.conf|
83行目: 94行目:
 
prepend domain-name-servers 127.0.0.1;
 
prepend domain-name-servers 127.0.0.1;
   
==== NetworkManager ====
+
=== NetworkManager ===
   
  +
[[NetworkManager]] には dnsmasq を使って DNS を有効化するプラグインがあります。DNS ルックアップがキャッシュされることにより、解決時間が短くなったり、VPN ホストの DNS ルックアップを該当する VPS の DNS サーバーに転送することができます (複数の VPN に接続する場合に特に有用です)。
[[NetworkManager]] は設定ファイルから ''dnsmasq'' を起動することができます。{{ic|NetworkManager.conf}} の {{ic|[main]}} セクションに {{ic|1=dns=dnsmasq}} オプションを追加し、{{ic|dnsmasq.service}} が [[systemd]] によってロードされないように無効化してください:
 
  +
  +
{{Pkg|dnsmasq}} がインストールされていること、ただし無効化されていることを確認してください。それから、{{ic|/etc/NetworkManager/NetworkManager.conf}} を編集して {{ic|[main]}} セクションの {{ic|dns}} を変更してください:
   
 
{{hc|/etc/NetworkManager/NetworkManager.conf|<nowiki>
 
{{hc|/etc/NetworkManager/NetworkManager.conf|<nowiki>
 
[main]
 
[main]
  +
...
plugins=keyfile
 
 
dns=dnsmasq
 
dns=dnsmasq
 
</nowiki>}}
 
</nowiki>}}
   
  +
NetworkManager を再起動するかマシンを再起動してください。NetworkManager は自動的に dnsmasq を起動して 127.0.0.1 を {{ic|/etc/resolv.conf}} に追加します。実際の DNS サーバーは {{ic|/run/NetworkManager/resolv.conf}} で確認できます。({{Pkg|bind-tools}} でインストールできる) {{ic|$ dig example.com}} を使って何回か DNS ルックアップを実行してみて dnsmasq が使われていることを確認してください。
{{ic|/etc/NetworkManager/dnsmasq.d/}} にカスタム設定ファイルを作成することで ''dnsmasq'' のためのカスタム設定を作ることができます。例えば、DNS キャッシュの容量を変更するには (RAM に保存されます):
 
   
  +
==== カスタム設定 ====
{{hc|/etc/NetworkManager/dnsmasq.d/cache|2=
 
cache-size=1000
 
}}
 
   
  +
{{ic|/etc/NetworkManager/dnsmasq.d/}} にカスタム設定ファイルを作成することで ''dnsmasq'' のためのカスタム設定を作ることができます。例えば、DNS キャッシュの容量を変更するには (RAM に保存されます):
{{ic|NetworkManager}} によって ''dnsmasq'' が起動されると、デフォルトの設定ファイルの代わりにこのディレクトリにある設定ファイルが使われます。
 
   
  +
{{hc|/etc/NetworkManager/dnsmasq.d/cache.conf|2=cache-size=1000}}
{{Tip|この方法では特定のドメインで DNS のカスタム設定を有効にすることができます。例えば: {{ic|server&#61;/example1.com/example2.com/xx.xxx.xxx.x}} は {{ic|example1.com, example2.com}} というウェブサイトを見ている時だけ最初の DNS アドレスを {{ic|xx.xxx.xxx.xx}} に変更します。速度や安定性、プライバシーやセキュリティが欠けている特定の DNS ネームサーバを使うときはこの方法をグローバルな DNS 設定にすることを推奨します。}}
 
   
 
==== IPv6 ====
 
==== IPv6 ====
112行目: 123行目:
 
さらに、{{ic|dnsmasq}} は上流の IPv6 DNS を優先させません。残念ながら NetworkManager では優先させることが出来ないようです ([https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/936712 Ubuntu Bug])。NetworkManager の設定で IPv4 の DNS を無効化するのが回避策になります。
 
さらに、{{ic|dnsmasq}} は上流の IPv6 DNS を優先させません。残念ながら NetworkManager では優先させることが出来ないようです ([https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/936712 Ubuntu Bug])。NetworkManager の設定で IPv4 の DNS を無効化するのが回避策になります。
   
===== 他の方法 =====
+
==== 他の方法 ====
   
 
他にも NetworkManager のアプレットを使って設定を手動で入力する方法もあります (通常はアプレットを右クリックします)。設定方法は使用しているフロントエンドの種類によりますが、基本的には、アプレットを右クリックして、プロファイルを編集(または作成)し、DHCP タイプとして 'Automatic (specify addresses)' を選択します。DNS アドレスは次のような形式で入力する必要があります: {{ic|127.0.0.1, DNS-server-one, ...}}。
 
他にも NetworkManager のアプレットを使って設定を手動で入力する方法もあります (通常はアプレットを右クリックします)。設定方法は使用しているフロントエンドの種類によりますが、基本的には、アプレットを右クリックして、プロファイルを編集(または作成)し、DHCP タイプとして 'Automatic (specify addresses)' を選択します。DNS アドレスは次のような形式で入力する必要があります: {{ic|127.0.0.1, DNS-server-one, ...}}。
  +
  +
=== テスト ===
  +
  +
ルックアップの速度をテストするには、dnsmasq を起動してから訪れたことのないウェブサイトを選択してください ({{ic|dig}} は {{Pkg|bind-tools}} パッケージに入っています):
  +
  +
$ dig archlinuxjp.org | grep "Query time"
  +
  +
dnsmasq を正しく設定していれば、このコマンドを二回目に実行するとキャッシュされた DNS の IP が使用され、ルックアップの時間が速くなっているはずです:
  +
  +
{{hc|<nowiki>$ dig archlinuxjp.org | grep "Query time"</nowiki>|
  +
;; Query time: 18 msec
  +
}}
  +
  +
{{hc|<nowiki>$ dig archlinuxjp.org | grep "Query time"</nowiki>|
  +
;; Query time: 2 msec
  +
}}
   
 
== DHCP サーバーの設定 ==
 
== DHCP サーバーの設定 ==
139行目: 166行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
=== テスト ===
== デーモンを起動する ==
 
起動時に dnsmasq をロードするようにするには:
 
   
  +
dnsmasq が動いているコンピュータに接続されたコンピュータから、DHCP を使って IP アドレスを自動的に割り当てるように設定し、ネットワークに通常通りにログインしてください。
{{bc|# systemctl enable dnsmasq}}
 
   
  +
== TFTP サーバーの設定 ==
dnsmasq をいますぐ起動するには:
 
   
  +
転送ファイルを保存する TFTP のルートディレクトリ (例: {{ic|/srv/tftp}}) を作成してください。
{{bc|# systemctl start dnsmasq}}
 
   
  +
dnsmasq の TFTP セキュアモードを使うには TFTP のルートディレクトリとファイルの所有者を全て {{ic|dnsmasq}} ユーザーに[[Chown|設定]]してください。
dnsmasq が正しく起動したか見るには、システムの journal を確認してください:
 
   
{{bc|$ journalctl -u dnsmasq}}
+
{{ic|dnsmasq.conf}} で TFTP を有効化:
  +
{{hc|/etc/dnsmasq.conf|<nowiki>
  +
enable-tftp
  +
tftp-root=/srv/tftp
  +
tftp-secure
  +
</nowiki>}}
   
  +
== PXE の設定 ==
DHCP クライアントが新しい {{ic|/etc/resolv.conf}} を作れるようにネットワークも再起動する必要があります。
 
   
  +
PXE を使うには DHCP と TFTP サーバーが必要ですが、どちらの機能も dnsmasq によって提供されています.
== テスト ==
 
=== DNS キャッシュ ===
 
   
  +
{{Tip|dnsmasq を使って既存の DHCP サーバーを使ってネットワークに PXE ブートオプションを追加することもできます:
ルックアップの速度をテストするには、dnsmasq を起動してから訪れたことのないウェブサイトを選択してください ({{ic|dig}} は {{Pkg|bind-tools}} パッケージに入っています):
 
  +
{{hc|/etc/dnsmasq.conf|2=
  +
interface=''enp0s0''
  +
bind-dynamic
  +
dhcp-range=''192.168.0.1'',proxy}}
  +
}}
   
  +
# [[#TFTP サーバーの設定|TFTP サーバー]]と [[#DHCP サーバーの設定|DHCP サーバー]]を設定
$ dig archlinux.org | grep "Query time"
 
  +
# PXE 互換のブートローダー (例: [[Syslinux#Pxelinux|PXELINUX]]) を TFTP のルートにコピーして設定
  +
# {{ic|/etc/dnsmasq.conf}} で PXE を有効化:
  +
{{Note|
  +
*ファイルのパスは TFTP ルートからの相対パスです。
  +
*ファイルに {{ic|.0}} 拡張子が付く場合、{{ic|pxe-service}} オプションで拡張子を除外する必要があります。
  +
}}
  +
ファイルを送信するには:
  +
dhcp-boot=lpxelinux.0
  +
クライアントアーキテクチャに応じてファイルを送信するには:
  +
pxe-service=x86PC, "PXELINUX (BIOS)", "bios/lpxelinux"
  +
pxe-service=X86-64_EFI, "PXELINUX (EFI)", "efi64/syslinux.efi"
   
  +
{{Note|{{ic|pxe-service}} が機能しない場合 (特に UEFI を使用するクライアントの場合)、{{ic|dhcp-match}} と {{ic|dhcp-boot}} を組み合わせることができます。dhcp 起動プロトコルで使用する {{ic|client-arch}} の数について詳しくは [https://tools.ietf.org/html/rfc4578#section-2.1 RFC4578] を見てください。}}
dnsmasq を正しく設定していれば、このコマンドを二回目に実行するとキャッシュされた DNS の IP が使用され、ルックアップの時間が速くなっているはずです:
 
  +
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"
   
  +
後はブートローダー次第です。
{{hc|<nowiki>$ dig archlinux.org | grep "Query time"</nowiki>|
 
;; Query time: 18 msec
 
}}
 
   
  +
== デーモンの起動 ==
{{hc|<nowiki>$ dig archlinux.org | grep "Query time"</nowiki>|
 
;; Query time: 2 msec
 
}}
 
   
  +
{{ic|dnsmasq.service}} を[[起動]]・[[有効化]]してください。
=== DHCP サーバー ===
 
   
  +
dnsmasq が正しく起動したか確認するには、システムの journal をチェック:
dnsmasq が動いているコンピュータに接続されたコンピュータから、DHCP を使って IP アドレスを自動的に割り当てるように設定し、ネットワークに通常通りにログインしてください。
 
  +
  +
{{bc|$ journalctl -u dnsmasq}}
  +
  +
DHCP クライアントが {{ic|/etc/resolv.conf}} を新しく作成できるようにネットワークの再起動も必要です。
   
 
== Tips and tricks ==
 
== Tips and tricks ==
195行目: 248行目:
 
expand-hosts
 
expand-hosts
 
この設定を使わない場合、{{ic|/etc/hosts}} のエントリにドメインを追加する必要があります。
 
この設定を使わない場合、{{ic|/etc/hosts}} のエントリにドメインを追加する必要があります。
  +
  +
=== アドレスの上書き ===
  +
  +
キャプティブポータルを使用する場合など、特定の場面では特定のドメインをハードコードされたアドレスセットに解決するのが役に立つ場合があります。{{ic|address}} の設定で解決できます:
  +
  +
address=/example.com/1.2.3.4
  +
  +
さらに、特殊なワイルドカードを使うことで {{ic|/etc/hosts}} や DHCP が返答がないドメイン名について特定のアドレスを返すようにすることが可能です:
  +
  +
address=/#/1.2.3.4
  +
  +
=== 複数のインスタンスを動作する ===
  +
  +
複数の dnsmasq サーバーをインターフェイスで動作させたい場合:
  +
  +
==== 固定 ====
  +
  +
インターフェイスごとに固定のサーバーを使いたい場合、{{ic|interface}} と {{ic|bind-interface}} オプションを使ってください。2番目の dnsmasq が起動するようになります。
  +
  +
==== 動的 ====
  +
  +
インターフェイスを除外して他のインターフェイスにバインドできます:
  +
  +
except-interface=lo
  +
bind-dynamic
  +
  +
{{Note|[[libvirt]] では上記がデフォルトです。}}
  +
  +
== 参照 ==
  +
  +
* [http://www.g-loaded.eu/2010/09/18/caching-nameserver-using-dnsmasq/ Caching Nameserver using dnsmasq, and a few other tips and tricks.]

2016年10月23日 (日) 17:20時点における版

dnsmasq は DNS キャッシュと DHCP サーバーとしてのサービスを提供します。ドメインネームサーバ (DNS) としては DNS クエリをキャッシュすることで以前に訪れたことのあるサイトへの接続速度を向上させることができ、DHCP サーバーとして dnsmasq は LAN 上のコンピュータに内部 IP アドレスとルートを割り当てるのに使えます。サービスのどちらか、または両方として役立てることが可能です。dnsmasq は軽量で設定が簡単です。個人のコンピュータでの利用や、50以下のコンピュータが繋がったネットワークでの使用を想定して作られています。また、PXE サーバーも含まれています。

インストール

公式リポジトリから dnsmasqインストールしてください。

設定

dnsmasq を設定するには /etc/dnsmasq.conf を編集する必要があります。ファイルにはオプションに関して詳しいコメントが付いています。

警告: dnsmasq はデフォルトで DNS サーバーを有効にします。DNS サーバーが不要の場合、DNS ポートを 0 に設定して明示的に無効化する必要があります:
/etc/dnsmasq.conf
port=0
ヒント: 設定ファイルをチェックしたい場合、次のコマンドを実行してください: $ dnsmasq --test

DNS キャッシュの設定

単一のコンピュータ上で dnsmasq を DNS キャッシュデーモンとしてセットアップするには /etc/dnsmasq.conf を編集して listen-address ディレクティブをアンコメントし、ローカルホストの IP アドレスを追記してください:

listen-address=127.0.0.1

ネットワーク上の他のコンピュータのために LAN の IP アドレスを受信するようにするには:

listen-address=192.168.1.1    # Example IP

この場合は LAN の固定 ip を使用することが推奨されます。

複数 IP アドレスの設定:

listen-address=127.0.0.1,192.168.1.1

DNS アドレスファイル

dnsmasq を設定した後は、DHCP クライアントが /etc/resolv.conf にある既知の DNS アドレスの前にローカルホストのアドレスを挿入させるようにする必要があります。これによって外部の DNS でクエリを解決しようとする前に全てのクエリが dnsmasq に送られるようになります。DHCP クライアントを設定した後は変更を適用するためにネットワークを再起動してください。

resolv.conf

まず一つ目の選択肢は resolv.conf の設定です。これを使うには、/etc/resolv.conf の一番上のネームサーバをローカルホストに変えて下さい:

/etc/resolv.conf
nameserver 127.0.0.1
# External nameservers
...

これで DNS クエリは最初に dnsmasq によって解決されるようになります。dnsmasq がクエリを解決できなかった場合にのみ外部のサーバーが使用されます。残念ながら、dhcpcd はデフォルトで /etc/resolv.conf を上書きするようになっているので、DHCP を使っている場合は /etc/resolv.conf を保護すると良いでしょう。保護するには、dhcpcd の設定ファイルに nohook resolv.conf を追加してください:

/etc/dhcpcd.conf
...
nohook resolv.conf

resolv.conf の書き込みを保護することも可能です:

# chattr +i /etc/resolv.conf
3つ以上のネームサーバ

Linux による DNS クエリの処理には resolv.conf で使えるネームサーバは3つまでという制約があります。対応策として、resolv.conf にはローカルホストのネームサーバだけを記述して、外部のネームサーバ用に resolv-file を分けて作成する方法があります。まず、dnsmasq のための resolv ファイルを新しく作成してください:

/etc/resolv.dnsmasq.conf
# Google's nameservers, for example
nameserver 8.8.8.8
nameserver 8.8.4.4

それから /etc/dnsmasq.conf を新しい resolv ファイルを使用するように編集してください:

/etc/dnsmasq.conf
...
resolv-file=/etc/resolv.dnsmasq.conf
...

dhcpcd

dhcpcd には /etc/resolv.conf にネームサーバを前と後ろに追加する機能があります。それぞれ /etc/resolv.conf.head/etc/resolv.conf.tail ファイルを作成します:

echo "nameserver 127.0.0.1" > /etc/resolv.conf.head

dhclient

dhclient の場合、/etc/dhclient.conf の以下の部分をアンコメントしてください:

prepend domain-name-servers 127.0.0.1;

NetworkManager

NetworkManager には dnsmasq を使って DNS を有効化するプラグインがあります。DNS ルックアップがキャッシュされることにより、解決時間が短くなったり、VPN ホストの DNS ルックアップを該当する VPS の DNS サーバーに転送することができます (複数の VPN に接続する場合に特に有用です)。

dnsmasq がインストールされていること、ただし無効化されていることを確認してください。それから、/etc/NetworkManager/NetworkManager.conf を編集して [main] セクションの dns を変更してください:

/etc/NetworkManager/NetworkManager.conf
[main]
...
dns=dnsmasq

NetworkManager を再起動するかマシンを再起動してください。NetworkManager は自動的に dnsmasq を起動して 127.0.0.1 を /etc/resolv.conf に追加します。実際の DNS サーバーは /run/NetworkManager/resolv.conf で確認できます。(bind-tools でインストールできる) $ dig example.com を使って何回か DNS ルックアップを実行してみて dnsmasq が使われていることを確認してください。

カスタム設定

/etc/NetworkManager/dnsmasq.d/ にカスタム設定ファイルを作成することで dnsmasq のためのカスタム設定を作ることができます。例えば、DNS キャッシュの容量を変更するには (RAM に保存されます):

/etc/NetworkManager/dnsmasq.d/cache.conf
cache-size=1000

IPv6

NetworkManager で dnsmasq を有効にすると IPv6 の DNS ルックアップ (dig -6 [hostname]) が出来なくなります。この問題を解決するには、以下のファイルを作成して IPv6 のループバックも受信するように dnsmasq を設定します:

/etc/NetworkManager/dnsmasq.d/ipv6_listen.conf
listen-address=::1

さらに、dnsmasq は上流の IPv6 DNS を優先させません。残念ながら NetworkManager では優先させることが出来ないようです (Ubuntu Bug)。NetworkManager の設定で IPv4 の DNS を無効化するのが回避策になります。

他の方法

他にも NetworkManager のアプレットを使って設定を手動で入力する方法もあります (通常はアプレットを右クリックします)。設定方法は使用しているフロントエンドの種類によりますが、基本的には、アプレットを右クリックして、プロファイルを編集(または作成)し、DHCP タイプとして 'Automatic (specify addresses)' を選択します。DNS アドレスは次のような形式で入力する必要があります: 127.0.0.1, DNS-server-one, ...

テスト

ルックアップの速度をテストするには、dnsmasq を起動してから訪れたことのないウェブサイトを選択してください (digbind-tools パッケージに入っています):

$ dig archlinuxjp.org | grep "Query time"

dnsmasq を正しく設定していれば、このコマンドを二回目に実行するとキャッシュされた DNS の IP が使用され、ルックアップの時間が速くなっているはずです:

$ dig archlinuxjp.org | grep "Query time"
;; Query time: 18 msec
$ dig archlinuxjp.org | grep "Query time"
;; Query time: 2 msec

DHCP サーバーの設定

デフォルトで dnsmasq の DHCP 機能は無効にされているため、使用したいときは /etc/dnsmasq.conf で有効にする必要があります。以下は中心となる設定です:

# Only listen to routers' LAN NIC.  Doing so opens up tcp/udp port 53 to
# localhost and udp port 67 to world:
interface=<LAN-NIC>

# 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

# Dynamic range of IPs to make available to LAN pc
dhcp-range=192.168.111.50,192.168.111.100,12h

# If you’d like to have dnsmasq assign static IPs, bind the LAN computer's
# NIC MAC address:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.111.50

テスト

dnsmasq が動いているコンピュータに接続されたコンピュータから、DHCP を使って IP アドレスを自動的に割り当てるように設定し、ネットワークに通常通りにログインしてください。

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 によって提供されています.

ヒント: dnsmasq を使って既存の DHCP サーバーを使ってネットワークに PXE ブートオプションを追加することもできます:
/etc/dnsmasq.conf
interface=enp0s0
bind-dynamic
dhcp-range=192.168.0.1,proxy
  1. TFTP サーバーDHCP サーバーを設定
  2. PXE 互換のブートローダー (例: PXELINUX) を TFTP のルートにコピーして設定
  3. /etc/dnsmasq.conf で PXE を有効化:
ノート:
  • ファイルのパスは TFTP ルートからの相対パスです。
  • ファイルに .0 拡張子が付く場合、pxe-service オプションで拡張子を除外する必要があります。

ファイルを送信するには:

dhcp-boot=lpxelinux.0

クライアントアーキテクチャに応じてファイルを送信するには:

pxe-service=x86PC, "PXELINUX (BIOS)", "bios/lpxelinux"
pxe-service=X86-64_EFI, "PXELINUX (EFI)", "efi64/syslinux.efi"
ノート: pxe-service が機能しない場合 (特に UEFI を使用するクライアントの場合)、dhcp-matchdhcp-boot を組み合わせることができます。dhcp 起動プロトコルで使用する client-arch の数について詳しくは RFC4578 を見てください。
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"

後はブートローダー次第です。

デーモンの起動

dnsmasq.service起動有効化してください。

dnsmasq が正しく起動したか確認するには、システムの journal をチェック:

$ journalctl -u dnsmasq

DHCP クライアントが /etc/resolv.conf を新しく作成できるようにネットワークの再起動も必要です。

Tips and tricks

OpenDNS が Google へのクエリをリダイレクトするのを止める

OpenDNS が全ての Google クエリを OpenDNS の検索サーバーにリダイレクトを止めさせるには、以下を /etc/dnsmasq.conf に追加してください:

server=/www.google.com/<ISP DNS IP>

リースを表示する

$ cat /var/lib/misc/dnsmasq.leases

カスタムドメインの追加

(ローカル) ネットワークの hosts にカスタムドメインを追加することができます:

local=/home.lan/
domain=home.lan

この例では hostname.home.lan を (hosts ファイルに定義されている) ホスト/デバイスとして ping できます。

hosts エントリにカスタムドメインを追加するには expand-hosts をアンコメントしてください:

expand-hosts

この設定を使わない場合、/etc/hosts のエントリにドメインを追加する必要があります。

アドレスの上書き

キャプティブポータルを使用する場合など、特定の場面では特定のドメインをハードコードされたアドレスセットに解決するのが役に立つ場合があります。address の設定で解決できます:

address=/example.com/1.2.3.4

さらに、特殊なワイルドカードを使うことで /etc/hosts や DHCP が返答がないドメイン名について特定のアドレスを返すようにすることが可能です:

address=/#/1.2.3.4

複数のインスタンスを動作する

複数の dnsmasq サーバーをインターフェイスで動作させたい場合:

固定

インターフェイスごとに固定のサーバーを使いたい場合、interfacebind-interface オプションを使ってください。2番目の dnsmasq が起動するようになります。

動的

インターフェイスを除外して他のインターフェイスにバインドできます:

except-interface=lo
bind-dynamic
ノート: libvirt では上記がデフォルトです。

参照