我已经使用 Wireguard 和 Nftables 设置了一个运行 Pi OS 11 的 pi 作为本地网络的 VPN 网关,一切正常。
但是,我希望在不使用 iptables 的情况下切换到 firewalld 以与 docker 兼容。
我到目前为止是这样的:
- 内部区域:eth0
- 外部区域:wg0
我无法弄清楚如何让防火墙在 eth0 和 wg0 之间转发流量。使用原始 nftables 我只有以下内容,默认情况下我的正向链下降:
nft insert rule inet firewall forward iifname "eth0" oifname "wg0" accept
nft insert rule inet firewall forward iifname "wg0" oifname "eth0" ct state related,established accept
但是我无法找到如何在接口之间有条件地转发,如上述规则。
我不希望 eth0 在带有 wg0 的外部区域中,因为如果 VPN 出现故障,我希望互联网访问终止切换,而且它有点违背区域的整个想法,不是吗?eth0 仅用于 LAN 而 wg0 用于外部连接。
使用 firewalld 0.9 和更高版本,您可以使用firewalld 策略对象来控制跨区域转发(在 firewalld 0.9 之前,没有办法做到这一点)。
如果您已
eth0
绑定到您的internal
区域并wg0
绑定到您的external
区域,您可以使用以下一系列命令来创建新的自定义策略internal2external
,并使用该策略接受从转发到的所有新eth0
连接wg0
:(Firewalld 会自动添加一揽子规则来接受所有已建立/相关的转发连接,因此如果它只需要转发已建立的连接,则无需为反向路径单独设置任何内容。)