我正在锁定 Linux 机器的出口,使 OUTPUT 链默认拒绝。
我的wireguard 对等点来自子网10.1.0.0/16
。本来我以为我可以-A OUTPUT -d 10.1.0.0/16 -j ACCEPT
,虽然这是必要的,但它本身还不够。
通过跟踪确认,与wireguard 对等点的物理 UDP 连接也需要允许,再想一想,这是有道理的。
现在,我可以继续手动允许对等端点的wireguard 端口。但我想知道是否有一些更自动的机制,可以将物理 UDP 数据包与已经允许的隧道数据包相关联,并自动允许它?
WireGuard 提供了使用iptables处理此问题的方法:通过在传出信封数据包上设置防火墙标记。这可以通过低级
wg
命令获得,因此也可以通过以下命令获得wg-quick
:wg-quick
提供了一个用于以下位置的示例PostUp
:对于这个问题的用例(由于使用默认的丢弃策略,因此具有相反的逻辑,并且不需要区分本地用例),配置文件中将类似于以下内容:
或者可以将此规则添加到 WireGuard 的配置之外,可能直接使用 WireGuard 接口名称(例如:
wg0
)而不是%i
在规则中使用防火墙标记值 0xcafe,而不是从 WireGuard 查询该值。如果对等方漫游,规则仍将能够跟踪其传出信封数据包。
如果“物理 UDP”指的是到 VPN 隧道之外的对等点的流量,那么就不行。虽然在这种情况下可以通过 iptables 将不同端口上的流量关联到同一地址(端口敲门就是一个很好的例子),但隧道内部和外部的流量将流向不同的 IP 地址。