我有以下网络设置:
2 个 LAN;1 个本地和 1 个远程,通过 WireGuard 进行站点到站点连接。
192.168.0.0/24 -> local
192.168.2.0/24 -> remote
192.168.0.0/24 的网关为 192.168.0.20
192.168.2.0/24 的网关为 192.168.2.254
每一端的所有主机都能够互相访问。
我希望一台主机(192.168.0.4)能够使用远程网络上的网关(192.168.2.254)来传输其所有流量。
是否可以通过使用 IP 路由、iptables 规则或我没有想到的任何其他选项来实现这一点?
答案1
通常情况下,您只能指定即时数据包的下一跳,但您无法控制数据包的下一跳。您无法直接指定远程网关,除非使用到该网关的隧道。
因此,您的 LAN 设备.0.4
需要通过您的 WireGuard 端点路由数据包,并且您的 WireGuard 端点需要通过 WG 站点到站点隧道路由它们,然后远程 WG 端点需要通过 192.168.2.254 路由它们。
对于 PC,在这种情况下,您只需将本地 WG 网关指定为计算机的“默认网关”即可。同样,远程 WG 端点很可能已经将 192.168.2.254 作为其所有设备的默认网关。
只有你的本地 WG 端点需要特殊配置 - 它需要策略路由能够为 192.168.0.4 和其他所有内容指定不同的 0.0.0.0/0 路由(您不想意外地通过相同的 WG 隧道路由 WG 流量……)。这在 Linux 上通过 获得支持ip rule
;在您的情况下,创建仅匹配 的策略规则可能就足够了from 192.168.0.4/32
,尽管您会看到许多教程首先通过 iptables 应用数据包标记。