사설 IP와 RFC 1918: 192.168과 10.0이 특별한 이유

사설 IP와 RFC 1918: 192.168과 10.0이 특별한 이유

집에서 공유기 관리자 페이지에 들어가려고 IP를 쳐본 적 있으시죠? 대부분 192.168.0.1이나 192.168.1.1 같은 주소일 겁니다. 회사 사내망에 들어가 보면 10.0.0.5 같은 주소를 받고요. 그런데 인터넷의 평범한 사이트들 IP는 또 52.x.x.x203.0.113.x처럼 전혀 다른 모양이에요.

왜 어떤 IP는 집 안에서만 보이고, 어떤 IP는 전 세계에서 보일까요? 이 구분을 만들어 준 게 바로 RFC 1918이라는 표준 문서입니다. 이번 포스팅에서는 사설 IP 주소가 왜 필요했는지, 어떤 대역이 정해져 있는지, 그리고 자주 마주치는 127.0.0.1 같은 루프백 주소까지 함께 정리해보겠습니다.

IP 주소가 모자라다

IPv4 주소는 32비트로 표현되니까 이론상 총 약 43억 개(2^32)가 존재합니다. 1980년대에 인터넷이 막 자리 잡을 때만 해도 “어차피 다 못 쓰겠지”라는 분위기였는데요. PC가 보급되고, 휴대폰이 인터넷에 연결되고, 가전제품까지 IP를 달기 시작하면서 이 숫자가 빠르게 줄어들었습니다. 실제로 2011년에 IANA의 IPv4 풀이 완전히 고갈됐고, 지금은 신규 할당이 거의 불가능한 상태예요.

해법은 두 갈래로 나뉘었습니다. 하나는 IPv6이라는 더 큰 주소 체계로 갈아타는 장기 전략이고, 다른 하나는 IPv4를 더 쪼개서 알뜰하게 쓰자는 단기 전략입니다. RFC 1918은 후자의 핵심 도구예요.

아이디어는 단순합니다. “세상에 있는 모든 기기가 인터넷에서 직접 보일 필요는 없다”는 거죠. 집 안 노트북이나 회사 데스크톱은 외부 인터넷에 나갈 때만 공인 IP를 빌려 쓰고, 평소에는 내부에서만 쓰는 별도 주소를 쓰면 됩니다. 같은 주소를 전 세계 수많은 가정과 회사가 동시에 써도 충돌이 안 나는 이유는 공인 인터넷에서는 보이지 않게 약속했기 때문이에요.

RFC 1918이 정의한 세 대역

RFC 1918은 1996년에 발행된 표준으로, 사설망(private network)에서만 사용하기로 약속한 세 개의 IP 대역을 지정합니다.

RFC 1918 사설 IP 대역
10.0.0.0    – 10.255.255.255    (10.0.0.0/8)
172.16.0.0  – 172.31.255.255    (172.16.0.0/12)
192.168.0.0 – 192.168.255.255   (192.168.0.0/16)

세 대역의 차이는 단순히 얼마나 많은 주소를 품을 수 있느냐입니다.

10.0.0.0/8은 약 1,677만 개의 주소를 가집니다. 대규모 기업, 클라우드 사업자, 통신사처럼 수만 대 이상의 기기를 한 사설망에 묶어야 하는 곳이 자주 씁니다. AWS VPC, Google Cloud의 기본 네트워크 같은 곳도 이 대역을 즐겨 쓰죠.

172.16.0.0/12는 약 104만 개의 주소를 제공합니다. 중간 규모 사내망에 적당한 크기인데, 세 대역 중 가장 덜 알려져 있어서 충돌 가능성이 낮다는 장점이 있습니다. Docker가 기본 브리지 네트워크에 172.17.0.0/16을 쓰는 것도 이 대역에 속하는 선택이에요.

192.168.0.0/16은 약 6만 5천 개의 주소를 가집니다. 가정용 공유기와 소규모 오피스에서 거의 표준처럼 쓰는 대역인데요. 공유기가 보통 192.168.0.1이나 192.168.1.1을 자기 주소로 잡고, 그 아래 기기들에 192.168.0.2, 192.168.0.3처럼 순서대로 IP를 나눠줍니다.

CIDR 표기법 짧게 이해하기

위에서 등장한 /8, /12, /16 같은 표기는 CIDR(Classless Inter-Domain Routing) 표기법이라고 부릅니다. 숫자 뒤에 붙은 슬래시 다음 값은 “앞에서부터 몇 비트가 네트워크 주소이고, 나머지는 호스트에게 배정된다”는 뜻이에요.

예를 들어 192.168.0.0/16은 앞 16비트(192.168)가 네트워크 식별자로 고정되고, 뒤 16비트(0.0 ~ 255.255)는 자유롭게 할당할 수 있는 영역이라는 의미입니다. 그래서 2^16 = 65,536개의 주소를 담는 거죠.

비슷한 방식으로 /82^24 = 16,777,216개, /122^20 = 1,048,576개의 주소를 의미합니다. 숫자가 작을수록 네트워크가 크고, 클수록 작아진다는 점만 기억하면 충분합니다.

어느 대역을 골라야 할까

세 대역 중 어느 걸 써도 기능적으로는 같은데요. 실무에서 굳이 차이를 두자면 두 가지를 고려합니다.

먼저 규모를 봅니다. 앞서 말한 것처럼 호스트 수가 늘어날 가능성이 있다면 더 큰 대역을 잡아두는 게 안전합니다. 나중에 모자라서 다른 대역으로 마이그레이션하는 건 꽤 고통스러운 일이거든요.

