iptables NAT 규칙을 사용하여 포트를 전달하려고 하는데 작동하지 않는 것 같습니다.
따라서 특정 포트 범위의 NAT#1에서 서버 그룹의 특정 서버로 트래픽이 이동하고 NAT#2에서 다른 서버 그룹으로 트래픽이 이동하기를 원합니다.
SNAT에 "NAT 서버" 192.168.1.10을 사용해야 합니다. 그렇지 않으면 방화벽이 트래픽을 삭제합니다.
"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
고쳐 쓰다
SNAT에 "NAT 서버" 192.168.1.10을 사용해야 합니다. 그렇지 않으면 방화벽이 트래픽을 삭제합니다.
이런 종류의 작품입니다.
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 문서에 적힌 대로,
규칙은 특정 영역과 연관되어 있습니다. 영역에는 여러 규칙이 있을 수 있습니다. 일부 규칙이 상호 작용하거나 모순되는 경우 패킷과 일치하는 첫 번째 규칙이 적용됩니다.
그래서 두 가지 영역을 사용해야합니다. 두 개의 별칭을 사용하여 이 작업을 수행할 수 있습니까? ! ?
고쳐 쓰다
이것은 작동합니다 ...
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 규칙이 필요할 수도 있습니다.