두 개의 네트워크 인터페이스를 갖춘 게이트웨이처럼 작동하는 컴퓨터가 있습니다.
eth0
랜: 192.168.1.0/24eth1
WAN:XXX.XXX.XXX.XXX
(내 공개 IP)
이 머신에는 virtualbox에 3개의 VM 게스트가 있습니다. 이들 모두에는 브리지된 네트워크가 있으며 DNS에서 제공하는 고정 IP가 있습니다.
나는 다음과 같은 iptables를 가지고 있습니다
*filter
-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Rules a webserver VM
*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A PREROUTING -d XXX.XXX.XXX.XXX/32 -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.100
-A POSTROUTING -s 192.168.1.100/32 -j SNAT --to-source XXX.XXX.XXX.XXX
LAN에서는 가상 머신에 액세스할 수 있지만 WAN에서 가상 머신에 액세스하려고 하면 작동하지 않습니다. 뭐가 문제 야?
답변1
필터 테이블의 FORWARD에 대한 기본 정책이 DROP이라고 가정하는 것이 맞습니까? (그렇지 않은 경우 어쨌든 모든 것을 수락하므로 이 두 가지 필터링 규칙은 의미가 없습니다.)
이 가정이 맞다면 문제는 새 패킷을 가상 머신에 전달하는 ACCEPT 규칙이 누락된 것입니다. 다음 규칙을 추가하세요.
iptables -A FORWARD -i eth1 -o eth0 -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
그런데 VM에서 들어오는 패킷에 대한 SNAT 규칙은 중복됩니다. 이미 eth1을 통해 나가는 모든 패킷을 스푸핑하고 있습니다.