我有一个连接到两个网络的服务器:
- 10.0.0.0/24 通过接口 wlan0
- 192.168.1.0/24 通过接口 eth0
我想设置一个 Wireguard VPN 以使两个网络都可以从外部访问。我在我的配置中激活了 ip 转发(使用 sysctl)。现在我需要设置一个 NAT,以便通过两个本地网络路由来自 VPN 服务器的请求。我使用 nftables 来设置 NAT。
我的问题是,对于只有一个接口的机器,我会使用以下配置:
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
}
chain postrouting {
type nat hook postrouting priority 100;
ip saddr 10.2.0.0/24 oifname eth0 masquerade
}
}
但是在这里,我不想通过 eth0 路由所有内容,我想专门通过 wlan0 路由所有用于 10.0.0.0/24 的内容,以及通过 eth0 路由所有用于 192.168.1.0/24 的内容。如何使用 nftables 实现这一目标?
最后我自己找到了答案,所以这里是如何做到的:你必须使用
ip daddr
参数来按目标地址过滤。我的最终规则集如下:这完美地工作。