Socket

[Socket] 공유기의 공인 IP와 포트 포워딩을 이용한 외부에서 접속하기(c++, 파이썬)

날씨는 우중충 2020. 6. 4. 00:56

오늘 교수님에게 "서버에 접속할 때 공인 IP를 이용해서 접속을 하고싶다."라고 질문을 드렸다.

교수님의 대답은 "공유기 공인 IP를 가져와서 공유기에 포트 포워딩을 해봐"라고 알려주셨다.

CCNA를 배우면서 포트 포워딩에 대한 개념은 어느정도 알고있었다. 그래서 저녁먹고 바로 시도를 해봤다.

 

소켓을 제대로 배운적도 없고 인터넷에 있는 소스를 주워와서 리팩토링해서 구현중이라 아직 모르는 부분이 많았다.

아직 많이 모르는 내 생각엔 "음... 일단 서버에서 IP랑 포트 설정하고 클라이언트도 IP, 포트 설정하고 공유기 관리자 열어서 지금 PC로 내가 설정해준 포트 들어오도록 설정해주면 되겠지.."라 생각하고 작업을 시작했다.

 

일단 처음 공유기의 공인 IP는 "ipconfig.co.kr"을 웹 브라우저 창에 입력하면 아래에 IP address에 보면 "192.168."로 시작하지 않는 주소가 나온다. 그게 공유기의 공인 IP이다.

그럼 거기서 얻은 아이피 주소를 다시 브라우저 창에 입력하면 공유기 관리자 페이지가 나온다. 로그인을 해서(필자는 iptime 공유기 사용 중) 고급 설정 -> NAT/라우터 관리 -> 포트포워드 설정을 누르고 원하는 규칙이름, 내부 IP주소(현재 IP 주소 사용을 체크하면 자동으로 채워진다), 포워딩할 포트 번호를 적어준다. 필자는 9999번 포트를 사용해서 내외부 모두 9999를 입력했다. 

 

그리고 이제 서버에 IP 부분에 공용 IP를 할당하고 시작을 눌렀더니.... 끔찍한 일이 벌어졌다....

무한 루프에 빠져버린 서버쿤..

계속 소켓이 만들어지고 연동이 되는것... 여기서 2시간을 넘게 뻘짓을 해버렸다... 여기저기 검색도 해보고 자료를 찾아봐도 뭔가 이렇다 할 해답이 없었다. 그러나 세상은 노력하는 사람을 배신하지 않는법.. "INADDR_ANY" 이 설정값이 눈에 띄었다. 해당 설정에대한 설명은 이랬다. "서버에 연결된  네트워크 인터페이스를  목적지로 로 해서 들어오는  모든 자료를 수신가능". 여기서 난 빛을 봤다. 그래서 설정을 바꿔주고 파이썬 클라이언트 주소는 해당 공인 IP로 설정해주고 꺼놨던 포트 포워딩 기능도 다시 켰더니 아래와 같이 클라이언트를 멈추고 접속하고 다시 멈추고 접속하고 잘 돌아간다.

구원받은 서버쿤..

4~5시간정도 뻘짓을 했지만 또 이렇게 하루하루 실력이 늘어가는걸 느끼고 있으니 정말로 행복하다.(정말 행복한것이 맞는가에 대해선 다시 생각해보자)

 

암튼 이랬든 저랬든 오늘은 두 발 쭉 뻗고 잠 잘수 있겠다. 긴 글을 읽으신 당신도 나와 같은 뻘짓을 하다 결국 내 글에 도착해 안락함을 찾고 편안한 밤에 들기를 기원합니다 *^^*