Node.js 200줄로 만든 셀프 호스팅 Ngrok 대안

발행: (2026년 2월 2일 오후 01:13 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

Problem

여러 로컬 서비스를 터널링해야 하지만, Ngrok 무료 플랜은 단일 터널만 제공합니다.

Solution

약 200줄의 Node.js 로 작성된 자체 호스팅 터널입니다. 한 번의 명령으로 여러 개의 퍼블릭 URL을 생성할 수 있습니다.

liptunnel http 3000,8080,5000 --multi

이 명령은 도메인에 세 개의 퍼블릭 URL을 만들고 트래픽을 다음과 같이 라우팅합니다:

User → yourdomain.com → VPS → WebSocket → Your PC → localhost

Core concept

Server (forward HTTP via WebSocket)

// server.js (Express middleware)
app.use((req, res) => {
  const subdomain = req.headers.host.split('.')[0];
  tunnels[subdomain].ws.send(JSON.stringify(req));
  // Wait for response, then send it back to the client
});

Client (receive, proxy, respond)

// client.js
ws.on('message', (data) => {
  const request = JSON.parse(data);
  const proxy = http.request(
    {
      hostname: 'localhost',
      port: request.port,
      path: request.path,
      method: request.method,
      headers: request.headers,
    },
    (response) => {
      let body = '';
      response.on('data', (chunk) => (body += chunk));
      response.on('end', () => {
        ws.send(
          JSON.stringify({
            statusCode: response.statusCode,
            headers: response.headers,
            body,
          })
        );
      });
    }
  );
  proxy.end(request.body);
});

나머지 구현은 오류 처리, 연결 관리 및 정리 작업을 담당합니다.

Features

  • Privacy – 트래픽이 여러분의 인프라를 벗어나지 않습니다.
  • Cost – VPS 비용만 발생합니다(그 외는 무료).
  • Branding – 터널 URL에 자체 도메인을 사용할 수 있습니다.
  • Control – 라우팅 및 처리에 대한 완전한 커스터마이징이 가능합니다.

Performance

  • 메모리: 터널당 약 25 MB
  • 지연시간: 약 5 ms 오버헤드
  • 처리량: 초당 100+ 요청

Use cases

  • 로컬에서 마이크로서비스를 빠르게 설정
  • 배포 없이 웹훅(Stripe, GitHub 등) 테스트
  • 클라이언트 브랜드 URL을 활용한 시연
  • 제3자 서비스를 사용할 수 없는 규제‑민감 환경(헬스케어, 금융 등)

Setup

# Clone the repository
git clone https://github.com/ibrahimpelumi6142/liptunnel
cd liptunnel

# Install dependencies
npm install

# Run the server on your VPS
node server/server.js   # <-- 원격 머신에서 시작

# Start a tunnel from your local machine
liptunnel http 3000     # <-- 노출하려는 포트로 3000을 교체

Technology stack

  • Node.js – 런타임
  • WebSocket – 터널 전송 수단
  • Express – 선택적인 대시보드(무거운 프레임워크 아님)

모든 코드는 약 200줄짜리 단일 프로젝트에 포함됩니다.

Roadmap (coming soon)

  • Let’s Encrypt를 이용한 HTTPS 지원
  • 고정 서브도메인
  • 터널 접근을 위한 인증 토큰
  • 요청 인스펙터 UI

Contributing

프로젝트가 유용하다면 GitHub에서 별을 눌러 주세요:

⭐ GitHub repository

이슈를 열거나 개선을 위한 풀 리퀘스트를 자유롭게 제출해 주세요.

Back to Blog

관련 글

더 보기 »