-
IP주소와 포트포워딩이란, 포트포워딩 설정하기(iptime)CS기초/Network 2021. 10. 26. 23:26728x90반응형
로컬 젠킨스와 Github webhook 연결을 하려다보니 IP주소가 필요했다.
IP주소란 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호(ref. Wiki)라고 되어있는데 쉽게 말하면 통신을 위한 장치의 주소같은 개념이다.
우리가 편지를 보내기 위해서는 수신자의 주소를 적어야하는 것 처럼 Webhook이 내 컴퓨터의 젠킨스로 정보를 보내기 위해서는 내 컴퓨터가 어디에 있는지 알아야하니 컴퓨터의 ip주소가 필요한 것이다.
인터넷에서 특정 사이트로 접속할 때 - 이 동작도 접속해달라는 post요청을 보내게 되는데 - http://www.google.com 과 같은 주소를 입력하는데 이것도 사실 이 주소기 DNS 서버라는 것을 통해 IP주소로 바뀌어서 전달된다. 즉, http://www.google.com을 주소창에 입력하는 것과 해당 서버의 외부IP주소인 216.58.200.68을 주소창에 입력하는 것과 같다.
맥에서 내 컴퓨터의 ip주소를 확인하려면 환경설정>네트워크에 들어가거나 터미널에 `ipconfig getifaddr en0`를 치면 되는데 문제는 공유기로 wifi에 접속하여 인터넷을 사용할 때다. 이럴 경우 보여지는 ip주소는 공유기에서 할당한 주소이며, 외부에서 접근이 불가하다.
공유기에서 할당한 192.168.0.21 이라는 주소는 공유기 내의 주소이기 때문에 같은 공유기 망 내에서만 접속이 가능합니다.
하지만 LTE 망을 사용 중인 핸드폰이나 회사, 학교 컴퓨터에서는 192.168.0.21 이라는 주소를 쳐봤자 엉뚱한 곳으로 가게 됩니다.
비유하자면 '192.168.0.21' 이라는 것은 '3동 406호'라고만 써있는 주소와도 같습니다.
같은 아파트에 살고 있다면 3동 406호라는 주소만으로도 친구 집에 갈 수 있지만, 외부인 입장에게 주소를 알려줄 때는 AA시, BB구 등의 광역 주소를 알려줘야지 3동 406호라는 주소만으로는 주소 기능을 할 수 없을 것입니다.
출처: https://solbel.tistory.com/396위의 예시에서 얘기하는 광역주소가 공유기의 IP주소이고 외부에서는 여기까지 알 수 있다. 각 인터넷 회선마다 고유한 값을 가지며 이 주소에 접속한 후 공유기 내에서 분배되는 주소까지 알면 외부에서도 내 컴퓨터로 접속을 할 수 있게 되는 것이다.
2022. 11 추가 - 여기에서 제가 사용한 "공유기의 IP주소"라는 단어에 혼돈의 여지가 있는 것 같습니다. 아래 댓글에서 지적한 대로, 여기에서 사용한 "공유기의 IP주소"라는 표현은 ISP를 통해 부여받은 공인 IP주소를 의미하며, 네트워크의 기초지식이 없는 분들을 위해 아주 쉬운 표현을 사용하고자 하는 과정에서 잘못 받아들여질 수 있는 표현이 사용된 것 같습니다.
포트라는 개념은 기기 내에 할당된 방 같은 느낌인데, 각 방마다 고유의 번호를 가진다 (Jenkins 8080, Postgres 5432...). 내 컴퓨터에서 Flask로 접속하고자 할 때는 "로컬 호스트의 Flask의 포트로 들어가"라고 해야하는데, 이 요청을 `http://127.0.0.1:5000`이라는 url로 수행하는 것이다. 여기에서 127.0.0.1이 localhost 주소이고 5000이 Flask의 방 번호, 즉 포트 번호이다.
포트포워딩이란
포트포워딩(Port Forwarding)은 공유기의 포트를 통해 이 공유기와 연결된 기기들의 특정 포트에 진입할 수 있게 하는 기능이다. 만약 공유기에 컴퓨터와 핸드폰이 연결되어 있는데 그냥 공유기 주소 + 포트번호로 입력한다면 공유기의 '어느 기기'의 포트로 들어가야하는 지 알 수 없다. 따라서 포트 포워딩은 공유기에 연결된 기기의 포트를 특정 번호를 통해 전달(forwarding)해 주는 것이라고 이해할 수 있다. 또는 공유기에 기기+해당 기기의 포트에 해당하는 포트 번호를 할당 해 주는 것이라고 해도 될 듯하다. 예를 들어 공유기의 180포트로 접속하면 핸드폰의 5000 포트에 접속하게하고, 280포트로 접속하면 컴퓨터의 5000포트에 접속하게 하는 것이다. 여기서 180, 280등을 지정하는 작업이 포트포워딩이다.
포트포워딩 설정하기
포트포워딩 설정은 공유기에서 한다. 여기부터 iptime을 기준으로 글을 작성한다.
- http://192.168.0.1 을 통해 공유기 설정페이지에 접속 (공유기 제조사 별로 다른 경우도 있다고 하니 검색)
- 로그인 (초기 id/ 비밀번호는 admin/admin이고, 기존에 설정해놓은 id/비밀번호를 잊어버렸다면 공유기의 reset 버튼을 10초 정도 눌러 초기화한다)
- Setting(관리도구)
- 왼쪽 메뉴에서 Advanced Setup(고급 설정)> NAT/Routing(NAT/라우터 관리) > Port Forwarding(포트포워드 설정) > Add new rule(새규칙 추가) 클릭
- 하기 사진의 사각형 부분을 채운다
- Rule Name(규칙 이름): 기억하기 쉬운 이름으로 설정 (문자나 숫자나 아무거나)
- Internal IP(내부 IP주소): 공유기에서 할당한 내 컴퓨터의 IP주소로 위에서 작성한 방법으로 확인할 수 있다.
- External port(외부 포트): 외부에서 접속할 때 사용할 포트로 사용자가 외우기 쉬우면서 기존 포트 번호와 겹치지 않는 번호로 설정할 수 있다.
- Internal port(내부 포트): 내 컴퓨터에서 어플리케이션에 접속할 때 사용하는 포트 번호이다 (e.g. Jenkins면 8080)
다 작성한 후 Apply(적용 또는 수정) 버튼을 눌러주면 된다.
해당 설정을 완료했다면 이제 내가 할당한 포트번호와 공인 IP주소를 통해 외부에서 내 컴퓨터의 어플리케이션에 접근이 가능하게 된다. 공인IP주소는 Naver등에서 'ip 주소'같은 키워드로 확인할 수 있으며, 최종 접근 경로는 {공인IP주소}:{위에서 설정한 외부 포트번호}가 된다.
예를 들어 Naver에서 확인한 공인IP주소가 211.156.32.67이고 내가 설정한 외부 포트번호가 8000이면 외부에서는 http://211.156.32.67:8000이라는 주소로 접근이 가능하게 된다.
참고 블로그: https://solbel.tistory.com/396
728x90반응형'CS기초 > Network' 카테고리의 다른 글
네트워크: 초보도 이해하길 바라는 CIDR블록이란? (0) 2022.12.04