我有一台通过wireguard 路由所有流量的服务器。当我启动wireguard时,侦听该服务器公共IP的所有端口都不可用 - 甚至ssh也不起作用。
我想要的是允许来自任何IP的端口(例如ssh)上的传入流量,但对任何传出连接使用wireguard。
例子:
MY_SERVER 到任何公共 IP -> 使用wireguard 对等点进行路由(其他服务器应将wireguard 对等点的IP 视为源)。这是通过AllowedIPs = 0.0.0.0/0
在wireguardconf中进行工作的。
MY_SERVER 的任何公共 IP -> 当启用wireguard 时,此功能不起作用。如果我停止wireguard它就会起作用。
有什么想法如何允许我的公共IP上的传入连接并通过wireguard路由传出连接吗?
更新:
主要问题是,由于wireguard 通过它路由所有数据包,我得到了非对称路由。因此,当给定端口的公共 IP 上的传入连接进入时,它的回复将通过 wg0 而不是公共接口进行路由,并且永远不会返回到客户端。
我能够通过添加来修复它ip rule add sport PORT table main
,但不确定是否有更好的修复,所以我不必一一添加所有端口 - 我希望我开始侦听的任何端口都能正确路由。此外,此修复适用于 TCP,但不适用于 UDP。如果我可以让它同时适用于两种协议,那就太好了。