# 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

##### 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 が起動されると、デフォルトの設定ファイルの代わりにこのディレクトリにある設定ファイルが使われます。

Tip: This method can allow you to enable custom DNS settings on particular domains. For instance: `server=/example1.com/exemple2.com/xx.xxx.xxx.x` change the first DNS address to `xx.xxx.xxx.xx` while browsing only the following websites `example1.com, example2.com`. This method is preferred to a global DNS configuration when using particular DNS nameservers which lack of speed, stability, privacy and security.

##### 他の方法

他にも 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` は dnsutils パッケージに入っています):

    $ dig archlinux.org | grep "Query time"

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

### 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

Category:

- Domain Name System (日本語)