几天来我一直在努力解决这个问题,所以我画了一张图(在帖子的底部)。
语境
我有一个带有两个命名空间的 VPS:
- 初始化命名空间(根)
- 自定义命名空间(我很酷的命名空间)
作为一个思想实验,我只希望那些通过 Wireguard(托管在my cool namespace
)连接的应用程序能够访问 10.0.0.0/16 子网上的应用程序,并在子网外部发出出站请求仍然能够访问公共互联网。
例如:
- WG 客户端 1 ping 10.0.0.1:8000 -> 应用程序加载
- WG 客户端 1 ping 1.1.1.1 -> 应用程序加载
我有什么工作
我应该先说一下,我正在使用wg-quick
,我认为在尝试破译所有路由表之后,它在网络名称空间内有一些固有的奇怪之处,但就这样吧。
- 我添加了 iptables dnat 规则,将 eth0 上的 UDP 流量 + WG 端口转发到我的 veth 对。这似乎使连接对等方能够访问命名空间中托管的应用程序。但是,我无法从客户端(或服务器)对外界执行 ping 操作。
- 如果我删除该
wg0
接口(wg-quick down),我可以再次 ping 外界。
这告诉我这肯定是一个路由表问题,很可能是默认路由表和 wg-quick 构建的 wireguard 路由之间的默认路由发生冲突。
我希望有人能够简化我的整体心理模型,即数据包应流向何处、重定向到何处以及我在执行此操作时应考虑的 IPtables 规则。
因为我正在学习,所以我想将这个设置与 veth 对一起保留,并且不引入任何桥接器、tun/taps 等。