使用 Nftables 在访问不同网络的不同接口上进行伪装 NAT

使用 Nftables 在访问不同网络的不同接口上进行伪装 NAT

我有一台连接到两个网络的服务器:

  • 通过接口 wlan0 的 10.0.0.0/24
  • 通过接口 eth0 访问 192.168.1.0/24

我想设置一个 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 实现这一点?

答案1

我最终自己找到了答案,所以操作方法如下:您必须使用参数ip daddr按目标地址进行过滤。我的最终规则集如下:

table ip nat {

        chain PREROUTING {
            type nat hook prerouting priority filter; policy accept;
        }
    
        chain POSTROUTING {
            type nat hook postrouting priority srcnat; policy accept;
            ip saddr 10.2.0.0/24 ip daddr 192.168.0.0/16 oifname "eth0" masquerade
            ip saddr 10.2.0.0/24 ip daddr 10.0.0.0/24 oifname "wlan0" masquerade
        }
}

这非常有效。

相关内容