방화벽과 함께 POSTROUTING/SNAT를 사용하는 방법은 무엇입니까?

방화벽과 함께 POSTROUTING/SNAT를 사용하는 방법은 무엇입니까?

아래 설명에 따라 CentOS-7-Router에서 방화벽을 사용하여 SNAT 설정을 시도했습니다.여기, 에서 보충됨칼 루퍼스는 설명했다, 하지만 난 결국 좋아하게 됐어에릭. 다른 문서도 읽었지만 제대로 작동하지 않아서 클라이언트 IP가 다른 소스 IP로 변환되었습니다.

둘 다

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp -o enp1s0 -d 192.168.15.105 -j SNAT --to-source 192.168.25.121

또는

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp -s 192.168.15.105/32 -j SNAT --to-source 192.168.25.121

"성공"을 제공합니다. firewall-cmd --reload나중에 하나 만들어 보겠습니다 . 그런데 표를 확인해 보니 iptables -t nat -nvL POSTROUTING규칙이 나와 있지 않습니다.

그러나 위 규칙 중 하나를 다시 적용하면 방화벽이 경고합니다. 예를 들어 Warning: ALREADY_ENABLED: rule '['-p', 'tcp', '-o', 'enp1s0', '-d', '192.168.15.105', '-j', 'SNAT', '--to-source', '192.168.25.121']' already is in 'ipv4:nat:POSTROUTING'소스 IP 192.168.15.105를 192.168.45.121로 위장하는 SNAT 기능이 작동하지 않습니다.

누군가 내가 뭘 잘못하고 있는지 설명해 줄 수 있을까요?


몇 시간 동안 고생한 후에도 여전히 DNAT/SNAT에 갇혀 있습니다. 지금은 iptables만 사용합니다.

1.) iptables -t nat -A PREROUTING -p tcp --dport 1433 -i enp1s0 -d 192.168.25.121 -j DNAT --to-destination 192.168.15.105

그리고

2.) iptables -t nat -A POSTROUTING -p tcp --sport 1433 -o enp1s0 -s 192.168.15.105/32 -j SNAT --to-source 192.168.25.121

따라서 다음과 같이 iptables -t nat -nvL PREROUTING표시됩니다.

pkts bytes target     prot opt in     out     source               destination         
129 12089 PREROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
129 12089 PREROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
129 12089 PREROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
0     0 DNAT       tcp  --  enp1s0 *       0.0.0.0/0            192.168.25.121       tcp dpt:1433 to:192.168.15.105

그리고

iptables -t nat -nvL POSTROUTING보여주다:

 pkts bytes target     prot opt in     out     source               destination         
   97  7442 POSTROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   97  7442 POSTROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
   97  7442 POSTROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 SNAT       tcp  --  *      enp1s0  192.168.15.105       0.0.0.0/0            tcp spt:1433 to:192.168.25.121

모두 완료되었습니다. 더 나은 설명은 다음과 같습니다.
-https://wiki.ubuntuusers.de/iptables2
-https://netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html
-https://serverfault.com/questions/667731/centos-7-firewalld-remove-direct-rule

하지만 여전히 iptraf-ng나열되어 있습니다. 여기에 이미지 설명을 입력하세요.

내부 인터페이스에서 외부 인터페이스로 ip_forwarding 이전(또는 이후)에 PREROUTING(또는 POSTROUTING)이 수행되지 않습니까?

답변1

#!/bin/bash
# Assuming that your Linux box has two NICs; eth0 attached to WAN and eth1 attached to LAN
# eth0 = outside
# eth1 = inside
# [LAN]----> eth1[GATEWAY]eth0 ---->WAN
# Run the following commands on LINUX box that will act as a firewall or NAT gateway
firewall-cmd --query-interface=eth0
firewall-cmd --query-interface=eth1
firewall-cmd --get-active-zone 
firewall-cmd --add-interface=eth0 --zone=external
firewall-cmd --add-interface=eth1 --zone=internal
firewall-cmd --zone=external --add-masquerade --permanent 
firewall-cmd --reload 
firewall-cmd --zone=external --query-masquerade 
# ip_forward is activated automatically if masquerading is enabled.
# To verify:
cat /proc/sys/net/ipv4/ip_forward 
# set masquerading to internal zone
firewall-cmd --zone=internal --add-masquerade --permanent
firewall-cmd --reload 
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --reload

답변2

여기에도 비슷한 답변이 있습니다.

https://www.server-world.info/en/note?os=CentOS_7&p=firewalld&f=2

nmcli를 사용하여 내부/외부 설정:

nmcli c mod ens224 connection.zone internal
nmcli c mod ens192 connection.zone external

하지만@brucemalouz대답은 더 유익합니다. 아직 방화벽에 익숙하지 않아서 기본/iptables 제안을 사용하기 시작했습니다.Linux를 게이트웨이로 사용하는 방법은 무엇입니까? Firewalld 기본 설정은 IP 체인을 다르게 사용하므로 항상 Firewalld를 사용하는 것이 가장 좋습니다.

미리보기를 제공해 주신 itraf-ng에게 감사드립니다.@jochen-gebsattel이것은 아주 작은 프로그램입니다.

관련 정보