ubuntu server 16.04LTS をWifiにつなげる
知識不足でWifiにつなげるだけで非情に苦労しました。
前提
linuxでのwifiへの接続方法
2種類あるようです。
- iwconfig
- wpa_supplicant
一般的にはwpa_supplicantのようですが、WEPのときはiwconfigでも設定できるようです*1。 WPAやWPA2のときはwpa_supplicantが必要です。 私のルーターはWPA2-PSK-CCMPなのでwpa_supplicantを使いました。
流れ
- wpa_supplicantのinstall
- wpa_supplicant.confを作って、wifiの接続方法などを設定する
- /etc/network/interfacesをいじって起動時にWifiへ接続するようにする
- 謎のエラーと戦う
wpa_supplicantのinstall
$ sudo apt-get install wpa_supplicant
私の環境では、はじめから入ってました。
wpa_supplicant.conf
wpa_supplicant.confは接続するSSIDや接続方式、パスワードを記述する設定ファイルです。 まず、wpa_passphraseコマンドを使って雛形的なものを作ります。
$ wpa_passphrase my_ssid my_passwod network={ ssid="my_ssid" #psk="my_password" psk=e53bb7df43156b8a6ad5d3ea5bb4078fada2531e2d5d5208c3bc1a17c3278220 }
これだけではターミナルに表示されるだけなので、ファイルに出力します。
$ sudo wpa_passphrase my_ssid my_passwod >> /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant.confを書き換えて次のようにします。
ctrl_interface=/var/run/wpa_supplicant # UNIXドメインソケットを作成する領域 ctrl_interface_group=wheel # 上記UNIXドメインソケットの所有グループ network={ ssid="my_ssid" #psk="my_password" psk=e53bb7df43156b8a6ad5d3ea5bb4078fada2531e2d5d5208c3bc1a17c3278220 key_mgmt=WPA-PSK # 暗号化キーの管理方式 proto=RSN # 認証方式 pairwise=CCMP # ユニキャスト用暗号化方式 group=CCMP # ブロードキャスト/マルチキャスト用の暗号化方式 }
重要なのはnetwork={}に追加した4項目です。
- key_mgmt は WPA-PSK でも WPA2-PSK でも WPA-PSK が入る。
- proto は WPA-PSK なら WPA、WPA2-PSK なら RSN。
- parwise と group は恐らく同じものが入る。TKIP または、CCMP (AESのこと)。
ここらへんは以下のサイトが理解の助けになりました。 security.nekotricolor.com
なお、修正すればWEPも設定できます。詳しくは Linuxで無線LAN (ゆうちくりんの忘却禄) で少し紹介されています。
実行する
wpa_supplicantコマンドはオプション(-i -c)と値をくっつけることに注意です。
$ sudo wpa_supplicant -iwlp3s0b1 -c/etc/wpa_supplicant/wpa_supplicant.conf ... CTRL-EVENT-CONNECTED - Connection to xx:xx:xx:xx:xx:xx completed ・・・
このようなメッセージが出れば成功です。Ctrl-Cで停止して改めてバックグラウンドで実行します。
$ sudo wpa_supplicant -iwlp3s0b1 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
少し話がそれますが、wlp3s0b1というのはwlanのことです。 新しい命名規則によって、wlanではなくそのようにつけられてそうです。 調べながら知りましたが、詳しくはこちらに。 qiita.com
ちなみに、以下のように、wlan0からrenameされていることがわかります。
$ dmesg | grep wlp3s0b1 [ 18.439600] brcmsmac bcma0:1 wlp3s0b1: renamed from wlan0
起動時にWifiへ接続するようにする
先程のやり方では再起動するたびにコマンドを打ち込まなくてはいけないので、起動時に設定するようにします。
$ sudo vi /etc/network/interfaces --- auto lo iface lo inet loopback auto wlp3s0b1 allow-hotplug wlp3s0b1 iface wlp3s0b1 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
ここでは起動時にdhcpサーバ (ルーター) にIPアドレスを割り当ててもらうようにしています。 細かい書式はこちらで詳しく説明されています。自分自身いまいちわかっていませんが。 qiita.com
謎のエラーと戦う
実際は次のようなメッセージ(エラー?)が出て、とても悩まされました。 (dmesg中の一部が突然がターミナルに出力される)
cfg80211 invalid regulatory domain detected
しかし、wifiはつながっているのです。
答えはInvalid JP regulatory domainで見つけました。 どうやら、指定された範囲内に周波数が少し収まっていないぞということらしいです。 そこで友人に借りていたOpenWrt内蔵のBuffalo WZR-HP-AG300Hをルーターとして使っていることを思い出しました。 OpenWrtはカスタマイズ性に優れすぎたファームウェアです。 ちゃんと設定してないと確かにそういうこともあるかもと確認をしていると、さればよ。 ロケール設定がデフォルトの「00 - 世界」のままでした。 国によって使える周波数帯が異なるのだから、ここを設定しなくては範囲が合わないということです。
ということで「JP - Japan」に変えたら、メッセージは出なくなりました。
追記
一度成功したからブログを書いたんですが、再起動したらwifiに繋がらなくなってしまいました。 原因は今のところ2つありました。
wheelグループがないのは知りませんでした。いずれ必要になると思い、以下のサイトを参考にwheel作りました。
kawairi.jp
dhcpがうまく起動しないのはよくわかりません。今のところ手動でなんとかしてます。
$ sudo dhclient wlp3s0b1