Networking
在使用 Nftables 訪問不同網路的不同介面上偽裝的 NAT
我有一個連接到兩個網路的伺服器:
- 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
參數來按目標地址過濾。我的最終規則集如下: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 } }
這完美地工作。