NAT: 인터넷을 삼켜버린 임시방편

1994년 NAT는 IPv6가 나올 때까지 시간을 버는 단기 패치로 제안됐다. 30년 뒤 그것은 없으면 안 되는 인프라가 됐고, 인터넷의 설계 원칙을 조용히 지웠으며, 너무 잘 작동한 나머지 자신의 대체제까지 지연시켰다.

우리에게 NAT를 준 문서는 그걸 단기 해법이라 불렀습니다. 본문에 그렇게 적혀 있습니다. 1994년 5월에 나온 RFC 1631은 네트워크 주소 변환을 진짜 해법 — 더 큰 주소 공간 — 이 올 때까지 시간을 버는 임시방편으로 설명했습니다. 엔지니어링 응급처치였죠: 인터넷은 IPv4 주소가 바닥날 참이었고, IPv6는 준비 안 됐고, 그동안 누군가 불을 켜놔야 했습니다.

그게 31년 전입니다. 그 “그동안”은 끝나지 않았습니다. NAT는 이제 거의 아무도 일부러 고르지 않았는데 없으면 안 되는, 가장 하중을 많이 받는 인프라입니다 — 당신 집 공유기에, 휴대폰의 통신사 링크에, 클라우드 VPC에, 사무실에 있습니다. 그리고 인터넷에 몇 년의 숨 쉴 틈을 벌어주는 과정에서, 인터넷이 근본적으로 무엇인지를 조용히 다시 썼습니다. 이건 임시여야 했던 한 임시방편이 자신이 땜질하던 아키텍처를 오히려 삼켜버린 이야기입니다.

NAT가 실제로 푼 문제

IPv4 주소는 32비트, 약 43억 개입니다. 1994년에도 이미 끝이 보였는데, 주소를 하나씩 나눠준 게 아니라 거대한 고정 크기 블록으로 할당한 탓에 낭비가 어마어마했기 때문입니다. 1993년 Paul Francis와 Tony Eng의 논문(주소 재사용 아이디어는 Francis가 Van Jacobson에게서 얻었다고 밝힘) 위에 세운 NAT 저자들의 답은 무뚝뚝하고 영리했습니다: 사설 네트워크 전체를 단 하나의 공인 주소 뒤에 숨기자. 안에선 아무도 못 보는 주소를 쓰고, 경계에선 변환기가 나가는 패킷의 출발지 주소를 그 하나의 공인 IP로 바꿔 쓰며 응답을 안쪽의 올바른 기계로 돌려보낼 만큼의 상태를 기억합니다.

RFC 1918(1996년 2월)은 이제 모두가 외우는 사설 대역 — 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 — 을 못 박았고, RFC 3022(2001년 1월)는 실제로 판을 장악한 버전을 형식화했습니다: 포트까지 변환해, 수백 대의 내부 기계가 포트 번호로 다중화하며 하나의 공인 주소를 공유하게 하는 것. 그게 당신 책상 위의 상자입니다. 공인 IP 하나, 그 뒤에 온 가정이나 사무실, 바깥 세상은 전혀 눈치 못 챕니다.

작동했습니다. 너무 잘 작동한 나머지 심판의 순간이 계속 안 왔습니다. IANA의 전 세계 IPv4 여유 풀은 2011년 2월 3일에 마침내 고갈됐고, ARIN은 2015년 9월 북미 여유 풀의 마지막 주소를 나눠줬습니다. 90년대 초의 모든 예측대로라면 인터넷은 그보다 몇 년 전에 벽에 부딪혔어야 했습니다. 그러지 않았죠, NAT가 유한한 풀로 거의 무한한 수의 기기를 감당하게 했으니까요. IPv4 고갈이 인터넷이 성장을 멈춘 날이 아니라 슬로모션 행정 이벤트였던 이유가 NAT입니다.

NAT가 조용히 지운 것

청구서에 안 찍히는 부분이 여기 있습니다. NAT는 주소를 아끼기만 한 게 아닙니다. 인터넷이 세워진 설계 원칙을 깼습니다.

