애플리케이션이 네트워크 네임스페이스 외부의 DNS를 사용합니까?

애플리케이션이 네트워크 네임스페이스 외부의 DNS를 사용합니까?

unshare를 사용하여 네트워크 네임스페이스를 생성하고 있습니다.

unshare -rn bash

이 가이드에 설명된 대로 veth 인터페이스에 대한 작업 설정이 이미 있습니다.

https://josephmuia.ca/2018-05-16-net-namespaces-veth-nat/

또는 이 스크립트에서:https://gist.github.com/dpino/6c0dca1742093346461e11aa8f608a99

인터넷 연결을 위해. 또한 veth 장치에서 IPv6을 비활성화했습니다. 나는 nftables를 사용하여 나가는 모든 DNS 트래픽을 내 dns-proxy로 보냅니다.

/usr/sbin/nft add table nat
/usr/sbin/nft add chain nat output "{ type nat hook output priority filter; policy accept;}"
/usr/sbin/nft add rule nat output udp dport 53 dnat 10.200.1.1:53

시도해 보니 dig example.com원하는 대로 DNS 프록시로 전송되고 핑이 제대로 작동합니다.

다음으로 사용자 및 PID 네임스페이스를 생성합니다.

unshare -pf --mount-proc --map-user=1000 --map-group=1000 

네트워크 네임스페이스 내부에서도 ip a여전히 네트워크 네임스페이스에 있는 것을 확인하고 dig example.com이전과 동일하게 돌아왔습니다. 이제 vs code와 같은 애플리케이션을 실행하면 DNS 트래픽이 호스트 eth 장치에는 표시되지만 veth 장치에는 표시되지 않는 것을 알 수 있습니다. 그리고 내 DNS 프록시로 전달되지 않습니다. 왜 이런 일이 발생하는지 모르겠습니다. DNS 관련 트래픽만 veth 장치를 통과하지 않기 때문입니다. 또한 네트워크 네임스페이스 내부를 변경해 보았지만 /etc/resolv.conf아무 것도 변경되지 않았습니다. resolv.conf가 NetworkManager에 의해 생성된다는 점을 언급하고 싶습니다.

관련 정보