应用程序在其网络命名空间之外使用 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 生成的。

相关内容