[Raspberry Pi] 外部ネットワークからSSHをしたい!

Linux
スポンサーリンク

Raspberry Piで外部ネットワークからSSHをする方法を書いていきたいと思います。Raspberry Piでと書きましたがDebian系のOSである、Ubuntuでの設定も同じような感じだと思います。
セキュリティ対策もしっかりしてから試してみてください。

IPの固定

IPアドレスの決定

ルータからRaspberry Piに割り振られるIPを固定します。私の管理画面でのDHCP$^{[1]}$の設定はこんな感じになっていてXXX.XXX.XXX.100からXXX.XXX.XXX.200までの間で機器のIPが割り振られることがわかります。

ここではDHCPの範囲外でIPを固定する必要があるので、ルータの使っているノードアドレスを除くXXX.XXX.XXX.2からXXX.XXX.XXX.99またはXXX.XXX.XXX.201からXXX.XXX.XXX.244の間で固定IPを定めなければ成りません。

今回は便宜上XXX.XXX.XXX.25に設定したと仮定して話を進めさせていただきます。

DHCPサーバは、IPアドレス等のネットワーク構成設定をネットワーク上の各デバイスに動的に割り当て、他のIPネットワークと通信できるようにする[1]

Wikipediaより出典」

設定ファイルの書き換え

まず、と/etc/dhcpcd.confという設定ファイルを探してください。以下のようなコードを追記します。

interface eth0 //有線接続
static ip_address=XXX.XXX.XXX.25/24 //先程設定した固定IP
static routers=XXX.XXX.XXX.1 //ルータのノードアドレス
static domain_name_servers=XXX.XXX.XXX.1 //ルータのノードアドレスでたいていはいいと思います

Raspberry Piへの接続方法が無線か有線かで設定が異なります。有線の場合はeth0、無線の場合はwlan0と書き換えます。

これでRaspberry Piを再起動して

ifconfig

を入力して、先程設定したIPアドレスが表示されていれば、設定完了です。

ポート開放(ポートマッピング)

まず、はじめに49152番から65535番の中から好きな数字を一つ選びます。できるだけ推測されにくいものがいいです。そして、その数字をA番とおきます。そしてポート開放の設定をします。これはルータによって違うのでルータの説明書を調べてみてください。

以下の画像は80番ポート(SSH用じゃなくてHTTPとして開けたので本来はA番を入力します。)をポートして設定している図です。LAN IPアドレスは先程設定したRaspberry Piの固定IPです。

ファイヤーウォールの設定

Raspberry Piのファイアーウォールの設定をする必要があります。

sudo ufw allow 先程選んだ任意の番号A番
sudo ufw enable

そして、以下のコマンドでしっかりと設定されたか確認します。

sudo ufw status

これで先程設定した任意の番号A番が許可されていればしっかり設定されています。

SSHの設定ファイルの書き換え

以下のコマンドを実行して設定ファイルを編集します。

sudo vi /etc/ssh/sshd_config

そしたら、以下のコードを入力します。

Port 先程設定した任意の番号
PermitRootLogin no //ルートログイン禁止
PermitEmptyPasswords no //鍵なし認証禁止
PasswordAuthentication no //パスワード認証禁止

これでサービスの再起動をしますが、面倒なのでrebootをします。

sudo reboot

SSH鍵の生成

うまく行かないときは….

設定をしたのにうまく行かないときは以下のコマンドを入力してほんとにポートが開放できているか調べます。

nmap -sT -p先程設定したA番 外部IPアドレス -Pn

これで開けたはずのポートが表示されなければどこか間違っています。可能性として考えられるのは以下のようなことがあります。

1.Raspberry Piのポートが空いていない
2.ルータのポートが空いていない
3.何かしらの対策ソフトをインストールしている
これらをもう一度確認してみてください。

Mydnsを用いたグローバルIPとドメインの紐付け (補足)

グローバルIPは動的に変わると言ってもそんなに頻繁に変わるわけではないので、以下の設定が「面倒だ」と思う方はこの過程をPassしてください。その代わり以下に書いてあるようなコマンドを用いて、手動でグローバルIPを確認する必要があります。

プロバイダから割り当てられるグローバルIPは定期的に変わるので、外部IPを変わった都度打ち直すのは大変です。そこでMydnsを使えばより楽にSSHをすることができるよになります。

Mydnsとは
DDNSとは、IPアドレスが頻繁に変わるホストに固定的にドメイン名を割り当て、アドレス変更に即座に追随してDNS情報を更新するシステム。
http://e-words.jp/w/DDNS.htmlより出典」
ようはグローバルIP=ドメインとして利用できるサービスです。
それを使わない場合は以下のコマンド等で手動で定期的にグローバルIPを取得する必要があります。
curl inet-ip.info //グローバルIPを確認できます。
以下のリンクからMydnsのサイトに行くことができます。
自宅サーバーやVPSに使える無料のダイナミックDNS (Dynamic DNS) | MyDNS.JP
Free Dynamic DNS (DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, Webcam, VPS. You can use many free sub domain, .jp, .net, .asia, etc.. DynDNS is not free

そして会員登録・設定をしたら、ターミナルに戻ってきて自動的に更新されるように設定をやっいきます。
curl -s -u MasterID or ChildID :IDに対するパスワード https://ipv4.mydns.jp/login.html

あとはcron による自動更新をしておけば勝手に更新されるようになります。

まとめ

これで外出先からでも携帯電話のネットワークからでもSSHできるようになるので、管理が楽になりますね。
何か参考になれば幸いです。記事をお読みいただきありがとうございました!

タイトルとURLをコピーしました