📱

TP-Link Wi-Fiルーターを使ってスマホから家のサーバーにSSH接続する

に公開

目的

スマートフォン(Android)端末から、家のLinuxサーバーにSSH接続し、作業を行うことです。

セキュリティの観点からVPN経由でのSSH接続を行います。

TP-Link製のWi-Fiルーターでは、VPNサーバーを簡単に立てられるのでその機能を使いました。

https://www.tp-link.com/jp/support/faq/3220/

TP-Link設定

TP-Linkルーターの管理画面から設定を行います。

https://www.tp-link.com/jp/support/faq/87/


管理画面

動的DNSサービス

お家のインターネット回線のグローバルIPが動的な場合(個人契約はほとんど動的だと思います)、定期的にグローバルIPが変わってしまうので、TP-Linkの動的DNSサービスを使ってドメインネームとグローバルIPを紐づけます。

https://www.tp-link.com/jp/support/faq/4509/


詳細設定→動的 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

https://www.tp-link.com/jp/support/faq/1544/

  1. 証明書を生成
  2. OpenVPN 有効にチェックを入れて項目の設定を行う
  3. 設定ファイルを出力

の順番に行っていきます。

証明書を生成は「生成する」のボタンを押して待てばよいだけです。

OpenVPN 有効にチェックを入れて項目の設定を行うも、チェック後、特にこだわりが無ければそのままで問題ありません。

設定ファイルを出力すると、ダウンロードが始まります。

OpenVPN-Config.ovpn設定

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>
以下証明書・鍵情報

以下のように変更して保存します。(こちらの記事を参考にしました)

OpenVPN-Config.ovpn
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番そのままだと沢山来る)

https://www.reddit.com/r/linuxquestions/comments/1gaufdm/whats_the_point_of_ssh_over_vpn_connection/?tl=ja

接続先サーバーローカルIPアドレス予約

接続先サーバーのローカルIPアドレスを予約し、固定します。


詳細設定→ネットワーク→DHCPサーバーからMACアドレスを指定してIPアドレスを予約

スマートフォン設定

VPN

OpenVPNによるVPNサーバーに接続するためのアプリをインストールします。

私はOpenVPN Connectを使いました。

https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ja&pli=1

VPNサーバー設定で出力したOpenVPN-Config.ovpnをスマートフォンに転送し、Upload Fileで選択します。

転送方法についてはできるだけファイルを外に出さない方法が好ましいと思います。私は家のNAS経由で行いました。


BROWSEからファイルを選択

設定が適切であればそのまま繋がります。

この時、Wi-FiルーターのWi-Fiを使っていると失敗するので、キャリア回線で試すのが良いと思います。

SSH

ターミナルエミュレーターのTermuxアプリをインストールします。

https://play.google.com/store/apps/details?id=com.termux&hl=ja


開くと最初こんなかんじ

SSH鍵を発行します。

Termux Terminal
$ pkg update
$ pkg install openssh
$ ssh -V
$ ssh-keygen -t ed25519
$ cat ~/.ssh/id_ed25519.pub

SSH Configファイルを作ります。その後は左へスワイプし新しいセッションを開始します。

~/.ssh/config
Host xxxxxxxxxx
    HostName 接続先サーバーのローカルIP
    User yyyy
    IdentityFile ~/.ssh/id_ed25519

接続先サーバーの~/.ssh/authorized_keysにTermuxで発行したid_ed25519.pubの情報を入れます

接続先 Terminal
$ vi ~/.ssh/authorized_keys
ssh-ed25519 AAAA~~~~~~~~~~~ xxxxxxx@localhost

Termuxからsshコマンドでサーバーへ接続します。

接続できました!

これで外から家のサーバーにSSHすることができますね。

GitHubで編集を提案

Discussion