NAT超え環境のないサーバーへのSSHする方法

2020年7月29日

この記事を読むと得られる情報

🤔「自宅にある検証用サーバーに外からSSHしたいけど固定されたグローバルIP(GIP)や踏み台、NAT可能なルータなどない…」
😤「けど、外からSSHでアクセスしたい!!
😇「今回はそんなわがままな要望にも、無料で環境を用意する方法をご紹介します!」

本当はVPNでも用意したほうがいいんですが、ちょっとだけ使う時などにいかがでしょうか?

用意するもの

  • サーバー
    • プライベートNWに存在するサーバー
    • 今回、外からSSHしたいサーバー
    • ログインユーザー名をTomと仮定する
  • VPS
    • GIPのあるクラウドのマシーン
    • GCPのアメリカリージョンの最小インスタンスは永年無料で使えるのでオススメ(2020年2月22日現在)
    • GIPをxxx.xxx.xxx.xxx、ユーザー名をAliceと仮定する
  • クライアント
    • 今自分の目の前にあるPC

やり方

NAT超えsshのイメージ
NAT超えsshのイメージ

緑の下線は原理なので、読み飛ばしてもOKです!

  1. 一度サーバーからVPSへの通信経路を確保
    • ssh -N -R 13389:localhost:22 Alice@xxx.xxx.xxx.xxx
    • 13389のポートはサーバー側で使用していなければ他のポートでもOK
    • サーバーの22ポートをVPSの13389ポートへ転送
  2. VPSからクライアントへの通信経路を確保
    • ssh Alice@xxx.xxx.xxx.xxx -L 50000:localhost:13389
    • 50000ポートもクライアント側で使用してなければ他のポートでもOK
    • サーバーの13389ポートをクライアントの50000ポートへ転送
  3. クライアントからサーバーへの通信開始
    • ssh Tom@localhost -p 50000
    • 1と2を経て三段論法のようになってクライアントの50000ポートがサーバーの22につながっているのでそこにSSHすると疎通する

これで、外から無事にSSHが出来るようになりました!
サーバーとVPSの間のSSHを一度サーバーから事前にやっておくなど、少々面倒なこともありますが常に確保しておけば緊急時もすぐにアクセス可能ですよ。