오늘은 포트포워딩에 대해 다뤄보겠다.
퀀트 자동매매 트레이딩 봇 프로젝트를 하는 중, 라우터설정, 포트포워딩을 하게 되었다.
회사에서 서버코드를 만들때 192.168.0.1로 접속하여 포트포워딩을 여러번 했었는데,
우리집은 저 주소로 진입이 안되었다.
알고보니 공유기마다 라우터 설정 주소가 다르다는 것을 알게 되었다.
이전포스팅에서는 서버코드에 데이터를 웹훅으로 전송하기위해 카페에서 포트포워딩을 했다.
이번엔 우리집에서 한번 포트포워딩을 해보도록 하겠다.
( 참고로 카페에서는 와이파이가 iptime이었고 우리집은 sk브로드밴드이다. )
< 이전 포스팅 >
https://jayindustry.tistory.com/74
Flask서버생성,웹훅,포트포워딩-2 문제해결
오늘은 지난시간에 이어 트레이딩뷰에서 웹훅을 내 웹서버 url을 통하여 post 요청하여 트뷰 알람을 내 파이썬으로 가져와보도록 하겠다. < 지난 포스팅 > https://jayindustry.tistory.com/71 #8 [바이낸스
jayindustry.tistory.com
[ 개요 ]
1. 포트포워딩과 아이피의 개념
2. 내 라우터설정 주소 찾기
3. 포트포워딩 방법
1. 포트포워딩과 아이피의 개념
포트포워딩이란 간단하게 포트를 통한 전달, 운송기능 이라고 생각하면 쉽다.
우리집 공유기 말고 외부에서 우리집 공유기와 연결된 pc로 데이터 등을 보낼 때 Port를 통해 들어오게 된다.
아이피는 외부포트와 내부포트로 나뉘고 포트는 외부포트와 내부포트로 나뉜다.
예를들어, 외부에서 우리집 공유기와이파이와 연결된 내 맥북으로 데이터를 보내고 싶다면 어떻게하면 될까?
외부의 pc에서 내 맥북의 외부ip와 외부포트를 알면 된다.
특별송달 우편물로 비교해보자.
우체부가 우편물을 송달하려면 그 사람의 주소로 가서 그 사람에게 직접 전달해야한다.
그럼 우체부는 주소와 수령받는 사람이 누구인지 알아야한다.
이 때, 외부 ip로 우리집 주소이고,
외부포트는 수령받는 사람이 누구인지를 알려주는 번호이다.
- 외부아이피 -
* 공유기 1개당 외부아이피가 있다. 이는 외부에서 송수신시, 사용한다.
* 하나의 외부아이피로 여러대의 컴퓨터가 공유한다.
- 외부포트 -
* 외부포트 또한, 외부와의 데이터 송수신시 사용된다.
* 역할 : 외부에서 데이터를 주고받는 등 어떤 상호작용을 하는데, 데이터가 회사의 외부아이피를 통해 들어왔는데 회사 내부의 어디 컴퓨터의 어디 소프트웨어로 갈지를 이 외부포트가 결정해준다.
* 외부포트는 코드작성시, 사용자가 임의로 지정하며 특정 목적을 위한 내부포트와 쌍으로 연결하여 지정한다.
예시 1)
1번 컴퓨터로 psql을 외부와 연결하려고한다. 그럼 다음과 같이 설정한다.
실제 psql에서 제공한 기본포트는 5432이고 이는 내부포트로 쓴다. 이 내부포트를 24001(내가 마음대로 지정)의 외부포트와 쌍을 지어 설정해두고, 24001포트를 열어두어 언제든 1번컴퓨터의 psql이라는 소프트웨어와 데이터를 주고받을 수 있게 한다. 즉, 포트포워딩(=전달)할 수 있는 상태를 만든다.
예시 2)
로봇에서 서버 pc의 RabbitMQ에 데이터를 전송하려한다. 이 때, RabbitMQ의 내부포트와 5001(사용자지정)을 쌍으로 지정한 후, 해당 외부포트를 열어놓는다. 그럼 로봇에서 우리 외부아이피(주소)를 찾아와서 5001포트로 들어와, 내 pc의 RabbitMQ와 연결된다.
- 내부아이피
외부아이피가 같으니, 같은 공유기를 사용하는 각 컴퓨터를 구분할 수 있어야 한다. 이를위해 컴퓨터별로 내부아이피 주소가 존재한다. 회사 같은경우 경우에 따라 내부아이피는 동적아이피이므로 공유기가 꺼지거나 어떤 이슈 발생하면 언제든 바뀔 수 있다.
< 궁금한점 >
Q) 그럼 외부포트대신 내부아이피를 사용하면 되는것아닌가?
내부 아이피 192.168.까지는 지구상의 모든 컴퓨터들이 동일하다. 실제로 똑같은 내부아이피를 가지는 컴퓨터가 무수히 많다. 즉, 중복될 우려가 많다. 이러한 체계는 개발자들이 그렇게 약속하였다. 그렇기에 우리는 외부포트를 사용하여 포트포워딩을 한다.
- 내부포트 -
내부포트는 하나의 pc안에서 어떤 소프트웨어와 연결할지 알려주는 주소이다.
예를들어 내 pc내부의 브로커 소프트웨어인 Rabbit MQ로 로봇의 데이터가 들어올 때, 소프트웨어별로 고유의 내부포트가 지정이 된다. 이는 사용자가 지정하는 것이 아니고 해당 소프트웨어 제공자가 함께 제공해준다. 예를들어 psql의 기본포트는 5432이다. 쉽게말해, 어떤 소프트웨어와 연결해주는 역할을 하는 고유주소이다.
>> 정리 <<
외부에서 데이터를 전송한다. 외부아이피로 내 pc의 공유기위치를 알아내고, 특정 목적에 맞는(특정 소프트웨어와 연결된) 외부포트로 진입한다. 그럼 특정 pc의 특정 소프트웨어와 연결되어 포트 포워딩이 가능하다.
ex) 네이버 클라우드
우리가 네이버 클라우드를 사용할 때, 어딘가에 데이터를 저장하는 네이버 피지컬 기기가 있다. 그 기기의 서버포트가 열려있기에 우리는 거기다가 저장도하고 데이터이동도 시킬 수 있는 것이다.
2. 내 라우터설정 주소 찾기
macOS환경 기준)
터미널을 열고 netstat -nr | grep default 입력
위처럼 라우터설정주소 192.168.45.1가 나온다.
이걸 인터넷 주소창에 복붙한다.
3. 포트포워딩 방법
우리집은 sk브로드밴드 공유기를 이용중이라, 해당 와이파이페이지가 나온다.
sk브로드밴드 기준으로
아이디는 admin이고,
비밀번호는 공유기마다 다른데, 공유기 뒷면에서 유선MAC의 맨 끝에서부터 "6자릿수 + _admin" -> 이게 비밀번호이다.
중간에 . 은 생략한다.
예를들어, 공유기 뒷면에 "유선 MAC:0C96.C0DQ.2531" 코드가 적혀있다면
비밀번호는 DQ2531_admin 이다.
로그인하면 맨 위 카테고리에 NAT -> 포트포워딩 설정!
포트포워드 프로토콜은 TCP/UDP로 설정하고
트레이딩뷰 사이트에서 웹훅의 외부포트를 80번으로 지정하여서 외부포트를 80으로 지정하였다.
내부포트는 내가만든 파이썬 서버코드에 정해놓은 대로(내가 임의로 정한 번호) 10080번으로 정하였다.
그럼 트레이딩뷰 사이트에서 buy/sell트리거 시그널이 뜰 때, 내가 지정한 외부포트 80번으로 웹훅 메시지를 보낸다.(URL로 POST요청)
보통 URL은 "내 외부IP:내 외부포트(80)/end-point"로 지정한다. (end point는 서버코드에 따라 다르다)
그럼 저 포트로 들어온 데이터가 내 내부포트 10080으로 연결되어 내 파이썬 서버스크립트로 전송되게 된다.
[ 결과 ]
트레이딩뷰 사이트에서 알람이 떴다.
성공적으로 메시지가 파이썬 스크립트에 전송되어, 변수에 저장 및 출력되었다.
'Back&Front End > Server, AWS' 카테고리의 다른 글
MQTT메시지 형식에 대해 (1) | 2023.12.09 |
---|---|
Flask서버생성,웹훅,포트포워딩-2 문제해결 (1) | 2023.11.17 |
Flask서버생성,웹훅,포트포워딩 - 1 (0) | 2023.11.17 |