포스트

Ngrok이란?

목차

  1. Ngrok이란?
  2. Ngrok 주요 기능
  3. Ngrok 작동 원리
  4. Ngrok 장단점
  5. Ngrok 설치 방법
  6. Ngrok Configuration
  7. Ngrok Systemd 등록

Ngrok이란?

Ngrok은 로컬 개발 환경에 띄운 웹 서버나 API를 외부에서 접근 가능하도록 터널을 만들어주는 도구다

  • 외부 서비스에서 로컬로 오는 Webhook 콜백 테스트
  • 같은 네트워크가 아닌 환경에서 로컬 서버로 접근
  • 사내망이나 방화벽 뒤에 있는 개발물을 고객, 동료한테 공개
  • SSH나 포트를 안전하게 노출해 원격으로 디버깅

이런 경우에 사용할 수 있다

Ngrok 주요 기능

Secure Tunnel

  • 로컬 머신의 포트를 안전한 HTTPS/TLS 터널로 감싸 외부에 노출

자동 URL 생성

  • 매번 고유한 서브도메인을 발급
  • 유료 요금제에서는 커스텀 도메인 연결 가능

Web Interface & Request Inspection

  • 터널링된 트래픽을 웹 대시보드에서 실시간으로 모니터링
  • 요청/응답 헤더·바디를 보는 Replay 기능 제공

TCP 터널

  • SSH, 데이터베이스, 기타 TCP 서비스에 대한 터널링 지원

ACL & 인증

  • 유료 버전에서 IP 화이트리스트, 요청 인증 토큰 등 보안 제어

Ngrok 작동 원리

클라이언트 실행

  • 로컬에 설치한 ngrok 클라이언트를 실행

ngrok 서버 연결

  • 클라이언트가 ngrok의 퍼블릭 서버에 API 요청을 보내면서 터널을 개설

퍼블릭 주소 발급

  • ngrok 서버가 외부용 URL(또는 도메인)을 생성·반환

트래픽 포워딩

  • 외부에서 들어오는 요청은 ngrok 서버 → ngrok 클라이언트 → 로컬 애플리케이션 순으로 포워딩

응답 반환

  • 로컬 애플리케이션의 응답을 다시 ngrok 서버가 받아 외부 클라이언트에 전달

Ngrok 장단점

장점단점
1. 설치와 사용이 간단 (즉시 터널링 가능)1. 무료 플랜의 서브도메인이 매번 변경됨
2. HTTPS 기본 지원2.트래픽·연결 시간에 제한(무료 플랜)
3. 실시간 요청·응답 모니터링3. 퍼블릭 노출이므로 보안 설정 신경 써야 함
4. 커스텀 도메인·ACL 등 다양한 보안 기능 (유료)4. 장기 프로덕션용으로는 추가 설정·비용 고려 필요

Ngrok 설치 방법

1
2
3
4
5
6
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
  | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
  && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
  | sudo tee /etc/apt/sources.list.d/ngrok.list \
  && sudo apt update \
  && sudo apt install ngrok

위 커맨드로 설치는 간단하게 할 수 있다

Ngrok Configuration

설치를 한 다음에는 AUTHTOKEN을 발급 받고 등록해야한다
대시보드에서 AUTHTOKEN을 생성한다
그리고 ngrok config add-authtoken $AUTHTOKEN로 등록하면 된다
이후 ngrok http 80를 해보면 로컬 머신의 80 포트를 외부에서 접근 가능한 공개 URL로 터널링을 해준다

Ngrok Systemd 등록

ngrok http 80을 하게 되면 터미널이 살아 있어야 터널링이 유지된다
그래서 systemd 파일을 만들어서 관리하고 있다

우선 ngrok.yml설정 파일을 수정한다

1
2
3
4
5
6
7
8
version: "3"
agent:
    authtoken: $AUTHTOKEN

tunnels:
    web:
        proto: http
        addr: 80                    

그리고 vi /etc/systemd/system/ngrok.service를 만든다

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=ngrok tunnel
After=network.target

[Service]
ExecStart=$ngrok_path/ngrok start --config $ngrok_yml_path/ngrok.yml --all
Restart=on-failure
User=ubuntu
Environment=HOME=/home/ubuntu

[Install]
WantedBy=multi-user.target

이후 아래 과정을 통해서 정상적으로 실행되는지 확인하면 된다

1
2
3
4
sudo systemctl daemon-reload
sudo systemctl enable ngrok
sudo systemctl start ngrok
sudo systemctl status ngrok

ngrok systemd가 만든 url 확인은 curl -s http://localhost:4040/api/tunnels | grep -o 'https://[^"]* 로 하면 된다