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 服务器。以下两个步骤解决了问题并导致我感到困惑。

... 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 服务器,在重新启动(以及网络命名空间 shell 的新实例)之后,我能够访问 dnsmasq 并从中获取答案。我无法理解为什么 dns 在没有重新启动 dnsmasq 的情况下无法工作,以及为什么它之后可以工作(尽管我有一种感觉它们是相关的:=])。

任何帮助将不胜感激。

相关内容