【今日から始めるラズパイ その 2】Raspberry Pi SSH 接続設定

### 2020/10/14 追記

本記事では、『ルータのリースアドレスを固定させる』, 『ラズパイに静的アドレスを固定する』の両方を設定しています。
しかし、実際は以下のどちらかの設定がしてあれば問題ありません。

- **ルータ側でリースするアドレスを固定するのであれば、ラズパイ側は単なる DHCP クライアントとして設定する**
- **ラズパイで静的にアドレスを設定するのであれば、ルータはリースアドレスの範囲から除外する**

本記事のやり方は多少冗長な部分がありますが、どちらでも問題なくリモート接続ができます。

# はじめに

今回は、<font color=Magenta>**ラズパイをリモート操作できるようにする方法**</font> について書いていこうと思います。
（ラズパイの初期セットアップ方法については[こちら](https://qiita.com/ren1007/items/ee540c7fb7b7ab97c5ab)で説明をしています。）
ラズパイに周辺機器を接続しなくても、別の PC から遠隔操作できたら便利ですよね。手間も省けるし、配線も減って机上がすっきりします。
ってか、第一机の上に置いておかなてもいい！

ということで、今回はラズパイに電源を繋いで部屋の隅に置いておくだけで利用することができるように設定していきます。

# 対象読者

- **ラズパイを初めて使用する人、またはセットアップする人 ✋**<br>
  設定上どうしても CGI（コマンドライン）操作やネットワークの基礎知識が必要です。<br>
  以下に必要最低限の内容を書いているので、順番に読んでみてください。
- **すでに IP アドレスの役割やリモート接続の仕組みを分かっている人 ✋**<br>
  以下で説明している "基礎" は読みとばして、環境の確認あたりから読んでみてください。

# 目次

- **1. 基礎**
  - <font color=Gray>リモート接続</font>
  - <font color=Gray>ルータの機能</font>
  - <font color=Gray>どうやってインターネットに繋がる？</font>
    - IP アドレス
    - DHCP
  - <font color=Gray>LAN</font>
    - プライベート IP アドレス
    - サブネットマスク
- **2. 準備**
  - 環境
- **3. ラズパイの設定**
  - IP アドレスの確認
  - IP アドレスの固定
- **4. ルータの設定**
  - DHCP の設定
- **5. リモート接続**
- **最後に**
  - 引用・参考

# 1. 基礎

## <font color=Gray>リモート接続</font>

> リモート接続（アクセス）とは、離れた場所にあるデバイスから通信回線を通して（主に無線で）ネットワークやデバイスにアクセスすることを指す。
> 遠隔地にある機器をあたかも手元にあるかのように操作することができ、実機を取り出さなくてもネットワーク経由で操作やメンテナンスといった制御が可能になる。

## <font color=Gray>ルータの機能</font>

今回、リモート接続の設定をする上でルータは必要不可欠です。
おそらく多くの家にはインターネットに接続するためにルータ（Wi-Fi）を設置しているかと思います。
普段、家庭などに設置して利用しているルータは「ホームゲートウェイ」や「統合ホームルータ」などとも呼ばれ（人によっては L3 Switch と呼ぶ人もいるかもしれませんが）主に次のような機能を持ちます。
（今回はメインではないので、簡単な説明に留めます。雰囲気だけ理解してもらえれば。）

- <font color=Orange>アクセスポイント（AP）機能</font>：ネットワーク内に存在する機器間の通信をブリッジ（中継）する
  - 有線ネットワークや有線通信の機器へ接続するための装置を無線 LAN AP（無線 AP / Wi-Fi AP）と言います
  - 単に AP という場合はこれを指すことが多い
- <font color=Orange>ルーティング</font>：ホームネットワーク（LAN）と外部のインターネット（WAN）で通信を行う
- <font color=Orange>スイッチング</font>：ホームネットワーク内（LAN 間）で通信を行う
- <font color=Orange>ネットワークアドレス変換（NAT / NAPT）機能</font>：グローバル IP アドレスとプライベート IP アドレスを変換する
  - グローバル IP アドレス：WAN で使用するアドレス
  - プライベート IP アドレス：LAN で使用するアドレス
- **<font color=Orange>DHCP</font>：アドレスを端末に割り当てる**　**⬅︎ 　<font color=Purple>今回はここを触ります**</font>
- <font color=Orange>ファイアウォール機能</font>：LAN と WAN の通信をフィルタリングして内部ネットワークを守る

## <font color=Gray>どうやってインターネットに繋がる？</font>

### IP（Internet Protocol）アドレス<br>

まず、ネットワーク通信の前提として IP アドレスというものがあります。IP アドレスはよく住所などに例えられますが、ネットワークの世界ではこの IP アドレスを実世界の住所のように使用することでデータの送受信先を決定します。
我々が普段使用しているスマホやタブレット、PC 等のデバイスはルータに接続することによって通信に必要な IP アドレスを受け取ります。
&emsp;
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/a7a841aa-a10b-0ff7-be17-bd95fdac6dc2.png">

### DHCP（Dynamic Host Configuration Protocol）<br>

正確にはルータによって割り当てられるアドレスは DHCP という機能によって貸し出された（リースされた）ものです。アドレスが貸し出されている期間を『<font color=Red>リース期間</font>』と呼びます。
普段使用している端末は、気づかないうちに一定期間ごとにルータに対して再びアドレスを割り当ててもらえるようにリクエストをかけることでリース期間の延長を行っています。リース期間は一般に 24 時間 ~ 1 週間以上とされています。
ルータはリクエストを受けると未使用のアドレスを割り当てます。このように一定期間ごとにアドレスを返却したり借用したりを繰り替えすことでネットワークへの接続を保っているわけです。
これにより DHCP クライアントはリースメカニズムによって「移動」「電源を切る」などの場合に不要になったアドレスを持たなくてよくなります。

&emsp;
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/1b904308-3591-772a-b068-3db8663f2d24.png">

従って、 大抵の場合は同じアドレスを割り当て直してくれますが、**常に同じ IP アドレスが割り当てられることは保証されていません。**
&emsp;
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/b4dd12c0-c5ea-a379-2092-3b943c20ce23.png">

実際に、サーバやプリンタなどの固定リソースを設置する場合、IP アドレスを使用してリモート接続することが多いため、固定アドレスを設定しておくのが一般的です。
**アドレスを固定することで割り当てられるアドレスは同じになるので、あたかもリース期間が無限であるかのように延長することができます。**
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/773129d7-0386-78f1-87b8-1279ea4e3e01.png">

## <font color=Gray>LAN（Local Area Network）</font>

### プライベート IP アドレス

我々は普段、ホームルータに接続するとき LAN 環境に所属します。LAN 内では IP アドレスのうち、プライベート IP アドレスを使用します。
IP アドレス（今回は IPv4）はドット`.`で区切られた 8 ビット（`0~255`）の数値 4 つで表します。この時、それぞれの 8 ビットセグメントを『<font color=Red>オクテット</font>』と呼びます。プライベート IP アドレスは最初の２つの数値が`192.168.x.x`であるため、家庭内で使用できるアドレスは後半 2 つを変えたものです。
ルータの種類や設定によって変わってきますが、ドットで区切られた 3 つ目の数値が`192.168.1.10`や`192.168.10.10`だったりします。
大抵の場合は IP アドレスの 4 つ目の数値を自動的に割り振ります。また、通常`192.168.11.1`といった先頭のアドレス、もしくは`192.168.11.254`などの末尾のアドレスはルータ自身のアドレス（デフォルトゲートウェイアドレス）として使用するため、我々が使用するデバイスには割り当てられません。また、`192.168.11.0`や`192.168.11.255`などの先頭、末尾のアドレスは用途が決められているためデバイスに割り当てて使用することはできません。
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/bd4923de-3c0f-b5c8-6c21-89822a5e2b29.png">

### サブネットマスク

アドレスとセットで出てくるのがサブネットマスクです。主に`255.255.255.0`や`255.255.0.0`などと表されます。
これらは同じ**ネットワーク（LAN）に存在するかどうかを判別するために利用されます。**
例えば、上の画像のように 4 つ目の数字のみが変化するネットワークの場合、`255.255.255.0`または`/24`のように表記します。もし、3 つ目も変化する場合は、`255.255.0.0`または`/16`と表記します。
これは、
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/a78ac125-9f49-9fcd-f820-c2b4ff52a362.jpeg"><br>

1 つのオクテットは 8 ビットなので、`8×24=24`, `8×2=16` といったような計算になります。これらは`255`の部分がネットワークの特定に利用され、`0`の部分がホストの特定に利用されます。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/ac4558ea-c20e-122a-8457-e0990171e080.png">
今回は単純なものを扱っていますが、近年は<font color=Red>クラスレスアドレス（CIDR）</font>を利用することが一般的なので、`255`だけでなく、`254`や`252`, `248`なども存在します。

- [IP アドレスサブネットマスク早見表](https://keyboardmaster.jimdofree.com/%E3%83%AA%E3%83%A2/ip%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9-%E6%97%A9%E8%A6%8B%E8%A1%A8/)

`255.255.255.0`同士であれば同一ネットワーク、それ以外であれば別のネットワークといった具合にネットワークの範囲を切り分けるために使用されます。
正確にはネットワークアドレスとの`AND`演算によって範囲を決定したり、デバイスの数は`2のn乗`で計算したりします。
サブネットの範囲の決定や VLAN によるサブネット化に関しては今後詳しく説明できる記事を書きたいと思います。

# 2. 準備

本題に戻ります。今回はラズパイにリモート接続するということでしたが、この場合も同様で IP アドレスを使用します。
しかし、ここで**アドレスがその都度変わっていては、再びラズパイに周辺機器をつないでアドレスを確認する必要がでてくる**ため本末転倒です。
従って、いつも同じアドレスでアクセスできるように IP アドレスの固定を行う必要があるわけです。
実際にやることは２つです。

- ① <font color=Red>**ラズパイの設定**</font>
  - 常に同じアドレスを受け取るように設定する
- ② <font color=Red>**ルータの設定**</font>
  - ラズパイに常に同じアドレスをリースできる（割り当てる）ように設定する

## 環境

- 接続元 PC：Mac
  - OS：macOS Catalina ver. 10.15.6
- 接続先 PC：Raspberry Pi 3 model B
  - OS：Raspbian GNU/Linux version: 8 jessie（Debian）
- ルータ
  - 製品：BUFFALO WCR-1166DS Version 1.33
  - 設定：Air Station
- 構成<br>
  - 今回は LAN 内でのリモート接続を想定して設定をするので PC、ラズパイ共に同じルータに接続してください。<br>
    <img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/52de3fe0-fabf-f6e8-fba1-f5b8b58266d2.png">

# 3. ラズパイの設定

### IP アドレスの確認

ラズパイに接続したい PC（Mac）から`Terminal.app`（ターミナルの起動：「Launchpad → ターミナル」） を起動して以下のコマンドを実行し、現在割り当てられている IP アドレスを確認します。

- `$ ifconfig | grep inet` **<font color=Blue>(操作:Mac)</font>**<br>
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/2f435fd5-3258-f9af-810e-55a34c733c6f.png"><br>
  ➡︎ 接続元 PC には`192.168.11.2`が割り当てられています。

次に、まずは通常通り周辺機器を接続した状態でラズパイを起動します。
ラズパイのターミナルから以下のコマンドを実行し、同様に現在割り当てられている IP アドレスを確認します。

- `$ ifconfig | grep inet`**<font color=Blue>(操作:ラズパイ)</font>**<br>
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/e1e2879d-f384-bf45-2171-68325c2d9de7.png"><br>
  ➡︎ ラズパイには`192.168.11.4`が割り当てられています。

これらはどちらも`addr 192.168.11.x mask 255.255.255.0`というアドレスを持っているため、同一 LAN に存在することがわかります。

- <font color=Red>注意：サブネットマスクは`0xffffff00`といった 16 進表記の場合があります。`0xffffff00`と`255.255.255.0`は同じです。</font>
- <font color=Red>注意：割り当てられるアドレスは環境によって異なります！</font>

### IP アドレスの固定

IP アドレスの設定を config ファイルと呼ばれる構成ファイルに書き込むことで、接続する IP アドレスを固定することができます。

① config ファイルを`/etc`配下に`dhcpcd.conf`という名前で作成します。**<font color=Blue>(操作:ラズパイ)</font>**<br>

- `$ sudo touch /etc/dhcpcd.conf`（ファイル生成）

② 固定アドレスはラズパイに今割り当てられているアドレス`192.168.11.4`として、以下を書き込みます。

- `$ sudo nano /etc/dhcpcd.conf`（ファイル編集）<br>

```dhcpcd.conf
#Wi-Fiインターフェースを指定
interface wlan0
#指定したい (固定したい) IPアドレスを指定
static ip_address=192.168.11.4/24
#ルータのIPアドレスを指定
static routers=192.168.11.1
#ルータのIPアドレスを指定
static domain_name_servers=192.168.11.1
```

→ [Ctrl] + [x]で編集を確認して、[shift] + [y]で保存します。

③ ラズパイを再起動します。

- `$ sudo reboot`

④ 再びアドレスを確認します。

- `$ ip addr | grep 192`<br>
  おそらく次のように表示されるはずです。<br>
  `>> inet 192.168.11.4/24 brd 192.168.11.255 scope global wlan0`<br>
  これでラズパイ側の設定は完了になります。

# 4. ルータの設定

BUFFALO 製のルータの場合、「Air Station」と呼ばれる管理画面にアクセスして設定を変えます。
Air Station は BUFFALA 製のルータにある GUI（視覚的に操作できる）管理画面ページです。<br>
**Air Station のアクセスにはルータのアドレスが必要になります。**
先ほど、接続元 PC やラズパイが存在する LAN 環境は`192.168.11.0/24`であることがわかっています。ルータは使用可能なアドレスの内、基本一番先頭のアドレスを使用するので今回であれば、`192.168.11.1`ということになります。
chrome や safari 等の検索エンジンを開き、URL 入力欄に`192.168.11.1`と入力してください。
以下のような画面が現れます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/4491f54b-1781-554b-510b-54ab43e68964.png">
工場出荷時の状態では、ユーザ名「admin」、パスワード「password」で入れます。
<font color=Red>注意：ルータ設定がアドレス入力によって Web 画面上できることを初めて知った人、パスワードがデフォルトのままの状態の人はこれを機に、ルータ本体のパスワードもセキュリティ上設定しておくことを強く薦めます。</font><br>
Air Station にログインすると、以下のような画面が表示されるので、『詳細画面』から設定を行っていきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/0df78fe3-3c27-fd7e-6187-770b881b7e44.png">
詳細画面を開くと、以下のような画面になります。左側の『LAN』タブから『DHCP リース』を選択します。
すると、このルータに接続されている、またはしたことがある端末の情報と割り当てられたアドレスを見ることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/ebd373d9-7917-ee07-40af-40123a5b77ad.png">
&emsp;赤色の欄を見ると、「手動設定」と「自動割当」となっているデバイスがあると思います。
（画像は伏せていますが、各端末は『MAC アドレス』という端末固有の 16 進表記アドレスで識別されています。）
&emsp;次に、青色の欄を見ると、自動割当となっているデバイスにはリース期限があり、手動割当となっているデバイスはリース期限がありません。
今回は`192.168.11.4`のアドレスを固定していきます。（※ 画像ではすでに設定を終えた状態です。）<br>
まず、『手動割当に変更』を押下して、MAC アドレスは触らず、IP アドレスが`192.168.11.4`であることを確認したら『修正保存』を押下します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/20aadadf-b4a8-a37f-92dc-49f5ed017d4a.png">
これで`192.168.11.4`というアドレスはラズパイに固定され、「ラズパイ = `192.168.11.4`」とバインドできました。
これにて、ルータ側の設定も完了です。

# 5. リモート接続

いよいよ本題であるリモートを接続します。通常リモート接続には<font color=Red>**SSH**</font>というものを使用します。
（Telnet というものもありますが）

### SSH とは

> Secure Shell（セキュアシェル、SSH）は、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。

① 周辺機器を繋いだラズパイから以下のように接続の許可を行います。**<font color=Blue>(操作:ラズパイ)</font>**<br>

- ラズパイのターミナルから以下のコマンドを実行して SSH ディレクトリを作成します。
  - `$ sudo mkdir ~/.ssh`（フォルダは空で大丈夫です）
- SSH を『有効』にします。
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/d0752ecb-8a0a-aeb8-304d-8dbb98441efc.png">
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/0ac166f5-b03c-7d17-b11a-14e8bf6c788e.png">
- パスワードを設定します。
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/5996de82-2338-afa7-75af-1e433734df3c.png">
  デフォルトはユーザ「pi」、パスワード「raspberry」なのでパスワードだけ変更してみましょう。
  ここまでこれば、後はラズパイの電源を落として周辺機器を外し、部屋の好きな場所に置くだけです。（電源コードを挿すだけ。）

② ラズパイがネットワークに接続されているかを確認します。**<font color=Blue>(操作:Mac)</font>**

- Mac のターミナルを開いて以下のコマンドでラズパイが同一ネットワークにあることを確認します。
  - `$ ping -c 5 192.168.11.4`<br>
    以下のように表示されれば、成功です。<br>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/23c09240-d2fa-57b9-cab7-1ae260665b04.png"><br>
    `ping`は指定したアドレスを持つデバイスと通信できるかを確認するために使用します。<br>
    送信した 5 つのパケットはロス（パケ落ち）することなくすべて送信できています。

③ リモート接続します。**<font color=Blue>(操作:Mac)</font>**
ラズパイが同一 LAN にいることが確認できたら、以下のコマンドを実行してください。

- `$ ssh pi@192.168.11.4 -p 22`<br>
  以下のような画面が接続元 PC（自分の Mac）に表示されたらリモート接続は成功です。
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705806/746c92e8-7953-7cb2-9f4b-7a5fb395600d.png"><br>
  これでラズパイをリモートから制御することができるようになりました。

# 最後に

今回は、それまで周辺機器がなければ使用できなかったラズパイをリモート接続によってコントロールできるように設定しました。実際にラズパイを使用する場合は、リモート接続によってコントロールすることが多いですし、そっちの方が圧倒的に効率的で便利です。
また、接続設定をするにあたりネットワークの基礎的な部分にも触れてみました。

- **ネットワークに接続するためには IP アドレスが必要**
- **ホーム LAN では IP アドレスは、設定されたルータから受け取る**
- **受け取っているアドレスは DHCP によって貸し出されたもの**
- **アドレスが貸し出されている期間を『リース期間』と呼ぶ**
- **リモート接続を使用する機器のアドレスは固定しておく**

今後、今回設定したラズパイをリモートからでも GUI 操作できる設定や、LAN 外からのアクセス設定とそれに伴うセキュリティの設定などについても書いていきたいと思います。

それでは 💪

### 引用・参考

---

https://honto.jp/netstore/pd-book_28439979.html
https://www.netacad.com/

---