![처음에는 dnsmasq를 네트워크 네임스페이스에서 사용할 수 없었습니다.](https://linux55.com/image/112062/%EC%B2%98%EC%9D%8C%EC%97%90%EB%8A%94%20dnsmasq%EB%A5%BC%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
우분투 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 서버에 액세스할 수 없었습니다. 재부팅 후(및 네트워크 네임스페이스 셸의 새 인스턴스) dnsmasq에 액세스하여 응답을 얻을 수 있었습니다. dnsmasq를 다시 시작하지 않으면 dns가 작동하지 않는 이유와 나중에 작동하는 이유를 이해할 수 없습니다(비록 둘이 관련이 있다는 느낌은 들지만 :=]).
어떤 도움이라도 대단히 감사하겠습니다.