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 的情況下無法工作,以及為什麼它之後可以工作(儘管我有一種感覺它們是相關的:=])。

任何幫助將不勝感激。

相關內容