Cloud Wave

사설 IP로 인터넷을 접속하려면 어떻게 하는걸까? NAT란?(with AWS)

eunmiee 2024. 1. 19. 02:40

안녕하세요!

오늘의 포스팅은 네트워크와 관련하여 준비를 해보았는데요.

최근 AWS에 대해서 공부를 시작했는데 public subnet, private subet 환경을 구성하면서

private subnet의 경우 인터넷과 통신을 하려면 어떻게 해야할까?라는 부분에 대해 알아보게 되었습니다.

 

그와 관련하여 오늘은 NAT에 대한 이야기를 해보려고 합니다!

다들 유익한 정보를 알아가실 수 있는 시간이 되었으면 좋겠네요.

 

그럼 포스팅 시작하겠습니다 :)

 

 


자, 지금부터 하나의 예시를 들어보도록 하겠습니다.

 

여러분은 지금부터 카페에서 공부를 할 예정인데, 그럼 가장먼저 필요한게 무엇일까요?

당연히 노트북과 연결할 wifi가 필요하겠죠?

 

그래서 여러분들은 카페에 있는 wifi를 연결하여 ip를 얻어내게 되었습니다.

wifi를 통해 IP가 부여된 상황

이런 식으로요! 참고로 IP를 조회하는 법은 mac을 기준으로 ifconfig 명령어를 터미널을 통해 찾아보실 수 있습니다.

저의 IP는 현재 192.168.110.204 인 것을 확인할 수 있네요.

 

여기서 질문!

우리는 해당 IP를 통해 인터넷에 접속할 수 있을까요?

 

이 질문에 대한 답을 찾기 위해서는 Private IP와 Public IP에 대한 기본 개념이 필요해요!

 

지금부터 하나씩 알아봅시다!

 

Public IP와 Private IP


다들 공인IP나 사설 IP라는 말을 한번씩 들어보신적이 있을텐데요.

그게 바로 지금 설명할 public IP(공인 IP)와 private IP(사설 IP)를 의미해요!

 

Public IP (공인 IP)

public IP는 인터넷 상에서 유일한 IP 주소를 의미해요.

 

Private IP (사설 IP)

private IP는 사설 IP주소로써, 인터넷이 불가능한 IP를 의미합니다.

한가지 더 특징이 있다면 중복이 가능한 IP 주소라는 점입니다.

중복으로 인해 위치를 찾을 수 없으며, 인터넷 망의 라우터 정보가 없어 라우팅이 불가능합니다.

사설 IP 대역
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

 

그렇다면 이러한 개념이 왜 탄생하게 되었을까요?

 

바로 IP가 부족하기 때문입니다.

우리나라의 전세계 인구는 70억 가까이 되는데요. 그에 비해 우리가 사용하고 있는 IPv4의 IP 갯수는 매우 부족한 상태입니다.

그럼에도 불구하고 현재까지 IPv4를 유지할 수 있었던 이유가 바로 private IP 덕분이라고 생각할 수 있습니다.

private IP를 통해 중복을 허용하여 전세계의 많은 디바이스들이 IP를 할당 받아 통신을 할 수 있게 되는 것이죠!

 

지금까지의 내용을 통해 우리는 첫번째 질문에 대한 답을 할 수 있습니다.

저의 컴퓨터에 부여된 IP는 현재 사설 IP로, 인터넷을 접속할 수 없는 IP라는 것이죠.

 

그렇다면 private IP를 통해서 인터넷 접속은 불가능하다고 했는데 그럼 인터넷은 어떻게 사용하는 건가요?

그건 바로 private IP를 public IP로 바꾸면 해결됩니다! 그걸 어떻게 변환하냐고요?

Private IP 주소가 부여된 단말이 인터넷이 통신이 필요한 경우 해당 주소를 Public IP 주소로 변환하는 과정이 필요한데,

 

그게 바로 NAT의 역할입니다!

 

NAT(Network Address Translation)란?


쉽게 말해 네트워크 주소 변환기라고 표현할 수 있습니다.

단순히 네트워크 주소를 변환해주는 역할도 있지만, 다른 의미로는 NAT를 사용함으로써 현재 내가 사용하고 있는 네트워크를 감출 수 있다는 점에서 보안의 목적이 있다고 볼 수도 있죠!

NAT는 내부에서 외부로는 접속이 가능하지만 외부에서 내부로는 직접적으로 접속이 불가능합니다.

 

NAT의 경우, 크게 정적 NAT와 동적 NAT로 구분할 수 있습니다.

 

static NAT


IP를 1:1로 매칭하여 연결을 할 수 있습니다. 즉, 하나의 IP를 직접 지정하여 연결하는 방식입니다.

