포트 포워딩 대신에 ngrok 사용하기

만약에, 내 컴퓨터가 공유기에 192.168.0.2의 아이피를 가지고 서버에서 25565 포트를 열었다고 합시다. 이 때, 공유기가 1.2.3.4 아이피를 가지고 있을때, 외부에서 1.2.3.4:25565로 접근하는 사람들에게 공유기가 어디로 신호를 보내줘야 할 지, 포트 포워딩을 해줘야지만 192.168.0.2:25565로 신호를 보내주는 것입니다.

이러한 과정은 결국 공유기에 접속해서 설정을 해줘야 하는데, 공유기마다 설정도 제각각이고 암호도 걸려있어서 너무나 불편합니다. 특히, 공유기가 여러 개에 연속적으로 연결되는 경우에는 더더욱 골치가 아픕니다. 이런 경우에 외부에서 접근하기가 어렵습니다.

그럼에도 불구하고 포트 포워딩이 없어도 터널링을 통해서 외부에서 공유기에 연결된 컴퓨터의 포트로 직접 접속할 수 있게 하는 방법이 있습니다. 개중에 가장 많이 사용되는 툴이 바로 ngrok 입니다. 원리는 알 필요가 없습니다. 그냥 사용하시면 됩니다.

Ngrok 설치하기

먼저 홈페이지[링크]로 가서 오른쪽 위에 Sign Up을 눌러 가입을 합니다. 구글 계정이 있으면 손쉽게 가입이 가능합니다.

[Download for Windows]를 눌러 파일을 다운로드 합니다. 압축되어 있는데, 압축을 해제하면 ngrok.exe 파일이 있을 겁니다. 이 파일을 별도의 폴더로 옮겨줍니다. 예를 들면, 내 문서에 ngrok 폴더를 만들어서 그 안에 놓으면 됩니다. 웹 페이지는 끄지 말고 그대로 둡니다.

Ngrok Path 등록 (선택)

이제, cmd에서 손쉽게 실행하기 위해서는 Path를 등록해야 합니다. 등록을 하지 않을 것이라면 ngrok이 설치된 위치를 cmd에서 직접 찾아가서 실행해야 하는 번거로움이 있습니다. Path 등록을 위해서 [윈도우 + Pause] 버튼을 눌러 시스템 설정 화면을 열어줍니다. Pause 버튼은 키보드 오른쪽 위 구석에 있는데, 없으면 [제어판]으로 가서 [시스템]을 찾아 들어가면 됩니다.

[시스템]의 좌측에서 [고급 시스템 설정 > 고급 > 환경 변수]에 들어가면 사용자 변수와 시스템 변수 두 개가 있는 것을 확인할 수 있습니다.

사용자 변수에서 Path를 찾아서 [편집]을 눌러줍니다. 그러면 Path를 추가할 수 있는 화면이 나타나는데, 여기에서 [찾아보기]를 눌러서 아까 ngrok 파일을 가져다 놓은 폴더를 선택해주시면 됩니다.

확인을 눌러 저장하기를 반복하여 모든 화면을 종료합니다.

Ngrok 실행하기

이제 cmd를 열고 ngrok을 실행하면 됩니다. 먼저 정상적으로 실행이 가능한 상태인지 확인해봅니다.

ngrok NAME: ngrok - tunnel local ports to public URLs and inspect traffic ...

네, ngrok 명령이 잘 인식되었고 정상적으로 작동 가능한 상태입니다. 이제 웹 페이지에서 authtoken이라는 것을 등록하라고 나왔던 것을 기억하실 겁니다. 해당 코드를 복사해서 붙여넣습니다.

ngrok authtoken B2**************************************** Authtoken saved to configuration file: C:\Users\laman/.ngrok2/ngrok.yml 1

토큰이 저장되었습니다. 이제 원하는 포트로 ngrok을 실행할 수 있습니다. 기왕 하는거, 조금이라도 더 빠르도록 가장 가까운 지역으로 터널을 설정하도록 하겠습니다.

ngrok tcp -region jp 25565 ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Account ***** ** (Plan: Free) Version 2.3.35 Region Japan (jp) Web Interface http://127.0.0.1:4040 Forwarding tcp://0.tcp.jp.ngrok.io:13808 -> localhost:25565 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00

실행하면 이렇게 ngrok이 동작하고 있는 화면이 나타납니다. 여기에 보시면 자동으로 Forwarding이 생성된 것을 확인할 수 있습니다. 그러면 이제 친구에게 알려줘야 할 것은 도메인과 포트 2개 입니다.

  • 도메인 : 0.tcp.jp.ngrok.io
  • 포트 : 13808

이 값들은 ngrok을 실행할 때마다 바뀌므로 참고하셔야 합니다. 이렇게 해서 외부 사용자는 localhost, 내 컴퓨터의 25565 포트로 들어올 수 있게 되었습니다!

참고사항

ngrok은 무료 티어가 존재해서 개인 사용자도 이런 식으로 사용이 가능하지만, 몇 가지 제약 사항이 있습니다.

  • 개인 사용자는 하나의 세션만 생성 가능합니다.
  • 하나의 세션에서 최대 4개까지의 터널 생성이 가능합니다.
  • 생성되는 도메인의 alise나 포트를 지정할 수 없습니다.
  • 분당 최대 40개의 커넥션만 허용됩니다.

40 커넥션 문제가 있어서 한 번에 많은 사람이 몰리거나 요청이 발생하면 차단될 수 있습니다. 간단하게 소규모로 친구들끼리 게임하는 것에는 문제가 없으니, 포트 포워딩 대신에 ngrok을 사용해보시는 것도 좋을 것 같습니다!