dnsmasq
dnsmasq は DNS キャッシュと DHCP サーバーとしてのサービスを提供します。ドメインネームサーバ (DNS) としては DNS クエリをキャッシュすることで以前に訪れたことのあるサイトへの接続速度を向上させることができ、DHCP サーバーとしては dnsmasq は LAN 上のコンピュータに内部 IP アドレスとルートを割り当てるのに使えます。サービスのどちらか、または両方として役立てることが可能です。dnsmasq は軽量で設定が簡単です。個人のコンピュータでの利用や、50以下のコンピュータが繋がったネットワークでの使用を想定して作られています。また、PXE サーバーも含まれています。
インストール
公式リポジトリから dnsmasq をインストールしてください。
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 を使用することが推奨されます。
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
それからt /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 を起動することができます。NetworkManager.conf
の [main]
セクションに dns=dnsmasq
オプションを追加し、dnsmasq.service
が systemd によってロードされないように無効化してください:
/etc/NetworkManager/NetworkManager.conf
[main] plugins=keyfile dns=dnsmasq
/etc/NetworkManager/dnsmasq.d/
にカスタム設定ファイルを作成することで dnsmasq のためのカスタム設定を作ることができます。例えば、DNS キャッシュの容量を変更するには (RAM に保存されます):
/etc/NetworkManager/dnsmasq.d/cache
cache-size=1000
NetworkManager
によって dnsmasq が起動されると、デフォルトの設定ファイルの代わりにこのディレクトリにある設定ファイルが使われます。
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, ...
。
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 をロードするようにするには:
# systemctl enable dnsmasq
dnsmasq をいますぐ起動するには:
# systemctl start dnsmasq
dnsmasq が正しく起動したか見るには、システムの journal を確認してください:
$ journalctl -u dnsmasq
DHCP クライアントが新しい /etc/resolv.conf
を作れるようにネットワークも再起動する必要があります。
テスト
DNS キャッシュ
ルックアップの速度をテストするには、dnsmasq を起動してから訪れたことのないウェブサイトを選択してください (dig
は bind-tools パッケージに入っています):
$ dig archlinux.org | grep "Query time"
dnsmasq を正しく設定していれば、このコマンドを二回目に実行するとキャッシュされた DNS の IP が使用され、ルックアップの時間が速くなっているはずです:
$ dig archlinux.org | grep "Query time"
;; Query time: 18 msec
$ dig archlinux.org | grep "Query time"
;; Query time: 2 msec
DHCP サーバー
dnsmasq が動いているコンピュータに接続されたコンピュータから、DHCP を使って IP アドレスを自動的に割り当てるように設定し、ネットワークに通常通りにログインしてください。
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
のエントリにドメインを追加する必要があります。