포트포워딩

이상민·2021년 8월 12일
0
post-thumbnail

인터넷을 통해 사설 네트워크 내의 컴퓨터에 연결할 수 있게하는 것

1. 포트

  • IP 주소가 기기를 찾기위한 주소라면 포트는 해당 기기에서 프로세스를 식별하기 위한 숫자이다

  • 00시 00로 00아파트 00호처럼 주소가 있을때 아파트까지의 주소가 IP 주소, 호 번호를 포트로 생각할 수 있다


2. 포트포워딩을 통한 연결 과정

포트맵핑이라고 부르기도 한다. 이쪽이 조금 더 직관적인거 같다

  1. 외부 PC가 공인 IP와 포트 번호에 요청을 보낸다

  2. 라우터에 도달하면, 라우터는 포트 번호를 확인해 해당 요청을 어디에 보낼지 정한다

  3. 내부 PC가 요청을 받아 처리한다

=> 라우터가 내부 PC에 요청을 보내기 위해서는 포트포워딩 설정이 되어 있어야한다
=> 포트포워딩은 공인 IP 주소와 포트를 사설 IP 주소와 포트에 맵핑하여 내부 프로세스에 접근이 가능하게 한다
=> 라우터에 포트포워딩 설정이 되어있지 않다면, 라우터는 사설 네트워크 내의 많은 기기 중 어떤 기기에게 요청을 전달해야할지 알 수 없다


3 포트포워딩 설정하기

3-1. 사설 IP와 기본 게이트웨이 IP 구하기

  • 사설 IP : 개별적으로 구성한 네트워크의 IP. 범위는 아래와 같다

  • 기본 게이트웨이 IP : 서로 다른 네트워크를 이어주는 기기를 게이트웨이(주로 라우터)라고 한다. default gateway란 데이터가 네트워크를 나가거나 네트워크에 들어올때 가장 먼저 확인되는 게이트웨이이다
$ ip r
default via 172.30.1.254 dev wlo1 proto dhcp metric 600 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
172.18.0.0/16 dev br-d315fbca153e proto kernel scope link src 172.18.0.1 linkdown 
172.30.1.0/24 dev wlo1 proto kernel scope link src 172.30.1.3 metric 600 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 

3-2. 기본 게이트웨어 IP로 포트포워딩 설정 접근

  • 기본 게이트웨어 IP 주소로 브라우저를 통해 접근하면 다음과 같은 화면이 나온다

  • 로그인 후 포트 포워딩 설정으로 페이지로 이동한다

  • 외부포트, 내부 IP 주소, 내부포트를 설정해 준다

3-3. NGINX 설치 및 실행

  • NGINX 설치 후 실행한다
$ sudo service nginx start
  • 실행이 되지 않는다면 다른 프로세스가 이미 기본 포트인 80을 사용하고 있기 때문이다. 포트 80은 well known port로 자주 사용되므로, NginX를 실행하려면 해당 포트를 사용중인 프로세스를 정지시키거나 NginX가 listen하는 포트를 바꿔줘야한다

3-4. 외부에서 접속

  • 라우터를 설정한 페이지에서 현재 라우터의 공인 IP주소를 찾을 수 있다

  • 외부에서 해당 IP주소와 설정한 포트로 요청을 보내면 요청을 내 컴퓨터에서 받아 처리할 수 있다

  • 단 별도 고정 IP 관련 요금제를 사용중이 아니라면 라우터의 공인 IP는 주기적으로 바뀌기 때문에 주의해야한다. 이때문에 IP 변경을 추적하고 관리해주는 DDNS 같은 서비스들도 있다


4. 내부 포트와 외부 포트를 다르게 설정하는 이유

  • 위 포트포워딩 설정 단계에서 볼 수 있듯 외부포트와 내부포트는 다르게 설정할 수 있다

  • 그 이유는 well known port의 경우 포트포워딩 되어있으면 공격 받을 위험이 있기 때문이다

  • 예를 들어 ftp를 포트포워딩해 외부에서 접근 가능하게 한다면, 기본 설정 사용시 21 포트를 사용하게 될것이다. 하지만 이는 예측 가능한 포트로 위험할 수 있다. 24356번 포트 같이 무작위 외부 포트를 20번 내부포트에 맵핑하면 이런 위험을 줄일 수 있다.


포트포워딩을 해보니 오히려 더 많은 호기심이 생겼다. 다음 주제들로 공부해봐야겠다.

1) 웹 브라우징을 한다던가 게임을 한다던가하는 일반적으로 인터넷을 사용하는 상황에서, 라우터는 들어오는 응답을 어떻게 해당 컴퓨터로 전송할까?

2) AWS EC2에서 포트포워딩 설정을 해본적은 없는데 어떻게 설정없이 접속할 수 있을까? 별도 라우터 없이 각 인스턴스가 고유 IP 주소를 가지는걸까? IPv4는 개수가 부족한 걸로 알고있는데 어떻게 작동하는 건지 궁금하다

3) DDNS 서비스는 어떻게 작동하는 것일까

profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글