TP-Link Wi-Fiルーターを使ってスマホから家のサーバーにSSH接続する
目的
スマートフォン(Android)端末から、家のLinuxサーバーにSSH接続し、作業を行うことです。
セキュリティの観点からVPN経由でのSSH接続を行います。
TP-Link製のWi-Fiルーターでは、VPNサーバーを簡単に立てられるのでその機能を使いました。
TP-Link設定
TP-Linkルーターの管理画面から設定を行います。
管理画面
動的DNSサービス
お家のインターネット回線のグローバルIPが動的な場合(個人契約はほとんど動的だと思います)、定期的にグローバルIPが変わってしまうので、TP-Linkの動的DNSサービスを使ってドメインネームとグローバルIPを紐づけます。
詳細設定→動的 DNS
上記画像の文章の通りTP-Link IDでログインを行ったあと動的DNSの画面に戻ると、設定ができます。
ステータスがoccupiedになっていればサブドメインの競合なく動的DNSが完了しています。
気になる場合はpingコマンド等で設定した動的DNSが家のグローバルIPに紐づいているか確認するとよいです。
$ ping xxxxxxxxxx.tplinkdns.com
PING xxxxxxxxxx.tplinkdns.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.
64 bytes from xxx.com (xxx.xxx.xxx.xxx): icmp_seq=1 ttl=64 time=1.62 ms
64 bytes from xxx.com (xxx.xxx.xxx.xxx): icmp_seq=2 ttl=64 time=0.997 ms
64 bytes from xxx.com (xxx.xxx.xxx.xxx): icmp_seq=3 ttl=64 time=0.720 ms
64 bytes from xxx.com (xxx.xxx.xxx.xxx): icmp_seq=4 ttl=64 time=0.902 ms
VPNサーバー
OpenVPNによるVPNサーバーを構築します。
VPNサーバー→OpenVPN
- 証明書を生成
- OpenVPN 有効にチェックを入れて項目の設定を行う
- 設定ファイルを出力
の順番に行っていきます。
証明書を生成は「生成する」のボタンを押して待てばよいだけです。
OpenVPN 有効にチェックを入れて項目の設定を行うも、チェック後、特にこだわりが無ければそのままで問題ありません。
設定ファイルを出力すると、ダウンロードが始まります。
OpenVPN-Config.ovpn設定
OpenVPN-Config.ovpnを開くと以下のようになっています。
client
dev tun
proto udp
float
nobind
cipher AES-128-CBC
comp-lzo adaptive
resolv-retry infinite
remote-cert-tls server
persist-key
remote xxx.xxx.xxx.xxx 1194
<ca>
以下証明書・鍵情報
以下のように変更して保存します。(こちらの記事を参考にしました)
client
dev tun
proto udp
float
nobind
- cipher AES-128-CBC
+ data-ciphers-fallback AES-128-CBC
comp-lzo adaptive
resolv-retry infinite
remote-cert-tls server
persist-key
- remote xxx.xxx.xxx.xxx 1194
+ remote xxxxxxxxxx.tplinkdns.com 1194
+ tls-cert-profile insecure
+ tls-version-min 1.0
<ca>
以下証明書・鍵情報
VPNサーバーを経由しない場合どうなるか
単純にSSHの為のポートをインターネットに解放した場合、世界中から攻撃が来るようです。(特に22番そのままだと沢山来る)
接続先サーバーローカルIPアドレス予約
接続先サーバーのローカルIPアドレスを予約し、固定します。
詳細設定→ネットワーク→DHCPサーバーからMACアドレスを指定してIPアドレスを予約
スマートフォン設定
VPN
OpenVPNによるVPNサーバーに接続するためのアプリをインストールします。
私はOpenVPN Connectを使いました。
VPNサーバー設定で出力したOpenVPN-Config.ovpn
をスマートフォンに転送し、Upload Fileで選択します。
転送方法についてはできるだけファイルを外に出さない方法が好ましいと思います。私は家のNAS経由で行いました。
BROWSEからファイルを選択
設定が適切であればそのまま繋がります。
この時、Wi-FiルーターのWi-Fiを使っていると失敗するので、キャリア回線で試すのが良いと思います。
SSH
ターミナルエミュレーターのTermuxアプリをインストールします。
開くと最初こんなかんじ
SSH鍵を発行します。
$ pkg update
$ pkg install openssh
$ ssh -V
$ ssh-keygen -t ed25519
$ cat ~/.ssh/id_ed25519.pub
SSH Configファイルを作ります。その後は左へスワイプし新しいセッションを開始します。
Host xxxxxxxxxx
HostName 接続先サーバーのローカルIP
User yyyy
IdentityFile ~/.ssh/id_ed25519
接続先サーバーの~/.ssh/authorized_keys
にTermuxで発行したid_ed25519.pub
の情報を入れます
$ vi ~/.ssh/authorized_keys
ssh-ed25519 AAAA~~~~~~~~~~~ xxxxxxx@localhost
Termuxからssh
コマンドでサーバーへ接続します。
接続できました!
これで外から家のサーバーにSSHすることができますね。
Discussion