그리고 다른 망과의 충돌도 따져봐야 해요. 사내망과 VPN, 클라우드 VPC를 동시에 운영하다 보면 양쪽 IP 대역이 겹치는 순간 라우팅이 꼬여버립니다. 예를 들어 사무실 와이파이가 192.168.1.0/24인데 출장지에서 묵은 호텔 와이파이도 192.168.1.0/24라면, 그 둘을 이어주는 VPN이 어느 쪽으로 패킷을 보내야 할지 결정할 수 없어요. 그래서 회사들이 일부러 잘 안 쓰는 172.16.0.0/12 대역에서 어디 한 구석을 잡거나, 10.x.x.x 안에서도 흔치 않은 숫자 조합을 골라 쓰는 경우가 많습니다.

루프백 대역: 127.0.0.0/8

RFC 1918과는 별개로, 거의 모든 개발자가 매일 마주치는 또 하나의 특별한 대역이 있습니다. 바로 루프백(loopback) 대역인 127.0.0.0/8인데요.

이 대역은 네트워크 어댑터를 거치지 않고 같은 컴퓨터 내부에서만 통신하는 용도로 쓰입니다. 가장 자주 등장하는 127.0.0.1이 흔히 “이 컴퓨터 자기 자신”을 가리키고, localhost라는 이름도 보통 이 주소로 매핑되죠. 대역 전체가 루프백이라 127.0.0.1뿐 아니라 127.1.2.3 같은 주소도 모두 자기 자신을 가리킵니다.

루프백은 평소에는 잘 드러나지 않다가도 IPv6 환경 차이, 바인딩 실수, 보안 경계 같은 주제에서 자주 발목을 잡는 영역이에요. 이 부분은 localhost와 127.0.0.1의 관계 글에서 따로 자세히 풀어두었으니 함께 참고하시면 좋습니다.

여담으로 DNS 리바인딩 공격이 노리는 표적도 주로 이 127.0.0.1과 RFC 1918 사설 IP 대역에 살고 있는 서비스들이에요. “외부에서는 못 들어오겠지”라는 가정 하나로 인증을 느슨하게 걸어둔 서비스가 워낙 많거든요.

그 밖의 특별한 IP 대역

자주 마주치지는 않지만 알아두면 좋은 특수 대역도 몇 개 있습니다.

169.254.0.0/16링크 로컬(link-local) 대역이라고 부릅니다. DHCP 서버를 못 찾았을 때 운영체제가 임시로 자기에게 할당하는 주소예요. 와이파이가 잡히지 않아 인터넷이 안 될 때 노트북 IP가 169.254.x.x로 뜨는 걸 본 적이 있으실 텐데, 그게 이 대역입니다.

100.64.0.0/10CGNAT(Carrier-Grade NAT) 대역인데요. 통신사가 가입자에게 공인 IP를 모두 줄 수 없을 때, 가입자들끼리는 내부 NAT로 묶고 외부와는 또 다른 NAT로 한 번 더 변환하는 구조에서 사용합니다. 모바일 인터넷이나 일부 가정용 인터넷에서 IP를 확인했을 때 100.x.x.x가 뜬다면 CGNAT 환경일 가능성이 높습니다.

224.0.0.0/4멀티캐스트(multicast) 대역이고, 0.0.0.0은 “모든 인터페이스”라는 특수 의미를 가집니다. 서버를 0.0.0.0:3000에 바인딩한다는 건 “이 머신의 모든 네트워크 인터페이스에서 3000 포트를 열겠다”는 뜻이죠.

NAT가 사설망과 인터넷을 잇는다

마지막으로 짚고 넘어갈 게 있습니다. 사설 IP는 정의상 외부 인터넷에서 보이지 않는데, 그럼 우리 집 노트북은 어떻게 구글에 접속할까요? 바로 NAT(Network Address Translation) 덕분입니다.

집 공유기는 안쪽으로는 192.168.0.1이라는 사설 IP를 가지고, 바깥쪽으로는 통신사가 준 공인 IP를 하나 받습니다. 노트북에서 패킷이 나갈 때 공유기가 “이 패킷은 노트북에서 나간 거지만, 인터넷에는 내 공인 IP로 나간 것처럼 보이게 하자”고 주소를 바꿔치기하는 거예요. 응답이 돌아오면 다시 노트북으로 전달해 주고요.

이 단순한 변환 덕분에 전 세계 수억 가정이 같은 192.168.0.1을 써도 아무 문제가 없습니다. 사설 IP는 어디까지나 그 사설망 안에서만 의미가 있고, 바깥과 통신할 때는 NAT가 공인 IP로 가면을 씌워주거든요.

마치며

192.168.x.x, 10.x.x.x, 172.16.x.x 그리고 127.0.0.1은 그냥 외워야 할 마법 숫자가 아니라, IPv4 자원을 알뜰하게 쓰기 위한 합의가 만들어 낸 결과입니다. RFC 1918이 사설망용으로 따로 떼어 둔 세 대역과 루프백 대역의 의미를 알면, 네트워크 설정을 하다 마주치는 IP들이 훨씬 친근하게 보일 거예요.

도메인 이름이 IP 주소로 어떻게 변환되는지 궁금하시다면 DNS 동작 원리 글도 함께 읽어보시면 좋겠습니다.

더 깊이 파고들고 싶다면 원문인 RFC 1918을 직접 읽어보는 것도 추천합니다.

This work is licensed under CC BY 4.0 CC BY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord