RaspberryPi(Raspbian)の無線LAN子機設定

# 無線LANインタフェース

RaspberyPi3では無線LANインタフェースを標準装備していますが、RaspberryPi2より前だとUSBの無線LANモジュールを使うことになります。PC版のDebian LinuxですとUSBポートに挿せばそのまま使えますが、Raspbianですと、たいていドライバが無いといわれ使えませんのでドライバのインストール作業が必要になります。
古い製品で、現在では入手困難ですが、下記の要領でドライバをインストールします。（カーネル再構築してもいいのですが、面倒なので省略します。）


## [WLI-UC-GNM](http://buffalo.jp/product/wireless-lan/client/wli-uc-gnm/)

USBポートに挿した後、dmesgコマンドで以下のようなエラーメッセージが出力されます。

```
[ 1163.799178] phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
[ 1163.866211] phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
[ 1164.099060] phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.
```


/var/log/syslogにも同じ情報が出力されています。見ればわかりますが、rt2x00lib_request_firmwareがドライバにあたります。ドライバは下記の方法でインストールできます。

```
$ sudo git clone http://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
$ sudo cp linux-firmware/rt2870.bin /lib/firmware/rt2870.bin
```

のような感じで、gitで公開されているモジュールをコピーすると、コピーした直後から使えるようになります。

（ハズレを引いただけかもしれませんが、WLI-UC-GNMはものすごく発熱し、ビニール類が焦げた匂いと共に、使用不能になりましたorz）


## [GW-USWExtreme](http://www.planex.co.jp/product/wireless/gw-uswextreme/)

GW-USWExtremeをUSBポートに挿した後lsmodコマンドを見ると、

```
8192cu                490305  0
```

なるモジュールが登録されます。で、dmesgコマンドでは、

```
[  306.298670] usb 1-1.5: Product: GW-USValue-EZ
[  306.298685] usb 1-1.5: Manufacturer: GW-USValue-EZ
[  306.298701] usb 1-1.5: SerialNumber: 00e04c000001
[  306.588108] usbcore: registered new interface driver rtl8192cu
```

と表示されます。ということで、

```
$ sudo git clone http://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
$ sudo cp linux-firmware/rtlwifi/rtl8192cufw.bin /lib/firmware/
```

のような感じでドライバをインストールすると使えるようになります。



## [IO-DATA WN-G300UA](http://www.iodata.jp/product/network/adp/wn-g300ua/)

WN-G300UAをUSBポートに挿した後、dmesgコマンドの結果を参照すると、

```
[    3.069247] rtl8192cu: MAC address: xx:xx:xx:xx:xx:xx
[    3.069252] rtl8192cu: Board Type 0
[    3.071339] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1
[    3.071375] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[    3.071566] usbcore: registered new interface driver rtl8192cu
[    3.072307] usb 1-2.1: firmware: direct-loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[    3.075344] intel_rapl: domain uncore energy ctr 0:0 not working, skip
[    3.084542] ieee80211 phy0: Selected rate control algorithm 'rtl_rc'
```

と表示されます。チップセットはGW-USWExtremeと同じrtl8192cuなので、GW-USWExtremeと同じ方法でドライバをインストールすれば使えます。


ちなみに、普通のDebian LinuxでRealtek製品を使用する場合は、

```
$ sudo apt-get install firmware-realtek
```

が必要になることがあります。


# 無線LANインタフェース関連コマンド

無線LAN関連の設定をしていると下記のコマンドをよく使います。無くてもいけますが、あった方が便利です。使用方法はmanコマンド等を参照してください。

- 無線LANインタフェースの状態確認 

```
$ iwconfig
```

- SSIDのスキャン

```
$ iwlist wlan0 scan
```

- IP Addressの設定／確認

```
$ sudo ifconfig wlan0
```

IPアドレスの確認だけならroot権限は不要です。



- インタフェースのup／down

```
$ sudo ifdown wlan0
$ sudo ifup wlan0
```


# 無線LANインタフェースの設定 -その1-

１. /etc/network/interfacesに下記の内容を追加します。管理方法によっては/etc/network/interfaces.d/wlan0とかでもOKです。

```
auto wlan0
iface wlan0 inet dhcp
    wpa-ssid mynetworkname
    wpa-psk mysecretpassphrase
```

ちなみに、mysecretpassphraseはプレーンテキスト（平文）です。

２. OSを再起動するか下記のコマンドでwlan0をアップさせます。

```
$ sudo ifup wlan0
```

または、

```
$ sudo systemctl restart networking
```

最近のLinuxで`/etc/init.d/networking restart`のように起動スクリプトをフルパスで実行するのは古いやり方らしいです。


# 無線LANインタフェースの設定 -その2-

上記の設定では平文パスワードを設定ファイルに書き込む必要があり、ある程度不特定多数の人を対象とした共用サーバを想定した場合、セキュリティ的に微妙です。wpasupplicantを使うと平文パスワードをファイルに書く必要がなくなるので、その辺の懸念が解消できます。

１. wpasupplicantのインストール

```
$ sudo apt-get install wpasupplicant
```

Raspbianでは標準でインストールされていると思います。


２.wpa_passphraseコマンドでwpa_supplicant.confを生成する。

```
$ sudo wpa_passphrase myid mypass >> /etc/wpa_supplicant/wpa_supplicant.conf
```
のような感じでwpa_supplicant.confを生成します。myid=0123456789、パスワード=orzorzorzの場合、下記のようになります。wpa_supplicant.confファイル生成後、コメントとして平文パスワードも出力されますので、生成後、平文パスワードの行だけは削除しておくべきだと思います。

```
$ sudo wpa_passphrase "0123456789" "orzorzorz" >> /etc/wpa_supplicant/wpa_supplicant.conf
$ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="0123456789"
        #psk="orzorzorz"
        psk=6dbf83f384f06b857c2be1f3f2351b89b9e31c7ebe8c8cc8aa3ad6d1c0f57baa
}
```

３. /etc/network/interfacesに下記の内容を追加します。管理方法によっては/etc/network/interfaces.d/wlan0とかでもOKです。

```
auto wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
```

４. OSを再起動するか下記のコマンドでwlan0をアップさせます。

```
$ sudo ifup wlan0
```

または、

```
$ sudo systemctl restart networking
```


## wpa_supplicant.confのオプション

wpa_passphraseコマンドの結果をwpa_supplicant.confに貼り付けるだけでは認証方式や暗号化方式が一致せず、うまく無線LAN親機とつながらないことがあります。WPA-PSK2／AESの設定しか試したことがありませんが、インターネット上で紹介されていた設定例（出典元は不明）をまとめておきます。

- 認証方式：WPA-PSK、暗号方式：TKIP

```
network={
    ssid="myssid"
    psk=パスワード
    proto=WPA
    key_mgmt=WPA-PSK
    pairwise=TKIP
    group=TKIP
}
```

- 認証方式：WPA-PSK、暗号方式：AES

```
network={
    ssid="myssid"
    psk=パスワード
    proto=WPA
    key_mgmt=WPA-PSK
    pairwise=CCMP
    group=CCMP
}
```

- 認証方式：WPA-PSK2、暗号方式：TKIP

```
network={
    ssid="myssid"
    psk=パスワード
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=TKIP
    group=TKIP
}
```

- 認証方式：WPA-PSK2、暗号方式：AES

```
network={
    ssid="myssid"
    psk=パスワード
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    group=CCMP
}
```


# 参考サイト

- [WiFi/HowToUse - Debian Wiki](https://wiki.debian.org/WiFi/HowToUse)