사설 IP와 RFC 1918: 192.168과 10.0이 특별한 이유
집에서 공유기 관리자 페이지에 들어가려고 IP를 쳐본 적 있으시죠?
대부분 192.168.0.1이나 192.168.1.1 같은 주소일 겁니다.
회사 사내망에 들어가 보면 10.0.0.5 같은 주소를 받고요.
그런데 인터넷의 평범한 사이트들 IP는 또 52.x.x.x나 203.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 대역을 지정합니다.
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개의 주소를 담는 거죠.
비슷한 방식으로 /8은 2^24 = 16,777,216개, /12는 2^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/10은 CGNAT(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