Skip to content

Ubuntu 22.04LTS で dnsmasq を異ネットワークから応答出来るように設定する

以前に Ubuntu 22.04LTS へ dnsmasq をインストールする というメモを書きました。 但し、dnsmasq はデフォルト状態では「同じネットワークからの名前解決要求にしか応答しない」という設定になっているようです。 そこで今回は改めて dnsmasq のインストール手順に加え、「異なるネットワークからの名前解決要求にも応答する設定例」をメモしておきます。

インストールと初期設定

Ubuntu の場合、標準リポジトリからインストール可能です。 53/UDP が競合しないように標準の systemd-resolved を停止させた後、dnsmasq をインストールします。

1
2
3
systemctl stop systemd-resolved
systemctl disable systemd-resolved
apt -y install dnsmasq

初期設定例は以下の通りです。 上位 DNS は /etc/dnsmasq_resolv.conf に定義することにします。

1
2
3
4
5
6
7
8
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 を参照させました。

1
2
3
4
cat << 'EOF' > /etc/dnsmasq_resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
EOF

ローカルの名前解決用には手軽なので /etc/hosts を使います。

1
2
3
4
5
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}"

ワンライナーで修正するには以下のように実行します。

1
sed -i -e 's/DNSMASQ_OPTS="${DNSMASQ_OPTS} --local-service"/DNSMASQ_OPTS="${DNSMASQ_OPTS}"/g' /etc/init.d/dnsmasq

dnsmasq の起動

設定が完了したら dnsmasq を起動&自動起動設定しておきます。

1
2
systemctl start dnsmasq.service
systemctl enable dnsmasq.service

もし dnsmasq が起動済みであれば再起動します。

1
systemctl restart dnsmasq.service