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에 의해 생성된다는 점을 언급하고 싶습니다.