本記事での設定
- 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・ゲーム・システム開発 インフィニットループ
コメント