以下是相关示例规则集,其中包含 2 个示例nftables
NAT 规则,这些规则将 IP 从虚拟机伪装到 LAN:
#!/usr/sbin/nft -f
add table nat_4
# Sees all packets after routing, just before they leave the local system
add chain nat_4 postrouting_nat_4 {
type nat hook postrouting priority srcnat; policy accept;
comment "Postrouting SNAT IPv4 traffic"
}
# Masquerade all packets going from VMs to the LAN/Internet
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade to :1024-65535
# Same rule as above but without [to :PORT_SPEC]
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade
示例 IP 地址192.168.122.0/24
是虚拟机运行的网络地址。
我明白了什么masquerade
,它SNAT
通过将源IP更改为出站接口IP来执行。
从这个意义上说,我理解上面示例中的第二条规则的作用。
我不明白的是 [to :PORT_SPEC] 声明(文档链接),在示例中(第一条规则):masquerade to :1024-65535
具体是masquerade to :1024-65535
做什么的,有必要具体说明吗?
这两条规则基本上相同还是有什么不同?
哪一个更适合通过本地主机上的虚拟交换机从虚拟机到互联网进行 NAT?
答案1
我认为如果您查看 iptables 目标的文档,事情会更清楚MASQUERADE
。从iptables-extensions(8)
:
假面舞会
[...]
--to-ports port[-port]
这指定了要使用的源端口范围,覆盖默认的 SNAT 源端口选择启发式(见上文)。仅当规则还指定以下协议之一时这才有效:tcp、udp、dccp 或 sctp。
NFT 规则中的选项to :PORT_SPEC
完成相同的任务:它指定用于伪装连接的源端口。