アプリケーションはネットワークネームスペース外の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プロキシに送信され、pingが正しく機能します。

次に、ユーザーと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によって生成されることに言及したいと思います。

関連情報