外出先から自宅サーバーに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
- GCEでAlways Freeのインスタンスを稼働させる。
- Firewallで自宅と外出先のIPアドレスからのSSHを許可する。
(後からでも可)
自宅サーバー
- tmuxをインストール
※セッション記憶できればいいのでscreenでも可- CentOS 7.8/8.1
$ sudo yum install tmux
- Ubuntu 20.04
$ sudo apt install tmux
- CentOS 7.8/8.1
- tmux起動
$ tmux
- 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
- RemoteForward確認
$ ss -lnt | grep 10022 LISTEN 0 128 127.0.0.1:10022 0.0.0.0:* LISTEN 0 128 [::1]:10022 [::]:*
- tmuxをデタッチ
Ctrl+b
の後d
キー - GCEから抜ける
$ exit
- 自宅サーバーから抜ける
$ exit
外出先
macOS Catalinaの場合
- 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プロキシーを設定する。
- 別のターミナルを開いてDynamicForward確認
% netstat -na | grep 1080 tcp6 0 0 ::1.1080 *.* LISTEN tcp4 0 0 127.0.0.1.1080 *.* LISTEN
- Webブラウザに設定
Firefoxの場合、about:preferencesの一番下、接続設定ボタンで設定できる。
注意事項
GCEのAlways Freeの無料通信は1GBまで
1 GB の北米から全リージョン宛ての下りネットワーク(1 か月あたり、中国とオーストラリアを除く)