이 방법은 공인 IP 하나를 해당 IP에게 준 것으로 생각해도 무방합니다. 그렇기 때문에 외부에서도 해당 공인 IP로 연결하면 바로 매핑이 가능하게 되는 것이죠. 이게 바로 AWS에서는 대표적으로 EIP와 public IP에 해당한답니다!

 

정적 NAT은 일반적으로 외부에서 내부로 접속 할 경우 사용하게 됩니다.

네? 조금전에는 내부에서 외부로의 접속만 허용한다면서요?

맞아요, 이건 예외적인 상황에서 내부의 특정 디바이스를 외부에서 접근 가능하도록 하는 기능입니다.

 

예를 들어, 내부의 웹 서버가 있고 이를 외부에서 접근 가능하게 하려면 해당 웹 서버의 프라이빗 IP 주소를 퍼블릭 IP 주소로 Static NAT 매핑을 설정할 수 있습니다. 이를 통해 외부에서는 해당 퍼블릭 IP 주소로 접근하여 웹 서버에 연결할 수 있습니다.

Static NAT은 특별한 상황에서만 필요하며, 보안 측면에서 주의가 필요합니다. 내부에서 외부로의 통신은 주로 다이나믹 NAT를 사용하여 일반적인 트래픽을 처리하며, 특별한 경우에만 Static NAT을 사용하여 특정 서비스에 대한 외부 접속을 허용합니다.

 

Dynamic NAT


동적 NAT은 정적 NAT와 다르게 1:N 매핑을 통해 연결을 할 수 있습니다.

다만, 동적으로 매핑이 되기 때문에 개념적으로는 PC의 공인 IP는 고정되어 있지 않습니다.

 

EC2 인스턴스를 예시로 들자면 EIP를 적용하기 전, EC2의 공인 IP는 접속할 때마다 IP가 계속해서 바뀌는 것을 확인할 수 있죠?

그게 바로 이 동적 NAT 방식을 활용한 것이라고 볼 수 있습니다.

 

그렇기 때문에 만약 PC가 사용중이면 해당 PC의 사설 IP와 공인 IP가 매핑되어 있지만, PC가 사용 중이 아니라면 매핑된 공인 IP를 반환하고 다른 PC가 사용하게 되는 것이죠!

 

일반적으로 내부에서 외부로 접속할 때 사용을 하며, 우리의 사설 IP를 공인 IP로 바꾸어 인터넷을 사용할 때 이용하게 되는 것입니다.

이를 통해 더 적은 공인 IP를 사용하여 여러 PC가 인터넷에 접속할 수 있게 되는 것이랍니다.

 

실습


이렇게 개념에 대해 알아보았으니 실습을 통해 확인을 해봐야겠죠?

 

AWS를 통해 살펴보도록 하겠습니다.

 

다음 그림과 같은 환경으로 AWS 환경을 세팅해보려고 합니다.

 

우선, 해당 환경에 대해 먼저 설명을 해보도록하겠습니다.

해당 VPC는 서울리전에 생성을 하게 되며, a와 c 두개의 존으로 구성이 되어 있습니다.

이를 통해 총 4개의 서브넷을 생성하여 각 존에 private subnet, public subnet을 구성하게 되는 것이죠.

 

여기서 우리가 중점적으로 봐야할 부분은 private subnet1를 NAT Gateway1에 연결하고, private subnet2에는 NAT Gateway를 지정해주지 않은 상황에서의 결과를 확인하는 것입니다.

 

가장 먼저 VPC를 생성해줍니다.

 

vpc를 기준으로 서브넷을 생성하여 a와 c존에 각각 private, public 서브넷을 구성해줍니다.

 

이후 인터넷 게이트웨이를 설정해줍니다.

 

 

NAT Gateway를 생성하여 public1 subnet과 연결시켜줍니다.

참고로, private subnet은 당연히 직접적으로 내부에서 외부로 통신을 할 수 없기 때문에 무조건 NAT를 거쳐야 합니다.

 

그렇기 때문에 같은 public subnet에 NAT를 설정하여 public 서브넷에 있는 NAT를 private subnet과 연결해줍니다.

각 서브넷은 같은 네트워크 영역이므로 통신이 가능합니다.(public과 private 서브넷 간의 통신 가능)

 

 

라우팅 테이블에 접속하여 private01 IP가 인터넷에 접속 시 NAT Gateway로 향할 수 있도록 라우팅을 설정해줍니다.

 

public subnet의 경우 모두 인터넷과 통신 가능한 영역이므로 바로 인터넷 게이트와 연결해줍니다.

 

모두 생성이 되었다면 cloud9을 통해 확인해보도록 합니다.

각각 만들어진 ec2 private 계정에 접속하여 ping을 날려보면 NAT 게이트웨이와 연결된 private1만 통신 되는 것을 확인할 수 있습니다.

 

이상으로 오늘의 포스팅을 마치도록 하겠습니다!

감사합니다:)