iptables를 사용하여 외부 DMZ IP에서 NAT IP로 모든 것을 전달

iptables를 사용하여 외부 DMZ IP에서 NAT IP로 모든 것을 전달

이에 대해 많은 질문이 있다는 것을 알고 있지만 여전히 작동하도록 애쓰고 있습니다.

3개의 외부 IP가 있는 방화벽이 있습니다. (보안을 위해 IP는 무작위로 변경되었습니다.)

eth0      Link encap:Ethernet  HWaddr 50:46:5d:64:ed:e4  
          inet addr:51.215.232.147  Bcast:51.215.232.159  Mask:255.255.255.240
          inet6 addr: fe80::5246:5dff:fe64:ede4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:70219084 errors:0 dropped:17443 overruns:0 frame:0
          TX packets:63956103 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:51508818511 (51.5 GB)  TX bytes:27933240304 (27.9 GB)

eth0:1    Link encap:Ethernet  HWaddr 50:46:5d:64:ed:e4  
          inet addr:51.215.232.148  Bcast:51.215.232.159  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth0:2    Link encap:Ethernet  HWaddr 50:46:5d:64:ed:e4  
          inet addr:51.215.232.150  Bcast:51.215.232.159  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

그리고 저는 다음과 같은 간단한 규칙을 가지고 있습니다.

# Generated by iptables-save v1.4.10 on Sat Mar  3 14:48:42 2012
*filter
:INPUT ACCEPT [13766:4986720]
:FORWARD ACCEPT [992:122980]
:OUTPUT ACCEPT [11894:5582822]
-A FORWARD -s 172.16.0.0/16 -o eth0 -j ACCEPT 
-A FORWARD -d 172.16.0.0/16 -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
COMMIT
# Completed on Sat Mar  3 14:48:42 2012
# Generated by iptables-save v1.4.10 on Sat Mar  3 14:48:42 2012
*nat
:PREROUTING ACCEPT [77:8206]
:INPUT ACCEPT [48:6367]
:OUTPUT ACCEPT [55:3300]
:POSTROUTING ACCEPT [55:3300]
-A POSTROUTING -s 172.16.0.0/16 -o eth0 -j MASQUERADE 
-A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE 
-A POSTROUTING -s 10.1.0.0/16 -o eth0 -j MASQUERADE 
COMMIT
# Completed on Sat Mar  3 14:48:42 2012

그래서 51.215.232.150의 모든 것을 내부 IP 172.16.5.218로 전달하고 싶습니다.

그래서 나는 이것이 효과가 있을 것이라고 생각했습니다:

iptables  -t nat -I PREROUTING -p tcp -d 51.215.232.150 -j DNAT --to 172.16.5.218

하지만 아쉽게도 그렇지 않습니다.

미리 감사드립니다. 에드워드

답변1

일반적으로 FILTER 테이블을 통한 트래픽을 실제로 허용하려면 해당 FORWARD 규칙이 필요하다고 말합니다.

iptables  -A FORWARD -p tcp -d 172.16.5.218 -j ACCEPT

그러나 FORWARD 테이블의 정책은 이미 ACCEPT이고 REJECT 또는 DROP 규칙이 없으므로 OK를 거쳐야 합니다.

패킷이 어디로 가는지 확인하려면 TRACE 규칙을 추가해 보세요.

iptables -t raw -I PREROUTING -p tcp -d 51.215.232.150 -j TRACE

또, 어떻게 테스트하고 있나요? 실제로 상자에 도달하는 트래픽을 볼 수 있나요?

tcpdump -lnn -i eth0 host 51.215.232.150

관련 정보