May 9, 2020

ファイアウォールに穴を開けずに外出先から自宅サーバーへSSH接続

外出先から自宅サーバーにSSHしたいけど、自宅ルーターのFirewallはIPアドレスを制限できない。
SSHを開けると全アドレスに解放してしまうのは嫌だ。
仮に制限できても、自宅も外出先も固定IPではない。
💡そうだ!Always Freeで無料で使えるGCEをBastionにすれば外出先からFirewallルールも変えられるじゃん!


概要

  • GCPのFirewallで自宅と外出先IPアドレスのSSHを許可
  • 自宅サーバーからGCEにSSHしてRemoteForward
  • 外出先からProxyCommandでGCEを経由して自宅サーバーにSSH
    • 自宅LANのWebサービスにもアクセスしたければDynamicForward

SSHサーバーだけ動いていればいいのでお手軽


手順

GCP

  1. GCEでAlways Freeのインスタンスを稼働させる。
  2. Firewallで自宅と外出先のIPアドレスからのSSHを許可する。
    (後からでも可)

自宅サーバー

  1. tmuxをインストール
    ※セッション記憶できればいいのでscreenでも可
    • CentOS 7.8/8.1
      $ sudo yum install tmux
      
    • Ubuntu 20.04
      $ sudo apt install tmux
      
  2. tmux起動
    $ tmux
    
  3. GCEにSSH
    $ ssh username@instance-ip  -i path/to/ssh.key -C -R 10022:127.0.0.1:22 -o ServerAliveInterval=60
    

    ~/.ssh/config に書くならこんな感じ

    Host gce
      HostName            instance-ip
      User                username
      IdentityFile        path/to/ssh.key
      Compression         yes
      RemoteForward       10022 127.0.0.1:22
      ServerAliveInterval 60
    

    コマンドオプションがスッキリする

    $ ssh gce
    
  4. RemoteForward確認
    $ ss -lnt | grep 10022
    LISTEN   0         128               127.0.0.1:10022            0.0.0.0:*
    LISTEN   0         128                   [::1]:10022               [::]:*
    
  5. tmuxをデタッチ
    Ctrl+b の後 d キー
  6. GCEから抜ける
    $ exit
    
  7. 自宅サーバーから抜ける
    $ exit
    

外出先

macOS Catalinaの場合

  1. GCE経由で自宅サーバーにSSH
    ~/.ssh/config に書く
    Host gce
      HostName gce-instance-ip
      User     username
      Compression true
      IdentityFile path/to/ssh.key
    Host homeserver-gce
      HostName 127.0.0.1
      Port 10022
      User username
      DynamicForward 1080
      ProxyCommand ssh -W %h:%p gce
      IdentityFile path/to/ssh.key
    

    接続する

    % ssh homeserver-gce
    

これで外出先から自宅サーバーにSSH接続できた。

自宅LANのWebサーバーに接続したい場合はWebブラウザでSOCKSプロキシーを設定する。

  1. 別のターミナルを開いてDynamicForward確認
    % netstat -na | grep 1080
    tcp6       0      0  ::1.1080               *.*                    LISTEN
    tcp4       0      0  127.0.0.1.1080         *.*                    LISTEN   
    
  2. Webブラウザに設定
    Firefoxの場合、about:preferencesの一番下、接続設定ボタンで設定できる。

注意事項

GCEのAlways Freeの無料通信は1GBまで

1 GB の北米から全リージョン宛ての下りネットワーク(1 か月あたり、中国とオーストラリアを除く)

© 2020 nissy-lab.com