外出先からssh接続する

外出先からsshサーバに接続したいですよね。
そのためにはグローバルIPアドレスを取得して、ルータの設定もしないといけません。

グローバルIPアドレスを知る

外からではMacの設定画面で見えていたIPアドレスを使ってアクセスはできません。このIPアドレスはローカルIPアドレスといって、家の中でしか使えないIPアドレスです。

まずはグローバルIPアドレスを知る必要があります。下記サイトで簡単に調べられます。

https://www.cman.jp/network/support/go_access.cgi

もしかしたら、グローバルIPアドレスが割り振られていないかもしれません。そのときはプロバイダにお問い合わせください。

ルータを設定する

グローバルIPアドレスがわかりましたが、これだけではまだ外からアクセスはできません。これはsshグローバルIPアドレスを指定しても、ルータにぶら下がっているどのコンピュータに接続を回せばよいかわからないためです。

そこでルータのポートマッピング設定を下記のように行います。
IPアドレスsshサーバのローカルIPアドレス
プロトコルTCP
ポート:22(もし変更していれば変更した番号)

これでssh接続の際にグローバルIPアドレスを指定すれば、とりあえずは外からのアクセスが可能となります。*1

ドメインを取得して、グローバルIPアドレスと結びつける

おそらくほとんどの方はグローバルIPアドレスが任意のタイミングで変化します。*2これでは困ってしまうので、ドメイン*3を取得して、ドメインで接続できるようにします。

まずはドメインを取得しましょう。

私はここでドメインを取得して運用していました。*4

http://ddo.jp/

wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=ドメイン名&pw=パスワード' | iconv -f euc-jp -t utf-8 >> /root/log/ddns.log"

このコマンドでグローバルIPアドレスドメインを結びつけられます。また結びつける際に/root/log/ddns.logにログを吐き出すようにしています。

ただしこのコマンドを一度実行するだけではグローバルIPアドレスの変化に対応できません。そこでこのコマンドを定期的に実行して、グローバルIPアドレスの変化に備えます。

$ echo "wget -q -O - 'http://free.ddo.jp/dnsupdate.php?dn=imoto-yuya-1234&pw=Watashi2' | iconv -f euc-jp -t utf-8 >> /root/log/ddns.log" >> /root/bin/ddns.sh
$ chmod 700 /root/bin/ddns.sh
$ crontab -e
25 * * * * sh /root/bin/ddns.sh
$ systemctl enable cronie    (ArchLinuxに必要かも)
$ systemctl start cronie    (ArchLinuxに必要かも)

ここでcronというスクリプトを自動実行するデーモンプロセスを使いました。この設定でddns.shスクリプトは毎時間の25分に自動実行されます。

*1:だめなときはファイアウォールを切ってみてください。それで接続できれば、ファイアウォールの設定を見直しましょう。

*2:ルータが再起動したりすると変化するらしいです。

*3:google.co.jpとかyahoo.co.jpみたいなやつです。

*4:久しぶりに見たら、サービスの内容が少し変わっていました。今はもっといいところがあるかもしれません。