1984년, Saltzer·Reed·Clark는 컴퓨팅에서 가장 조용히 영향력 있는 논문 중 하나인 “End-to-End Arguments in System Design”을 발표했습니다. 네트워크에 적용한 그 주장: 가운데는 멍청하게, 가장자리는 똑똑하게 두라. 네트워크의 일은 패킷을 옮기는 것이고, 지능·상태·기능은 종단(endpoint)에 속합니다. 초기 인터넷이 그토록 생성적이었던 이유가 이겁니다. 모든 기계가 진짜, 전 세계 라우팅 가능한 주소를 갖고 일급 피어였습니다. 어떤 호스트든 다른 어떤 호스트와 직접 대화했습니다. 서버를 돌리는 데 허락을 구하지 않았습니다 — 그냥 돌리면 네트워크가 배달했습니다.

NAT는 그것의 부정입니다. NAT 상자는 가운데 앉은 상태를 가진 지능적 존재이고, 규칙을 근본적으로 바꿉니다: 나가는 연결은 되고, 들어오는 연결은 안 됩니다. NAT 뒤의 기계는 손을 뻗을 수 있지만, NAT가 명시적으로 예상하라고 지시받지 않은 한 인터넷의 어떤 것도 안으로 닿을 수 없습니다. 대칭성이 사라졌습니다. 종단간 인터넷에선 모든 호스트가 피어였고, NAT 인터넷에선 대부분 호스트가 클라이언트이며, 닿을 수 있다는 것 — 서버가 된다는 것 — 은 따로 마련해야 하는 특권이 됐습니다. 우리가 눈치 못 챈 건 클라이언트/서버 웹이 대부분 사람이 원한 전부이기 때문입니다. 하지만 인터넷이 될 수 있었던 것의 한 세대 전체 — 손쉬운 P2P, 모든 기기가 주소 지정 가능, 경로에 문지기 없음 — 가 공유기 하나씩, 설계에서 빠져나갔습니다.

돌아오지 않는 주소

적어도 당신의 공인 주소 하나는 갖고 있다고 생각한다면 다시 확인하세요. 풀이 말라가자 ISP들은 당신이 노트북에 하는 짓을 당신에게 하기 시작했습니다: 여러 고객을 하나의 공인 IP 뒤에 넣기. RFC 6598(2012)은 100.64.0.0/10 — “공유 주소 공간” — 을 도려내, 통신사가 이미 집 안에 있는 192.168 주소와 충돌 없이 Carrier-Grade NAT를 돌릴 수 있게 했습니다. CGNAT 아래에서 당신은 두 겹의 변환 뒤에 있습니다: 공유기가 기기들을 NAT하고, ISP가 당신 공유기를 NAT합니다. 공인 주소가 아예 없는 경우가 잦습니다. 낯선 이들과 하나를 공유합니다.

대역폭이 싸졌는데도 게임 서버 호스팅, 깨끗한 포트포워딩, 들어오는 연결을 기대하는 무언가가 세월과 함께 조용히 더 어려워진 이유가 이겁니다. 착각이 아닙니다. 발밑의 주소 공간이 더 붐비게 됐고, NAT의 각 계층은 “그냥 나한테 직접 연결해”가 할 수 없는 일이 되는 또 하나의 자리입니다.

영상통화마다 내는 세금

들어오는 연결이 NAT를 통과하지 못하기에, 오직 그것을 뚫기 위해 존재하는 우회 프로토콜 발판 전체가 있습니다 — 그리고 당신은 그걸 모른 채 하루에 수십 번 돌립니다. 영상통화 중인 두 사람이 직접 미디어 경로가 필요할 때, 둘 다 NAT 뒤에 있어 그냥 연결할 수 없습니다. 그래서 의식을 치릅니다: STUN 서버가 각 기기에 바깥에서 본 공인 주소가 어떻게 보이는지 알려주고, 둘은 홀 펀칭이라는 기법으로 동시에 서로에게 패킷을 쏘며 자기 나가는 트래픽이 만든 순간적 매핑을 이용합니다. 그게 실패하면 — 더 엄격한 “대칭형” NAT 뒤에선 실패합니다 — 통화는 TURN 릴레이로 물러납니다: 양쪽이 닿을 수 있는 가운데 서버가, 두 종단이 도저히 서로 못 닿기에 모든 오디오·비디오 바이트를 대신 전달합니다. ICE는 이 모든 경로를 시도해 되는 하나를 고르는 프레임워크입니다.

