내 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 체인에서 특정 작업을 수행해야 하는 경우 새로운 질문을 해주세요.