IPTables 전달 및 MASQ가 작동하지 않음

IPTables 전달 및 MASQ가 작동하지 않음

내 VM 시스템에 대한 트래픽 전달 및 NAT를 설정하려고 합니다. 2개의 Linux 운영 체제(예: Ubuntu 및 CENTOS)가 있는 환경을 설정 중이며 트래픽을 Ubuntu에서 CENTOS로 전달하고 CENTOS의 다른 인터페이스로 NAT해야 합니다. CENTOS에서 다음 구성을 찾으십시오.

ens33 :- Internal Interface
ens34 :- External Interface

CENTOS와 Ubuntu가 연결되어 있습니다(가상 머신의 호스트 어댑터). 다음 출력은 CENTOS에 대한 것입니다.

root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.251.2    0.0.0.0         UG    101    0        0 ens34
172.16.251.0    0.0.0.0         255.255.255.0   U     101    0        0 ens34
192.168.6.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

CENTOS의 IPtables에서 다음 트래픽 전달 및 NAT 구성을 완료했습니다.

*nat
:PREROUTING ACCEPT [1030:71552]
:INPUT ACCEPT [4:848]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth34 -j MASQUERADE


*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [269:27758]
**-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT**
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
**-A FORWARD -i ens33 -o ens34 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens34 -o ens33 -j ACCEPT**
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

cat /proc/sys/net/ipv4/ip_forward
1

Ubuntu에서 CENTOS로 트래픽이 전달되는 트래픽을 확인했지만 NAT 및 전달이 작동하지 않는 것 같습니다.

192.168.6.2(Ubuntu 시스템의 IP 주소)

03:54:20.331164 IP 192.168.6.2 > 8.8.8.8: ICMP echo request, id 34419, seq 791, length 64
03:54:21.339241 IP 192.168.6.2 > 8.8.8.8: ICMP echo request, id 34419, seq 792, length 64

답변1

FORWARD 규칙에서 내부 인터페이스와 외부 인터페이스를 교체했습니다. 설정에서

-A FORWARD -i ens33 -o ens34 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens34 -o ens33 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

ens33열려고 하는 연결(Ubuntu 시스템에서 가정)에서 들어오는 패킷은 첫 번째 줄과 일치합니다. 그러나 연결이 설정되지 않으며 패킷은 마지막 라인에서 거부됩니다.

당신에게 필요한 것은

-A FORWARD -i ens34 -o ens33 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens33 -o ens34 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

또는 다음과 같은 자리 표시자를 사용하여 셸 스크립트를 만드는 것이 더 좋습니다.

INTIF=ens33
EXTIF=ens34
# flush rules
iptables -F FORWARD 
iptables -t nat -F
# rules
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
# more rules if required

그런 다음 혼동하지 않고 다양한 인터페이스를 사용하여 다양한 상황에서 재사용할 수 있습니다.

INPUT 체인에서 무엇을 하려는지 모르겠습니다. 디버깅을 단순화하려면 이러한 규칙을 모두 제거하는 것이 좋습니다. 이러한 규칙 없이 전달이 작동하고 여전히 INPUT 체인에서 특정 작업을 수행해야 하는 경우 새로운 질문을 해주세요.

관련 정보