마스커레이딩은 내부 네트웍의 각각의 가상 ip를 마스커레이딩
머신의 실제 ip로 번역해서 외부에 보내주고 이에 대한 응답(실제 ip)
을 다시 내부의 가상 ip로 보내주는 것입니다. tcp/udp 프로토콜은
응용프로그램이 기대하던 패킷을 올바르게 받을 수 있도록 포트라는
것을 이용하는데 이건 16비트(60000개쯤.)의 정보로 여유가 많으니까요...
tcp 데이터그램의 헤더에는 (호스트1의 ip+ 포트)+(호스트2의 ip+
포트) 의 한 쌍이 기록되어 있습니다... 그런데 마스커레이딩을 할 경우
내부네트웍에서 보낼때의 출발지포트와 ip는 단지 마스커레이딩 머신까지만
제대로 가고 기억(기억1)될 뿐 외부로 나갔을 때는 번역된 ip와 포트(실제
ip와 임의의 포트, 이건 기억 2)로 나가게 됩니다. 이에대한 응답
이 오면 (수신자포트가 기억 2와 일치하는..) 방금 기억되었던 기억2(내부
ip와 포트)로 전달해주는 것입니다.
그런데 이런 접근방식은 내부에서 외부로의 접속은 문제없이 해결할 수 있는
반면(내부에서 요청한 접속은 번역될수 있음..) 처음부터 외부에서 밑도끝도
없이 들어오는 xxx.xxx.xxx.xxx:80 이라는 요청에 대해서는 방법이 없는
것입니다. 외부에서 내부 서버로 직접 접근이 안되는 거죠..(번역이 안됨)
이런 경우에는 "실제아이피:특정포트--> 내부아이피:같은 포트" 이렇게
무조건적으로 번역해주는(기록단계가 없이..) 기능이 필요합니다. 이건
따로 설정해 줘야 하는 거죠.. 포트 포워딩이라고 하는데 몇가지 방법이
있는 것으로 알고 있습니다.
ipportfw 라는 유틸이 있는데.. 한번 연구해보시길..