最初はネットワーク名前空間から dnsmasq は利用できません

最初はネットワーク名前空間から dnsmasq は利用できません

Ubuntu 16.04、DNSmasq 2.75

注:--hostsdirオプション付きで dnsmasq を実行しているので、dnsmasq はそのディレクトリに書き込まれたホスト エントリを取得する必要があります。

再現する手順:

... fresh machine boot ...
$> echo 'MY-IP test.domain.com' > $DNSMASQ_HOSTS_DIR/test
$> sudo ip netns add test
$> sudo ip link add veth-test type veth peer name test-eth0
$> sudo ip link set test-eth0 netns test
$> sudo ip addr add 10.0.4.1/24 dev veth-test
$> sudo ip link set veth-test up
$> sudo ip netns exec "test" ip addr add "10.0.4.2/24" dev "test-eth0"
$> sudo ip netns exec "test" ip link set test-eth0 up
$> sudo ip netns exec "test" ip link set lo up
$> sudo ip netns exec "test" ip route add default via "10.0.4.1"
$> sudo ip route add "10.0.4.2/32" via default dev "veth-test"
$> sudo mkdir -p /etc/netns/test
$> sudo bash -c "cat > /etc/netns/test/resolv.conf" << EOL
    nameserver MY_IP
    EOL
$> sudo ip netns exec test bash
test-ns$> host test.domain.com
    ;; connection timed out; no servers could be reached

つまり、ネットワーク名前空間を作成しましたが、DNS サーバーにアクセスできません。次の 2 つの手順で問題が解決し、混乱が生じます。

... return to the default global namespace ...
$> sudo service dnsmasq restart
$> sudo ip netns exec test bash
test-ns~# host test.domain.com
    test.domain.com has address MY_IP
    ... WORKS! WHAT?!

私の理解では、dnsmasq を再起動しても、ネットワーク名前空間のネットワークには影響しないはずです。再起動前は DNS サーバーにアクセスできませんが、再起動後 (およびネットワーク名前空間シェルの新しいインスタンス) は dnsmasq にアクセスして応答を取得できます。dnsmasq を再起動せずに DNS が機能しない理由と、再起動後に DNS が機能する理由が理解できません (ただし、これら 2 つは関連しているような気がします :=])。

ご協力いただければ幸いです。

関連情報