Foundry
네트워크
중급
핵심

NAT 와 사설 네트워크

사설 IP 를 공인 IP 로 바꿔 여러 기기가 하나의 주소를 공유하게 만드는 방식과, 그로 인해 생기는 연결 제약

NAT 와 사설 네트워크

사설 IP 주소를 공인 IP 로 바꿔 여러 기기가 하나의 주소를 공유하게 만드는 방식

왜 필요한가

IPv4 주소는 약 43억 개뿐이고 이미 고갈됐습니다. 그런데 집에 있는 기기만 열 대가 넘습니다.

구분내용
공인 IP인터넷에서 유일하다. 통신사가 할당한다
사설 IP내부 네트워크에서만 유효하다. 누구나 쓸 수 있다
NAT둘 사이를 바꿔주는 변환

사설 주소 범위는 정해져 있습니다.

범위크기쓰이는 곳
10.0.0.0/8약 1,678만기업, 클라우드 VPC
172.16.0.0/12약 105만중간 규모
192.168.0.0/16약 6.5만가정용 공유기

동작

내부 기기가 외부로 나갈 때 공유기가 주소와 포트를 바꿔 기록합니다.

방향출발지도착지
나갈 때 (내부)192.168.1.10:50008.8.8.8:443
나갈 때 (변환 후)공인IP:412308.8.8.8:443
돌아올 때8.8.8.8:443공인IP:41230
돌아올 때 (변환 후)8.8.8.8:443192.168.1.10:5000

공유기가 변환 표를 들고 있어서 돌아오는 응답을 원래 기기로 보냅니다. 포트 번호로 구분하기 때문에 여러 기기가 한 주소를 공유할 수 있습니다.

NAT 가 만드는 제약

제약내용
외부에서 먼저 연결 불가변환 표에 항목이 없어 어디로 보낼지 모른다
표 유지 시간통신이 없으면 항목이 사라져 연결이 끊긴다
P2P 어려움양쪽 모두 NAT 뒤에 있으면 서로 먼저 연결할 수 없다
일부 프로토콜 문제패킷 안에 IP 를 담는 프로토콜은 변환이 어렵다

첫 번째를 뚫는 방법이 포트 포워딩입니다. "공인IP:8080 으로 오는 것은 192.168.1.10:80 으로 보내라"를 미리 등록해 둡니다.

세 번째는 별도 서버가 필요합니다. 양쪽이 각자 밖으로 연결을 열어 자기 공인 주소와 포트를 알아내고(STUN), 그것으로 직접 연결을 시도합니다. 실패하면 중계 서버로 우회합니다(TURN).

클라우드에서

구성내용
퍼블릭 서브넷인터넷 게이트웨이로 직접 나간다. 로드밸런서를 둔다
프라이빗 서브넷NAT 게이트웨이를 거쳐 나간다. 애플리케이션과 DB 를 둔다
서브넷 나누기가용영역마다 하나씩. 한 영역이 죽어도 남는다

프라이빗 서브넷에 애플리케이션을 두는 이유가 NAT 의 첫 번째 제약입니다. 외부에서 먼저 연결할 수 없으니 공격 표면이 줄어듭니다. 나가는 통신은 NAT 를 거쳐 가능합니다.

면접에서 이렇게 나옵니다

Q.NAT 의 목적은 무엇이고 무엇이 목적이 아닌가요?

목적인 것내용
주소 절약여러 기기가 공인 IP 하나를 공유한다
내부 구조 은닉외부에서 내부 주소를 볼 수 없다
외부 접속 차단등록되지 않은 연결은 들어올 수 없다
목적이 아닌 것
암호화주소만 바꾼다. 내용은 그대로 지나간다
속도 향상변환 처리가 붙어 오히려 약간 느려진다
인증누가 보냈는지 확인하지 않는다
방화벽 대체부수적으로 막히는 것이고, 정책 기반 차단이 아니다

마지막이 자주 오해되는 지점입니다. NAT 뒤에 있으면 외부에서 먼저 연결할 수 없어 안전해 보이지만, 그것은 의도한 보안이 아니라 구조의 부산물입니다. 포트 포워딩을 하나 열면 그대로 노출되고, 내부에서 나가는 통신은 전혀 검사되지 않습니다.

흔한 실수: NAT 를 방화벽으로 여겨 별도 정책을 두지 않는 것. 내부 기기가 감염돼 밖으로 데이터를 보내는 것은 NAT 가 막지 않습니다.

