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が機能しない理由と後で動作する理由がわかりません(たとえ2つが関連しているとは思いますが:=])。
どんな助けでも大変感謝します。