network / knowledge
SNAT와 MASQUERADE를 나눠 쓰는 기준
둘 다 나가는 패킷의 출발지 IP를 바꾸는 것이고, 둘 다 nat 테이블의 POSTROUTING에서 동작한다. 차이는 하나뿐이다.
SNAT는 바꿀 IP를 직접 적는다.
$ iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.10
MASQUERADE는 나가는 인터페이스의 현재 IP를 알아서 쓴다.
$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
어느 쪽을 쓸까
IP가 바뀔 수 있는 환경이면 MASQUERADE다. PPPoE나 DHCP로 주소를 받는 집 회선이 여기 해당한다. SNAT로 IP를 박아두면 주소가 바뀌는 순간 나가는 패킷의 출발지가 존재하지 않는 IP가 되어 전부 죽는다.
고정 공인 IP가 있으면 SNAT가 낫다. MASQUERADE는 패킷마다 인터페이스의 현재 주소를 확인하므로 그만큼 일이 더 든다. 그리고 인터페이스가 내려갔다 올라오면 관련 연결 추적을 버리는데, 고정 IP 환경에서는 그럴 이유가 없다.
집 서버는 회선 주소가 바뀔 수 있어 MASQUERADE를 쓰고 있다. 성능 차이는 이 규모에서 체감되지 않는다.