Ubuntu

IPTables 源 NAT (SNAT) 到 /etc/ufw/before.rules

  • August 19, 2020

我需要在 Ubuntu 18.04 伺服器中的兩個介面之間獲取 NAT (SNAT) 流量。我一直在嘗試使用“/etc/ufw/before.rules”文件來實現我的各種 NAT 需求,到目前為止一切順利……直到現在。

以下 iptables 命令似乎完全符合我的需要:

iptables -j SNAT -t nat -I POSTROUTING 1 -o eth0 -d 192.168.1.0/24 -s 172.18.0.0/16 --to-source 10.136.0.2

這條規則是否可以很容易地轉換為“/etc/ufw/before.rules”文件中的配置?與更常見的過濾規則相比,UFW NAT 配置的手冊頁似乎有點缺乏。

背景:我正在對一些 docker/container 流量進行源 NAT,以使用 StrongSwan 通過 IPSec 策略隧道發送。如果沒有前面提到的 iptables 規則,我可以讓流量從 VPN 路由到容器,但來自容器的流量會下降。

eth0 是我的“公共”介面 IP 1.2.3.4,eth1 是我的“私有”介面 IP 10.136.0.2

這是我在“/etc/ufw/before.rules”文件中已經擁有的*nat 配置,用於獲取流量(減去來自 docker 的流量):

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24  -d 10.136.0.0/16 -j MASQUERADE
-A POSTROUTING -s 192.168.1.0/24  -d 172.18.0.0/16 -j MASQUERADE
COMMIT
#

如果您已經iptables手動添加了此規則,那麼您可以before.rules通過執行找到其正確的格式和添加位置:

# sudo iptables -t nat -S
...
-A POSTROUTING -s 172.18.0.0/16 -d 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.136.0.2
...

引用自:https://serverfault.com/questions/1030699