Q.NAT 뒤의 두 사용자가 P2P 로 직접 연결하려면 무엇이 필요한가요?

양쪽 모두 외부에서 먼저 연결할 수 없으므로, 각자 자기 공인 주소를 알아내고 동시에 연결을 시도합니다.

단계역할
1각자 STUN 서버에 접속해 자기 공인 IP 와 포트를 알아낸다
2그 정보를 시그널링 서버를 통해 상대에게 전달한다
3양쪽이 동시에 상대 주소로 연결을 시도한다
4한쪽의 시도가 NAT 표에 항목을 만들어 상대의 패킷이 들어올 수 있게 된다
5실패하면 TURN 중계 서버를 거친다

4번이 이 방식의 핵심입니다. 내가 밖으로 보낸 패킷이 NAT 에 "이 주소와 통신 중"이라는 항목을 만들고, 그 덕분에 상대의 응답처럼 보이는 패킷이 통과합니다.

구성 요소역할
STUN내 공인 주소가 무엇인지 알려준다
TURN직접 연결이 안 되면 트래픽을 중계한다
시그널링주소 정보를 서로 교환하는 통로

NAT 종류에 따라 성공률이 다릅니다. 도착지마다 다른 포트를 쓰는 방식이면 미리 알아낸 포트가 무효라 직접 연결이 실패하고 중계로 넘어갑니다.

흔한 실수: STUN 만 두고 TURN 을 생략하는 것. 기업 방화벽이나 엄격한 NAT 환경에서는 직접 연결이 실패하고, 중계 서버가 없으면 통화가 아예 안 됩니다.

Q.VPC 서브넷을 어떻게 나누나요?

인터넷에서 직접 닿아야 하는지가용영역을 기준으로 나눕니다.

서브넷두는 것외부 통신
퍼블릭로드밸런서, NAT 게이트웨이, 배스천인터넷 게이트웨이로 직접
프라이빗애플리케이션 서버NAT 게이트웨이를 거쳐 나가기만
데이터DB, 캐시외부 통신 없음

가용영역마다 같은 구성을 반복합니다. 영역 하나가 죽어도 나머지로 서비스가 유지됩니다.

주소 범위를 정할 때 볼 것들입니다.

항목판단
나중에 늘릴 여유서브넷을 처음부터 크게 잡아 둔다. 나중에 쪼개기 어렵다
다른 네트워크와 겹치지 않게회사망이나 다른 VPC 와 연결할 때 대역이 겹치면 못 붙인다
예약 주소클라우드가 서브넷마다 몇 개를 가져간다

두 번째가 나중에 큰 문제가 됩니다. 모든 팀이 10.0.0.0/16 을 쓰면 VPC 를 서로 연결할 수 없습니다.

흔한 실수: 서브넷을 필요한 크기에 딱 맞게 잡는 것. IP 는 사설 대역이라 넉넉하고, 부족해서 다시 설계하는 비용이 훨씬 큽니다.

Q.프라이빗 서브넷의 서버가 외부 API 를 호출하려면 무엇이 필요한가요?

NAT 게이트웨이나 그에 준하는 출구가 필요합니다. 프라이빗 서브넷은 인터넷 게이트웨이로 직접 나갈 수 없습니다.

방법내용비용
NAT 게이트웨이관리형. 퍼블릭 서브넷에 두고 라우팅을 건다시간당 요금 + 데이터 처리 요금
NAT 인스턴스EC2 로 직접 운영인스턴스 비용. 관리 부담
VPC 엔드포인트같은 클라우드 서비스는 내부망으로 직접인터넷을 거치지 않아 값싸고 빠르다
프록시나가는 트래픽을 한곳으로 모아 검사한다프록시 운영 비용

세 번째를 자주 놓칩니다. S3 나 DynamoDB 같은 같은 클라우드 서비스를 부르는데 NAT 게이트웨이를 거치면 데이터 처리 요금이 그대로 붙습니다. 엔드포인트를 만들면 그 트래픽이 내부망으로 빠져 비용이 크게 줄어듭니다.

라우팅 설정도 함께 봐야 합니다. 프라이빗 서브넷의 라우팅 표에서 기본 경로가 NAT 게이트웨이를 가리켜야 하고, NAT 게이트웨이 자체는 퍼블릭 서브넷에 있어야 합니다.

흔한 실수: NAT 게이트웨이를 프라이빗 서브넷에 두는 것. 자기도 나갈 길이 없어 아무것도 통과하지 못합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

더 깊이 공부하기

읽었으면 문제로 확인해보세요

네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.