dnsmasqでDNSサーバー

ALL
スポンサーリンク
スポンサーリンク

本記事での設定

  • Ubuntu/AlmaLinux/RockyLinux で dnsmasq によるDNSサーバーを立ち上げます
  • dnsmasqを動作させるマシン外からのDNSクエリーを受け付けます
  • DNSレコードは、/etc/hosts と /etc/hosts-dnsmasq を参照します
  • ファイル内の設定で名前解決できなかった場合は、/etc/resolv.conf の設定に従い、上位サーバへ問い合わせます。
  • dnsmasq が機能として持っているDHCPサーバーは稼働させません

dnsmasqの設定

Ubuntuの場合

インストールします。

apt install dnsmasq

/etc/dnsmasq.conf に次の行を設定します。
listen-address の箇所は、dnsmasq で DNSサーバを稼働させるIPアドレス(自マシンの 127.0.0.1ではないアドレス)を指定してください。
Ubuntuでは、自マシン内のアドレス127.0.0.53 で、systemd-resolved という、ローカルアプリに名前解決を提供するサービスが稼働していて、53番ポートを使用しています。
そのため、dnsmasq が 127.0.0.53で53番ポートで待たないように、稼働するIPアドレスを listen-address で明示的に指定します。これをしないと、dnsmasqの起動が失敗します。

port=53
no-dhcp-interface=eth0
addn-hosts=/etc/hosts-dnsmasq

# Ubuntuのdnsmasqでは次の行が無いと上位サーバーへ問い合わせしないので設定する
resolv-file=/etc/resolv.conf

# 以下の2行で、bindするIPアドレスを指定
listen-address=xx.xx.xx.xx
bind-interfaces

addn-hosts 行で指定したファイル(この例では/etc/hosts-dnsmasq)に、hostsファイルのようにレコードを記述します。

192.168.1.200 test-dns

ファイアウォールで、外部からのDNS参照を許可します。

ufw allow 53

dnsmasqを起動します。

systemctl start dnsmasq
systemctl enable dnsmasq

なお、/etc/hosts や /etc/hosts-dnsmasq の内容は、dnsmasq起動時に反映されます。dnsmasq起動後に変更しても、反映しないので注意してください。
反映させる場合は、systemctl restart dnsmasq を実行してください。

AlmaLinux/RockyLinuxの場合

仮想ネットワーク virbr0 の停止

仮想マシン用の仮想ネットワーク virbr0 が稼働していると、dnsmasq インストールで行われる設定では、dnsmasq は virbr0(IPアドレス192.168.122.1等) 上でポート53で待ち受けるため、別PCからアクセス出来ません。

そこで、はじめに ip a で virbr0 があるか確認してください。virbr0 は仮想マシン用の仮想ネットワークですが、仮想マシンを使っていない場合は、仮想ネットワークを停止します。
仮想マシンを使っているかは virsh list 実行で確認できます。実行で次のようにリストに何も表示されなければ、仮想マシンを使っていません。

# virsh list
 Id   名前   状態
-------------------

仮想ネットワーク停止は、次のコマンドを実行します。

virsh net-destroy default
virsh net-autostart --disable default

dnsmasqの設定

インストールします。

yum install dnsmasq

/etc/dnsmasq.conf に次の行を設定します。

port=53
no-dhcp-interface=eth0
addn-hosts=/etc/hosts-dnsmasq

addn-hosts 行で指定したファイル(この例では/etc/hosts-dnsmasq)に、hostsファイルのようにレコードを記述します。

192.168.1.200 test-dns

ファイアウォールで、外部からのDNS参照を許可します。

firewall-cmd --permanent --add-port=53/udp
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --reload

dnsmasqを起動します。

systemctl start dnsmasq
systemctl enable dnsmasq

なお、/etc/hosts や /etc/hosts-dnsmasq の内容は、dnsmasq起動時に反映されます。dnsmasq起動後に変更しても、反映しないので注意してください。
反映させる場合は、systemctl restart dnsmasq を実行してください。

その他のdnsmasq.confの設定

  • server=xx.xx.xx.xx
    上位DNSサーバを指定します。
    このオプションを使用する場合は、resolv.conf での設定内容と競合しないように no-resolv オプションを使用してください。
  • no-resolv
    /etc/resolv.conf を使用しません。
  • resolv-file=xxxx
    /etc/resolv.conf の代わりに参照する、上位サーバーを記述したファイル
  • no-dhcp-interface=xxxx
    DHCPサーバーを稼働させないネットワークインタフェースを指定します。
  • no-hosts
    dnsmasq が動いているマシンの /etc/hosts を参照しません。addn-hostsオプションで指定したファイルは参照されます。
  • expand-hosts
    ドメイン名のないクエリに自動的にドメインを付加します
  • domain=xxxxx
    expand-hosts が指定されている場合に、付加するドメインを指定します
  • log-queries
    DNSクエリーをログに出力します
  • log-facility=xxxx
    log-queriesが指定されている場合に、出力するログファイル名を指定します

参考

dnsmasqでサクッとDNSサーバ構築 #CentOS – Qiita
Linuxユーザのためのチップス: dnsmasqで簡易DNSサーバ
ローカルDNSをたてる
作業PCをsystemd-resolvedとdnsmasqの多段構成にした – ぶていのログでぶログ
dnsmasq – ArchWiki
Dnsmasqでお手軽ご家庭DNSサーバーを作ろう|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ

コメント