Debian で WPA-PSK(AES) 方式で無線接続 - wpa_supplicant 編

[Debian で WPA-PSK(AES) 方式で無線接続 - NetworkManager 編](http://qiita.com/items/42e96c2daa2ca932f7e3 "Debian で WPA-PSK(AES) 方式で無線接続 - NetworkManager 編 #UNIX #Debian - Qiita") で上手く行かなかった人とか psk 直書き気持ち悪い人のための wpa_supplicant 編。

## 環境
前と同じ。
- OS: Debian wheezy
- 無線 LAN firmware: iwlwifi
- ルータ: Buffalo WZR2-G300N

## wpa_supplicant を使う

今度は wpa_supplicant を使います。

```sh
$ sudo aptitude install wpasupplicant
```

今回使いませんでしたが、GUI 版の wpagui というのもあるようです。

### PSK 入手

これも前と同じだから略。以下、

- (E)SSID: MY_HOME
- psk: HogeFuga

として説明を進めます。

### wpa_supplicant.conf

wpa_supplicant.conf は最初は多分ないと思います。あったら適当に名前変えてバックアップとってください。

```sh
$ cd /etc/wpa_supplicant
$ wpa_passphrase MY_HOME HogeFuga
network={
        ssid="MY_HOME"
        #psk="HogeFuga"
        psk=6c254edfa9a2340e5b668f990eb6658243486f0fcda2c810264848441415547b
}
$ wpa_passphrase MY_HOME HogeFuga > wpa_supplicant.conf
```

`wpa_passphrase` コマンドが psk を暗号化しつつ設定ファイルの雛形を作ってくれます。psk の文字数がおかしかったりすると怒られます。こいつをファイルに保存して、いくつか書き加えます:

```wpa_supplicant.conf
network={
        # ここから
        proto=WPA
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        priority=2
        # ここまで書き加える
        ssid="MY_HOME"
        #psk="HogeFuga"
        psk=6c254edfa9a2340e5b668f990eb6658243486f0fcda2c810264848441415547b
}
```

サンプルの設定ファイル (`/usr/share/doc/wpa_supplicant/`以下) では pairwise とか group の所にもっとややこいことが書いてあったりしましたが、WPA-PSK(AES) 方式の場合はこれで十分だと思います（CCMP が AES の暗号プロトコルらしいので）。

`#psk="HogeFuga"` の行はただのデバッグ用の出力なので、正しく接続できるようになったら消していいです（むしろ消すべき）。まぁ、NetworkManager の時みたいに直書きするよりはちょっとだけマシだろう…。

```sh
$ sudo chmod 600 wpa_supplicant.conf
```

今度は `/etc/network/interfaces` をいじります。

```sh
$ cd /etc/network
$ sudo vim interfaces
```

```txt:interfaces
# :
# :
# 以下の行を追加
auto wlan0
iface wlan0 inet dhcp
	wpa-conf	/etc/wpa_supplicant/wpa_supplicant.conf
```

で、こっからえらく手間取りました。

```sh
$ sudo wpa_supplicant -iwlan0 -Dwext wpa_supplicant.conf -dddt -c wpa_supplicant.conf
# -i(インターフェース)
# -D(ドライバ)
# -d(デバッグ出力)
# -c(設定ファイル)
 :
 :
```

いくつかのサイトで、「これで設定が通るか確認、通ればオッケー！」みたいに書いてありましたが、私の場合全く上手く行きませんでした。なんでや。

とりあえず、NetworkManager など同類のものが動いてたら競合する可能性があるので止めておきます。念を押して `/etc/NetworkManager/system-connections/MY_HOME` も消しておきました。その上で無線ネットワークインターフェースを再起動。

```
$ sudo service network-manager stop
$ sudo rm /etc/NetworkManager/system-connections/MY_HOME
$ sudo ifdown wlan0
$ sudo killall wpa_supplicant
$ sudo ifup wlan0
Internet Systems Consortium DHCP Client 4.2.2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/**:**:**:**:**:**
Sending on   LPF/wlan0/**:**:**:**:**:**
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 4
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 10
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPOFFER from 192.168.11.1
DHCPACK from 192.168.11.1
bound to 192.168.11.11 -- renewal in 70583 seconds.
```

通った。

ちなみに最初は四苦八苦した挙句投げて再起動してみたら上手く行きました。なので、wlan0 が既に立ち上がってたのがよくなかったのだと思います。更にちなみにちなみに `/etc/network/interfaces` を書き間違えて再起動したら DHCPDISCOVER の所の retry だけで 1 分くらい食いました。

----

試行錯誤の結果 NetworkManager もしくは wpa_supplicant を使って WPA-PSK(AES) 方式で接続できるようになりましたが、もっとスマートな方法があるぜとかここの設定開けば GUI で一瞬 YO~ とかあればご指摘下さい。

### 参考文献
- [無線LAN問題の調査方法 - openSUSE](http://ja.opensuse.org/%E7%84%A1%E7%B7%9ALAN%E5%95%8F%E9%A1%8C%E3%81%AE%E8%AA%BF%E6%9F%BB%E6%96%B9%E6%B3%95 "無線LAN問題の調査方法 - openSUSE")
   - 再起動しまくったり色々試行錯誤してる時のトラブルシューティングでここが参考になりました。ありがとうございます。
- man
- /usr/share/doc/wpa_supplicant/README.*
- /usr/share/doc/wpa_supplicant/examples/*
   - 色々ググったけど古い情報しか出てこなかったり環境が違い過ぎたりしてまるで参考にならなかったから後は自力で man 読んでください。