2.8.1 NAT 투과
이처럼 NAT는 인터넷 사용자에게 있어 아주 환상적인 기능이다. 하지만 멀티플레이어 게임 개발자에겐 아주 골치 아픈 존재이기도 하다. 요즘 인터넷 사용자 중에 컴퓨터나 게임기를 NAT에 연결해 쓰지 않는 사람이 거의 없으므로, 그림 2-21과 같은 경우도 아주 흔하다. 여기서 플레이어 A가 NAT A에 연결된 호스트 A에 서버를 띄워두고 친구인 플레이어 B를 초대한다. 플레이어 B는 NAT B에 연결된 호스트 B로 접속하려는데, NAT 때문에 B가 호스트 A에 접속할 방법이 없다. 호스트 B가 패킷을 호스트 A에 보내 접속하려 하면 B의 정보가 A의 NAT 테이블에 없기 때문에, 그 패킷은 그냥 폐기처리 된다.
▲ 그림 2-21 게이머끼리 NAT을 거쳐 통신할 때 문제
소위 NAT 투과(NAT traversal)라 하여, 이를 해결하는 몇 가지 방법이 있다. 첫째는 플레이어 A가 직접 공유기를 건드려 포트 포워딩 설정을 해 주는 것이다. 이는 어느 정도 기술 지식이 있어야 하므로 일반 플레이어가 하기엔 어려울 수도 있다. 둘째는 훨씬 세련되고 교묘한 방법으로, 바로 STUN(simple traversal of UDP through NAT)26이라 부르는 기법이다.
26 역주 실무에선 STUN이라는 용어 대신 TCP에서 쓰는 홀 펀칭(hole punching)으로 묶어 부르기도 한다.