我正在尝试使用 iptables NAT 规则转发端口,但它似乎不起作用。
因此,我希望来自特定端口范围内的 NAT#1 的流量转到服务器组中的特定服务器,并将来自 NAT#2 的流量转到另一个服务器组。
我必须使用“NAT 服务器”192.168.1.10 作为 SNAT,否则防火墙将丢弃流量。
我在“NAT 服务器”上尝试了以下操作,
Example A - NAT#1 port 4000 to Server Group A
sudo iptables -t nat -A PREROUTING -p tcp -d 192.168.1.20 --dport 4000 -j DNAT --to-destination 192.168.1.100
sudo iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to 192.168.1.10
Example B - NAT#2 port 5000 to Server Group B
sudo iptables -t nat -A PREROUTING -p tcp -d 192.168.1.30 --dport 5000 -j DNAT --to-destination 192.168.1.201
sudo iptables -t nat -A POSTROUTING -s 192.168.1.201 -j SNAT --to 192.168.1.10
更新
我必须使用“NAT 服务器”192.168.1.10 作为 SNAT,否则防火墙将丢弃流量。
这有点有效。
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 destination address=192.168.1.20 forward-port port=4000-4010 protocol=tcp to-addr=192.168.1.100'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 destination address=192.168.1.30 forward-port port=4000-4010 protocol=tcp to-addr=192.168.1.200'
sudo firewall-cmd --reload
但不适用于一个区域。正如他们在 RedHat 防火墙文档中所写的那样,
规则与特定区域相关联。一个区域可以有多个规则。如果某些规则相互作用或矛盾,则应用与数据包匹配的第一条规则。
所以我必须使用两个区域。这可以用两个别名吗?!?
更新
这有效...
firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -p tcp -m tcp -d "nat_alias" --dport "ext_port" -j DNAT --to-destination "server_ip":"int_port"
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -m state -p tcp -d "server_ip" --dport "int_port" --state NEW,ESTABLISHED,RELATED -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -t nat -p tcp -m tcp -s "server_ip" --sport "int_port" -j SNAT --to-source "nat_ip"
答案1
在使用 NAT/SNAT ip 地址转发端口之后,您应该先进行 NAT/SNAT。也许您需要单独的 iptable 规则。