다시 읽어보세요. 두 컴퓨터가 서로 대화하게 하려고 — 인터넷이 말 그대로 하도록 설계된 그 일 — 우리는 이제 주소 발견 서버, 타이밍 트릭, 대역폭을 먹는 릴레이를 배치합니다. 그게 NAT 세금입니다. 지연으로, 서버 비용으로, 지금껏 나온 모든 실시간 애플리케이션의 아득한 복잡성으로 냅니다. 종단간 인터넷은 이 중 아무것도 필요 없었습니다, 가운데서 주소를 다시 쓰는 상자가 없었으니까요.

IPv6가 30년 걸린 이유

IPv6 — 128비트 주소, 모래 한 알마다 자기 서브넷을 줄 만큼 넉넉한 — 는 90년대 후반부터 존재했습니다. Google의 측정은 네이티브 IPv6가 2026년 3월 28일 처음으로 사용자의 50%를 넘었다고 보여줍니다. 배치를 진지하게 밀기 시작한 지 18년 만에 IPv6가 드디어 절반에 도달했습니다. 절반. 모두가 존재적 문제라고 동의한 문제를 푸는, 엄격히 더 나은 프로토콜이 말이죠.

이유는 NAT이고, 거의 웃깁니다. IPv6의 킬러 기능은 “우리는 주소가 바닥났고 당신에겐 선택지가 없다”여야 했습니다. 그런데 NAT가 조용히 “선택지 없음” 부분을 없앴습니다. 주소 부족을 견딜 만하게, 그다음 편안하게, 그다음 보이지 않게 만들었죠. 당신 NAT 상자가 이미 숨기는 문제를 위해 듀얼 스택 마이그레이션의 고통을 왜 견디겠습니까? NAT가 작동한 해마다 IPv6를 향한 절박함이 새어 나갔습니다. 임시방편은 자기 대체제를 지연시키기만 한 게 아닙니다 — 응급 상황이 결코 응급으로 느껴지지 않을 만큼 충분히 좋음으로써, 대체할 동기 자체를 적극적으로 무너뜨렸습니다.

죽여야 할 통념

30년간 사람들이 우겨왔음에도 NAT가 아닌 것 하나: 보안 기능. 그래요, 요청하지 않은 들어오는 연결은 NAT 뒤 기계에 닿지 못하고, 그게 일부 스캔 소음을 막습니다. 하지만 그건 주소 변환의 작동 방식이 만든 우연이지 누가 설계한 보안 경계가 아니며, 포트포워딩을 설정하거나 UPnP를 돌리거나 나가는 방향을 신뢰하는 순간 무너집니다 — 그리고 거의 모든 실제 공격은 어차피 거기 삽니다. “나는 NAT 뒤에 있다”를 “나는 보호받는다”로 취급하는 것이 진짜 분할 없는 평평한 내부 네트워크가 만들어지는 방식이고, 감염된 노트북 하나가 나쁜 오후로 번지는 방식입니다. NAT는 당신 주소를 숨깁니다. 방어하지 않습니다. 그건 다른 일이고, 방화벽 — 당신이 쓴 실제 정책을 가진 것 — 이 두 번째 일을 합니다.

이 이야기가 실제로 말하는 것

이걸 한탄으로 읽기 쉽지만, 한탄이 아닙니다. NAT는 인터넷이 정면으로 향하던 벽에서 구해낸 진정 훌륭한 엔지니어링이었습니다. 불편한 교훈은 더 미묘합니다: 작동하는 임시 해법이 우리가 짓는 것 중 가장 영구적입니다. 그저 작동하는 패치는 더 나은 게 나타나면 교체됩니다. 아름답게 작동하는 패치는 하중을 받게 되고, 그 위에 생태계 전체가 쌓이고, 자기 교체를 몰아붙였을 고통을 지우고, 30년 뒤 토대와 구분되지 않습니다.

NAT는 몇 년을 벌어야 했습니다. 대신 시간을 너무 많이 벌어 건물 자체를 바꿔버렸습니다. 진짜 해법이 준비 안 됐다고 다음번 임시방편에 손을 뻗을 때 — 그럴 겁니다 — 인터넷이 2026년에도 여전히 1994년의 그것 위에서 돌아간다는 걸 기억할 만합니다. 그 “그동안”이 이제 우리가 사는 곳입니다.

토론 참여

← 블로그로 돌아가기