以前に Ubuntu 22.04LTS へ dnsmasq をインストールする というメモを書きました。 但し、dnsmasq はデフォルト状態では「同じネットワークからの名前解決要求にしか応答しない」という設定になっているようです。 そこで今回は改めて dnsmasq のインストール手順に加え、「異なるネットワークからの名前解決要求にも応答する設定例」をメモしておきます。
インストールと初期設定
Ubuntu の場合、標準リポジトリからインストール可能です。 53/UDP が競合しないように標準の systemd-resolved
を停止させた後、dnsmasq をインストールします。
systemctl stop systemd-resolved
systemctl disable systemd-resolved
apt -y install dnsmasq
初期設定例は以下の通りです。 上位 DNS は /etc/dnsmasq_resolv.conf
に定義することにします。
cat << 'EOF' > /etc/dnsmasq.conf
local=/example.net/
expand-hosts
domain=example.net
domain-needed
bogus-priv
resolv-file=/etc/dnsmasq_resolv.conf
EOF
上位 DNS は CloudFlare の 1.1.1.1 を参照させました。
cat << 'EOF' > /etc/dnsmasq_resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
EOF
ローカルの名前解決用には手軽なので /etc/hosts
を使います。
cat << EOF >> /etc/hosts
192.0.2.1 sv1
192.0.2.2 sv2
192.0.2.3 sv3
EOF
尚、/etc/hosts
の変更を含め、設定の修正内容を反映するには dnsmasq を再起動する必要があります。
異なるネットワークからの名前解決要求に応答するように設定する
今回試した Ubuntu 22.04LTS 環境では上述の通り、dnsmasq はデフォルトだと「同じネットワークからの名前解決要求しか応答しない」という振る舞いをしていました。 この挙動を変更し、「異なるネットワークからの名前解決要求にも応答させる」には /etc/init.d/dnsmasq
を以下のように修正します。
設定 | |
---|---|
修正前 | DNSMASQ_OPTS="${DNSMASQ_OPTS} --local-service" |
修正後 | DNSMASQ_OPTS="${DNSMASQ_OPTS}" |
ワンライナーで修正するには以下のように実行します。
sed -i -e 's/DNSMASQ_OPTS="${DNSMASQ_OPTS} --local-service"/DNSMASQ_OPTS="${DNSMASQ_OPTS}"/g' /etc/init.d/dnsmasq
dnsmasq の起動
設定が完了したら dnsmasq を起動&自動起動設定しておきます。
systemctl start dnsmasq.service
systemctl enable dnsmasq.service
もし dnsmasq が起動済みであれば再起動します。
systemctl restart dnsmasq.service
コメント