ラズパイを大学の無線LANに接続する

## はじめに
　ラズパイを手にして最初にぶち当たる壁。それがwifiの設定だと思っています。GUIによる操作だったら，手元にあるPCと同じ手順で繋げられますが，CUIだとなかなかに面倒臭い。さらにLinux苦手だったらなおさらです。最近研究室で，大学の無線LANに改めて繋ぐ機会があったので，今回記事にしてみました。詳しい方いれば是非コメントをください。

## ターゲット（目標）
- 大学の無線LANに繋げる！
- せっかくだし色々と勉強したい！

## 事前準備
　ラズパイ側の環境は次の通り。

| 名称 | 詳細 |
|:-----------:|:------------:|
| ラズパイのモデル        | Raspberry Pi 3 Model B         |
| SDに入っているOS      | RASPBIAN       |
| OSのバージョン        | June 2018(kernel: 4.14)         |

　ターゲットとなる大学の無線LANについても。他の情報はあとで追記

| 方式 | 詳細 |
|:-----------:|:------------:|
| 認証方式        | **WPA2エンタープライズ**         |
| 暗号化方式      | AES（共通鍵暗号方式）      |

とりあえず，これらの情報を頭に入れていざチャレンジ！！

## 実際にやってみた
　事前準備より，大学の無線LANの認証方式は，**WPA2エンタープライズ**だとわかっています。この方式は，企業や大学といった大きな機関で用いられていることが多く，言うところの認証サーバが，ユーザ名やパスワードでこちらを認証してくるタイプ。実はこの認証がラズパイにとっては相性が悪く，手間がかかるようです。繋ぐためにはこの無線LANに関する情報が足らなさそうなので，とりあえず調べてみました。

```
sudo iwlist wlan0 scan
```
　ターミナルを開き，このコマンドで全てのwi-fiとその詳細情報をかき集めることができます。ずらーっとそれなりの数が出てきますが，とりあえずターゲットだけにフォーカスしてみましょう。

```
          Cell 02 - Address: XX:XX:XX:XX:XX:XX
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=63/70  Signal level=-47 dBm  
                    Encryption key:on
                    ESSID:”YYYYYYYYYY”
                    Bit Rates:5.5 Mb/s; 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s
                              36 Mb/s; 48 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s
                    Mode:Master
                    Extra:tsf=0000000000000000
                    Extra: Last beacon: 60ms ago
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : 802.1x
```
とりあえず重要なのは，下の4行分の `IE:` 部分でしょうか。（一部分を変えて載せています）ESSIDはネットワークの名前。下から4行目の `IE: IEEE 802.11i/WPA2 Version 1` はWPA2のことですね。さらに下の `CCMP` これはAESと殆ど同じ暗号形式だそうです。（厳密には違うらしいけど）
　とりあえず，なんとなく情報は掴んだので実際に無線LANの設定をしてみましょう！ラズパイを起動させ，ターミナルを開きます。

```
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
```
　viエディタでも良いですが，私はまともに使いこなせないので，nanoでやっています。ちなみにsudo権限でないと，編集内容を保存することができないので要注意です。
　この `wpa_supplicant` は，IEEE802.1X/WPAを無線LANクライアントに提供するツールだそうです。開いてみると，既に自宅でWi-Fiを繋げている場合は，おそらくそのWi-Fiに関するidやらpwやらが書いてあるはずです。特に上段部の `ctrl_interface=/var/run/wpa_supplicant` とかは消さずに無視して，その下の空いているところに，繋げたい大学の無線LANに関する情報を書き込んでいきます。書き込むべき内容は次の通りです。

```
network={
        ssid="繋げたい無線LANの名前"
        priority=1
        key_mgmt=WPA-EAP
        pairwise=CCMP
        auth_alg=OPEN
        eap=PEAP
        identity="ログインできるID"
        password="そのIDのPW"
        phase1="peaplabel=0"
        phase2="auth=MSCHAPV2"
}
```
　日本語のところは，自分で書き込みましょう！その他の項目は以下の通りです。

| 形式 | 詳細 |
|:-------------:|:------------|
| priority      | 複数ネットワーク下の優先度。大きい数ほど優先度高 |
| key_mgmt      | 認証方式。WPA2エンタープライズ |
| pairwise      | 暗号化方式。AESだがCCMPで表記 |
| auth_alg      | 認証アルゴリズム。WPA/WPA2はOPEN |
| eap           | EAPメソッド。認証方式でphase2へつながる |
| phase1        | 外部認証。0というのはバージョンっぽい |
| phase2        | 内部認証。VPNやWPA2の認証としてよく使うMS-CHAPv2 |

　これらの用語を調べていると，認証サーバはRADIUSサーバらしいです。とりあえず，大学のwifiで繋ぎたい！という場合はこれだけ書き加えればOKなはずです。無事にすべて書くことができたら，一度ラズパイを再起動しましょう！

```
sudo reboot
```
　私はこれだけでとりあえず大学の無線LANには繋がりました！！これからの研究に熱が入ります。

## ラズパイ4の場合（2022年6月）
　時代はラズパイ4となったので，こちらについても追記します。

| 名称 | 詳細 |
|:-----------:|:------------:|
| モデル        | Raspberry Pi 4 Model B         |
| OS      | Raspberry Pi OS (64-bit)        |
| リリース日        | April 4th 2022 (kernel version: 5.15)        |
| URL | https://www.raspberrypi.com/software/operating-systems/ |

　`/etc/wpa_supplicant/wpa_supplicant.conf` のファイルについては，上記と同じです。これに加えて `/etc/dhcpcd.conf` のファイルの**最終行の下に**下記を追加してください。

```
interface wlan0
env ifwireless=1
env wpa_supplicant_driver=wext,nl80211
```

　一応，再起動してからインターネットブラウザを開いてみましょう。

## 追記（2018年10月）
　初投稿後，ありがたいことにコメントの方をいただきまして，
**Q.　/etc/network/interfacesのファイルは書き換えなくて良いの？**
というご質問をいただきました。実はこの件，私の研究室でも少し話題に上がりまして，その際は書き換えたらできるようになったというものでした。どうやら書き換える必要はなさそうですね。私ももう少し調べてみる必要がありそうです。

## 参考文献
- [RaspberryPi 公式ドキュメントを日本語訳](http://igarashi-systems.com/sample/translation/raspberry-pi/configuration/wireless-cli.html)
- [YOS OPENSONAR  WPA_SUPPILICANT.CONF(5)](http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man5/wpa_supplicant.conf.5.html?l=ja)
- [FUJITSU セキュリティパターンの種類](https://www.fmworld.net/biz/fmv/product/hard/network/manual/security/manual/chap100010.html)