コンテンツにスキップ
Dev Classmethod Jp Articles Ssh2 Tunnel Socks5 Proxy Nodejs

ssh2でSSHトンネルとSOCKS5プロキシをNode.jsで自動構築してみた

  • URL: https://dev.classmethod.jp/articles/ssh2-tunnel-socks5-proxy-nodejs
  • 日付: 2026-06-21
  • Tier: Tier 2
  • 要旨: Node.js ssh2ライブラリで 2ホップSSHトンネル(TCP フォワーディング)と SOCKS5ダイナミックプロキシを実装。SOCKS5 RFC1928 ハンドシェイクをバッファ付き非同期リーダーで自前実装し、指定ポート制限の無い任意宛先通信を デプロイ先IP 経由で実現。

詳細

3つのスクリプト:(1)proxy.mjs - 踏み台9090 ↔ デプロイ先40001 の 2ホップTCPリレー(ローカルTCPサーバー)。ホスト鍵検証で ssh-keyscan ~/.ssh/known_hosts と照合。fuser -k でクリーンアップ。(2)test-nginx.mjs - nginx(port 80)ルーティング検証用バリアント。(3)socks5-proxy.mjs - SOCKS5ハンドシェイク自前実装。Reader クラスで指定バイト数ジャスト読込、グリーティング・CONNECTリクエスト解析(IPv4・domain・IPv6対応)、上流リレー、flush() で残余バイト転送後に生データパイプ切替。デプロイ先IP で外部通信(CloudFront IP制限)に対応。環境変数で認証・接続先指定。ホスト鍵検証必須。