안녕하세요!
iptables로 nat를 활성화하고 외부에서 내부 사설IP로 Ping test했을 경우에 대해 문의드리려고 합니다.
일단 iptables 정책설정은 다음과 같습니다.
$iptables -S
-A FORWARD -i external -o internal -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i internal -o external -j ACCEPT
$iptables -t nat -S
-A POSTROUTING -s 192.168.0.0/24 -o external -j MASQUERADE
문의드리고자 하는 것은 NAT를 활성화했을 때 외부에서 내부 사설IP로 Ping test를 하면 안되어야 할 것 같은데 잘된다는 겁니다. 외부에서 NAT 사설IP로 보내어진 ICMP에 대한 응답으로, 내부 사설IP에서 출발한 Reply ICMP Packet이 NAT를 통과하며 Source IP가 공인IP로 교체되어야 할 것 같은데 교체되지 않고 사설IP 그대로 패킷이 통과합니다.
물론 내부 사설IP에서 외부로 Ping test했을 때 Echo-request, Reply ICMP Packet에 모두 NAT가 적용된 것을 확인했습니다.
질문은 크게 두 가지입니다.
1. 외부에서 내부 사설IP로 Ping test했을 때 Echo-request ICMP가 무사히 도착하는 것이 정상인가요?
2. 내부 사설IP에서 외부로 나가는 Echo-request ICMP는 NAT가 적용되는 반면, 내부 사설IP에서 외부로 나가는 Reply ICMP에는 왜 NAT가 적용되지 않는 걸까요?
안녕하세요. 작성하신 글의 내용으로 보아서는 전체적인 시험망의구성, 어떤 NAT (NAPT?)를 하고 싶으신 건지 잘 와 닿지 않습니다.
1. 외부에서 내부 사설IP로 Ping test했을 때 Echo-request ICMP가 무사히 도착하는 것이 정상인가요?
=> 정상이 아닙니다. 시험하신 망의 route설정과 ARP learning 상태를 확인 해 보아야 하겠지만, 일반적으로 생각해서... 외부의 공인IP에서 사설의 IP로 ping을 쏘게되는 경우 internet상의 무수히 많은 같은 대역의 사설IP중 어디로 가야 할지 알 수 없어서 대개의 경우 공인IP의 시스템에서 packet이 나오지도 못합니다. 글쓰신 분의 경우에서는 비교적 간단한 시험망의 구성에서 이미 destination route (or interface)가 우연히? learning 이 되어 있는 환경에서 사설IP로 ping을 수행하셨을 때, 공인IP의 시스템은 사설IP로의 route정보나 MAC정보를 알고 있어 ping packet forwarding 되신 경우라 할수 있겠읍니다.
2. 내부 사설IP에서 외부로 나가는 Echo-request ICMP는 NAT가 적용되는 반면, 내부 사설IP에서 외부로 나가는 Reply ICMP에는 왜 NAT가 적용되지 않는 걸까요?
=> 원하시는 것이 양방향 NAT를 원하신다면, 각각의 방향으로의 iptables 설정이 되어야 할 것 같습니다. 위의 내용으로 보아서는 192.168.x.x 사설대역에서 공인IP대역 방향으로의 rule만 적용하신 것으로 보입니다.