Ngrok이란?
목차
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://[^"]*
로 하면 된다