소소한 꿀팁..?

터널링(feat. ngrok 설치)

sami355 2024. 4. 17. 17:06

상황

개인 프로젝트를 하다 막히는 부분이 생겼습니다. 물리적으로는 동일한 머신에서 수행하지만 소프트웨어적으로는 서로 분리되어 있으며 분리되어 있는 머신간에 통신을 해야 했습니다. 구글링 결과 다음과 같은 결과를 얻을수 있었습니다.

- 데이터 스트림을 인터넷 상에서 가상의 파이프를 통해 전달시키는 기술
- 컴퓨터 네트워크에서 터널링 프로토콜을 사용하면 네트워크 사용자는 기본 네트워크가 직접 제공하지 않는 네트워크 서비스에 접근하거나 제공할 수 있다

 

터널링에 대해 짧게 더 이야기하면 

터널링을 하면 데이터 패킷은 기존 망이 아닌 다른 망에 보낼수 있도록 캡슐화가 되어집니다. 그리고 기존 OSI 7계층에서 이루어지는 캡슐화와 터널링의 차이는 캡슐화를 하는 목적에서 차이가 존재합니다.

 

OSI 7계층과 터널링의 차이

OSI 7계층에서 이루어지는 캡슐화는 상위계층으로 보내기 위해 캡슐화(일종의 추상화라는 생각이 듭니다.)가 이루어 집니다. 그러나

터널링은 기존 네트워크망에서 제공하거나 받지못하는 서비스를 주고 받기 위해 캡슐화를 진행합니다.

 

즉 터널링을 사용하면 내부에서만 사용하는 네트워크망을 외부로 노출시킬수 있다는 말이 됩니다..!

(군대에서 담당 간부님이 터널링에 대해서 언급해주시면서 해볼래? 라고 말씀하셨을때 해볼걸 그랬습니다...ㅠㅠ)

 

ngrok

터널링이 뭔지 간략하게 알아보았으니 이제 응용을 해봅시다! 사실 터널링을 지원하는 프로그램 혹은 프로토콜은 계층별로 다양하게 존재합니다. 

  • 1계층: 물리계층은 지원하지 않습니다..
  • 2계층: L2TP, PPTP, L2F
  • 3계층: IPsec,  MPLS, GRE
  • 4계층: SSL/TLS
  • 5계층: SSH
  • 6계층: SSL/TLS
  • 7계층: HTTPS, FTPS, SMTPS/IMAPS/POP3S, ngrok

여기서 저는 ngrok을 선택해 터널링을 사용하고자 합니다. ngrok을 선택한 이유는 7계층인 응용계층에서 가장 간단하게 사용할수 있기 때문입니다.


아래는 저의 ngrok 설치기 입니다.

저는 맥북 에어 m2 16gb를 사용하고 있습니다. 저는 저의 로컬 망에서 동작하고 있는 포트를 외부에 노출하고 싶기에 ngrok을 이용해 외부에서도 접근할 수 있게끔 만들고 싶습니다.

 

1. 먼저 homebrew를 통해 ngrok을 설치합니다.

brew install ngrok/ngrok/ngrok

 

2. 다음과 같이 외부에 공개하고 서비스와 포트 번호를 입력해주면...

다음과 같이 에러가 발생합니다... 보아하니 인증 토큰이 필요해보이니 안내해주는 대로 회원가입을 해봅시다.

 

3. 그러면 다음과 같은 창이 나오고..

토큰 설정까지 전부 따라한후 터널링을 해줍시다..! 그러면 아래와 같이 멋드러진 화면이 보이게 됩니다

 

그리고 요청을 보내면 아래와 같이 로그가 찍히면서 성공적으로 요청을 보낼수 있게 됩니다