처음에는 네트워크 네임스페이스에서 dnsmasq를 사용할 수 없습니다.

처음에는 네트워크 네임스페이스에서 dnsmasq를 사용할 수 없습니다.

우분투 16.04, dnsmasq 2.75

참고: dnsmasq가 옵션을 사용하여 실행 중이므로 --hostsdirdnsmasq는 해당 디렉터리에 기록된 호스트 항목을 선택해야 합니다.

재현 단계:

... 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가 작동하지 않는 이유와 나중에 작동하는 이유를 이해할 수 없습니다(비록 둘이 관련되어 있다는 느낌은 있지만 :=]).

어떤 도움이라도 대단히 감사하겠습니다.

관련 정보