如何让wireguard忽略某些端口

如何让wireguard忽略某些端口

我的路由器设置为将端口 80 端口转发到运行文件服务器的计算机caddy。我可以成功地从 LAN 卷曲文件服务器,但从 WAN 卷曲时出现超时。运行的机器caddy也运行wireguard通过NetworkManager连接到外部VPN。如果我关闭wireguard连接,我可以从 WAN 卷曲文件服务器。

这个答案说我AllowedIps=0.0.0.0,::0/0正在通过外部 VPN 路由所有流量。我怎样才能设置wireguard来路由所有东西端口 80 和 443 流量通过 VPN?

答案1

由于 Wireguard 使用默认路由表之外的另一个路由表,因此您可以使用它ip rule来排除某种类型的流量。 Wireguard 将在流量重定向到本地之后、进入主站点之前添加一条规则来匹配流量。

然后,您应该能够在wireguard规则之前添加一条规则,这将重定向流量端口 80 和 443(来自您的服务器的回复)到主表。它应该像这样简单:

ip rule add sport 80 table main
ip rule add sport 443 table main

您可以使用以下命令验证规则是否放置在wireguard 规则之前:

ip rule

不过,如果您想使其持久化,您可能需要在配置文件中添加 PostUp 操作:

PostUp=ip rule add sport 80 table main && ip rule add sport 443 table main
PreDown=ip rule del sport 80 table main && ip rule del sport 443 table main

如果您仅使用 NetworkManager,则可以使用dispatcher.d 放置脚本,以便在网络连接或断开时执行该脚本。

#!/bin/bash
echo 'ip rule del sport 80 table custom
ip rule del sport 443 table custom
ip rule add sport 80 table custom
ip rule add sport 443 table custom' > /etc/NetworkManager/dispatcher.d/02-wg_exceptions.sh
chmod +x /etc/NetworkManager/dispatcher.d/02-wg_exceptions.sh

答案2

不可能将 Wireguard 配置为路由除端口 80 和 443 之外的所有端口。这是因为从 OSI 网络模型来看,端口与 IP 流量位于不同的层。

但这个问题有两个(可能更多)答案:第一个答案是限制通过 Wireguard 隧道的路线。评估哪些 IP 网络需要通过 Wireguard 隧道并在AllowedIps.

第二个答案更高级,但您可以source NAT在路由器上配置一个,将传入的 WAN IP 地址屏蔽为路由器的 IP。这意味着文件服务器认为 WAN 流量是来自路由器的流量,并将向路由器发回回复,路由器将其发送回 WAN。

相关内容