サーバ成果物

ポート開放ができないネットワークで Web サーバをお手軽に公開する (SSH ポートフォワード)

前提
  • 特定のポートを公開したい
  • ポート開放ができない
  • 外部に対する SSH 接続は可能なネットワークに接続している
  • ポート開放が可能なネットワーク (ex. 実家) とサーバがある
    (なければ格安のレンタルサーバとかでも)
構成

ポート開放が可能なネットワークにあるサーバ 1 に SSH サーバを立てる
ポート開放ができないネットワークにある サーバ 2 から、サーバ 1 に SSH トンネルを掘る
サーバ 2 に来た通信をサーバ 1 に転送する

設定

サーバ 2 : 通信を転送するかの設定 (/etc/ssh/sshd_config)

GatewayPorts yes
AllowTcpForwarding yes

サーバ 1 : 起動時に自動でサーバ 2 に SSH トンネルを掘る設定 (crontab -e)

@reboot /usr/bin/ssh -N -f -p 1822 -i <秘密鍵のパス!> -R \*:80:localhost:8080 <username>@<domain>

-N, -f : SSH が確立したらシェルを開かず、バックグラウンドへ潜る
-R : サーバ側のポートをローカルへ転送する
* : サーバに来た全部の IP からの通信を転送
80 : サーバのこのポートに来た通信を転送
localhost : 変えることないはず
8080 : リモートのこのポートに転送する

あとがき

レオパレスの LeoNet でサーバを公開するために編み出した術。
本当はできないことをするので、何かしらの問題が起こっても自己責任で。
もっと良くするならば、autossh とかを使って、SSH 切断時のリトライとかの設定など。

VPN などを使う手法もあるかと思うが (実際別案件では VPN を使用している)、特定のポートへ通信を転送するだけなら、SSH のポートフォワードのほうが楽だし同じことができると思う。

コメント