SSH Reverse Tunnel

Cloud Relay

社内NW変更ゼロで、クラウドから社内APIへ安全にアクセス

🌐 Outbound SSH のみ
🔧 社内NW変更不要
⚡ 既存API変更不要
▼

なぜ Cloud Relay が必要なのか

🏢

社内APIをクラウドから呼びたい

社内サーバのREST APIをクラウドサーバから利用したいが、社内NWは外部からのインバウンド接続を許可していない。

🚫

NW設定を変更できない

ファイアウォールやルーターの設定変更は、権限・運用ルール上困難。VPNも同様。

✅

Outbound SSH は通る

社内サーバから外部への SSH (port 22) は許可されている。この唯一の出口を利用する。

システム全体構成

インターネット
👤
外部クライアント
ブラウザ / APIクライアント
HTTPS
☁️ クラウドサーバ
🔀
Nginx
リバースプロキシ (443)
proxy_pass
🚇
localhost:8888
トンネルポート
🔑
sshd
SSH サーバ (22)
SSH リバーストンネル (暗号化)
← 社内からの Outbound SSH →
🏢 社内ネットワーク
🔄
autossh
自動再接続 (systemd)
localhost
☕
REST API
:8080
ℹ️ 社内NW設定の変更は一切不要

SSH リバーストンネルとは

1

社内サーバが SSH 接続を開始

社内サーバの autossh がクラウドサーバへ SSH 接続します。これは通常の outbound 通信なので、社内NWの変更は不要です。

autossh -R 8888:localhost:8080 user@cloud
2

クラウド上にトンネルポートが開く

-R 8888:localhost:8080 により、クラウドサーバの localhost:8888 が社内の localhost:8080 に接続されます。

cloud:8888 ⟵ SSH ⟶ onprem:8080
3

Nginx がリクエストを転送

外部クライアントからの HTTPS リクエストを Nginx が受け、proxy_pass でトンネルポートへ転送します。

proxy_pass http://localhost:8888;
4

社内 API がレスポンスを返す

リクエストはトンネル経由で社内サーバの REST API に到達し、レスポンスが同じ経路で外部クライアントに返されます。

🔒 全経路暗号化

なぜ SSH トンネルを選んだか

項目 SSH リバーストンネル WebSocket 中継 Cloudflare Tunnel
社内NW変更 不要 不要 不要
実装コスト 低 高 低
追加ソフト autossh のみ Bridge Client 実装 cloudflared
既存API変更 不要 不要 不要
外部依存 なし なし Cloudflare
暗号化 SSH (標準) TLS (要設定) TLS (自動)
冗長化 複数トンネル + Nginx アプリ実装 Cloudflare側

多層防御設計

🔑

SSH 鍵認証

  • Ed25519 鍵のみ許可
  • パスワード認証は無効化
  • 鍵は定期ローテーション
👤

専用ユーザー制限

  • tunnel ユーザーは nologin
  • ポート転送のみ許可
  • ForceCommand でシェル無効
🌐

ネットワーク制限

  • GatewayPorts no (localhost のみ)
  • トンネルポートは外部非公開
  • Nginx 経由でアクセス制御
🛡️

Nginx レイヤー

  • TLS 1.2+ 暗号化
  • SSO / API キー認証
  • セキュリティヘッダー付与

本番向け冗長構成

クラウドサーバ
Nginx
upstream plant_api
localhost:8888 primary
localhost:8889 backup
proxy_next_upstream error timeout;
Tunnel 1 (:8888)
Tunnel 2 (:8889)
社内サーバ
ssh-tunnel.service
ssh-tunnel-backup.service
REST API :8080

フェイルオーバー動作

  1. メイントンネル (:8888) に障害発生
  2. Nginx が proxy_next_upstream でバックアップに切替
  3. バックアップトンネル (:8889) 経由で通信継続
  4. autossh がメイントンネルを自動再接続
  5. 復旧後、Nginx がメインに自動復帰

使用技術

autossh
トンネル自動管理
systemd
サービス管理・自動起動
Nginx
リバースプロキシ・SSL
OpenSSH
暗号化トンネル
REST API
社内 API
Docker
コンテナデプロイ