我有兴趣使用单独的命名空间来运行 VPN 客户端,以便我运行到该命名空间的每个进程都可以通过 VPN 访问 Internet。我已经成功完成了这部分。
但是,某些程序通过环回接口进行通信(例如,我想使用 VPN 与 Internet 通信的守护程序,以及我想通过计算机的公共 IP 访问的单独管理接口),并且它们无法看到对方。
有没有办法配置网络命名空间以使用与全局命名空间相同的环回?
答案1
不,没有办法做到这一点。这将打破网络命名空间分离背后的概念。有一种且只有一种方法可以“逃避”这种分离,那就是 veth 接口。
更详细地说,这不仅仅是以某种方式在网络命名空间之间“共享”环回接口的问题。每个网络命名空间在逻辑上都是网络堆栈的另一个副本,具有自己的路由、防火墙规则和网络设备。在这种“共享”的背景下,哪些路由表和防火墙规则适用?您甚至可以让多个不同的进程在不同的网络命名空间中绑定和侦听相同的 TCP/IP 地址和端口号,然后哪个进程会接收传入的数据包?这从根本上说是行不通的。
答案2
你不能分享环回或者事实上任何带有命名空间的接口。但你可以创建环回接口具有与全局相同的地址,并且它们都可以独立工作。
例如,
我可以在我的命名空间上创建以下内容:
lo:11 Link encap:Local Loopback
inet addr:127.0.1.1 Mask:255.0.0.0
LOOPBACK MTU:65536 Metric:1
lo: Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
LOOPBACK MTU:65536 Metric:1