2021 年度 OSS リテラシー 3 : wi-fi (WPA2 Enterprise) の設定
前準備:ネットワークの再接続用スクリプト
ラズパイを長期間運用していると, ネットワークが切れることがある. そこで, 以下のような 1 分おきにネットワークの導通を確認し, 問題があれば ラズパイを再起動するプログラムを バックグラウンドで動かすことにする. ネットワークの導通確認のために, 学内の DNS サーバに ping を打っている.
$ sudo -s # cd /root # vi wifi-reset.rb (以下のように書く) #!/usr/bin/env ruby # coding: utf-8 require 'open3' #初期化 count = 0 #無限ループ loop do # ネットワークの導通をチェック o, e, s = Open3.capture3("ping -c 2 10.0.0.7") mes = s.to_s.split(" ") num = mes.pop.to_i # "exit 0" (正常終了) か,それ以外かを判断. # 正常終了した場合には回数をリセット if num == 0 count = 0 else count += 1 end # 5 分ネットワークが止まっていたら再起動 if count > 5 system('reboot') break end # 1 分待つ sleep 60 end
スクリプトのパーミッションを適切に.
# chmod 755 wifi-reset.rb
動作確認
ネットワークケーブルを抜いた後に,作成したコマンドを実行する. 5 分程度経過した後にラズパイが再起動すれば正しく動作していることになる.
# /root/wifi-reset.rb
再起動後の自動起動設定
再起動した時に自動的に起動するように crontab に登録する. 起動直後に動かすと wlan0 が落ちっぱなしになることがあるので, sleep で 2 分ほど経ってから動かすようにしている.
# crontab -e (末尾に追加) @reboot sleep 120; /root/wifi-reset.rb
再起動
# reboot
プロセスが動いているか確認する
$ ps aux | grep wifi-reset.rb
校内無線 LAN ネットワークへの接続
松江高専の無線 LAN ネットワークに接続するために, WPA2 Enterprise の設定を行う.
無線 LAN 関係の設定ファイルは /etc/wpa_supplicant/wpa_supplicant.conf である. この設定ファイルをエディター (vi, nano, leafpad 等) で編集し, アクセスポイントの情報を追加する. なお, シェルにはタブ補完という便利機能があるので使ってみると良い (例えば, /e まで打ったところでタブを押すと /etc となる. /etc/wp まで打ったところでタブを押すと /etc/wpa_supplicant となる).
個人のパスワードを平文で設定ファイルに書き込むのはセキュリティ的に問題がある. 暗号化したパスワードを設定ファイルに保存することにする.
$ read -s pass ******** (入力は見えない) $ echo -n "$pass" | iconv -t utf16le | openssl md4 (stdin)= YYYYYYYYYYYYYYYYYYYYYYYY
この (stdin)= の後に続く YYYYYYYYYYYYYYYYYYYYYYYY が暗号化したパスワードである. これを用いて無線 LAN 関係の設定ファイルを書き換える. この機会に 5 棟全部の無線 LAN アクセスポイントも追加しておくと良いだろう.
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="H510W_pub" key_mgmt=WPA-EAP eap=PEAP identity="jXXXX" (学生番号. ダブルクォーテーションで囲む) password=hash:YYYYYYYYYYYYYYYYYYYYYYYY (上記の (stdio)= 以降の文字列のコピペ. hash: という文字列を付けるのを忘れずに. ダブルクォーテーションで囲まないこと) } network={ ssid="H520W_pub" key_mgmt=WPA-EAP eap=PEAP identity="jXXXX" password=hash:YYYYYYYYYYYYYYYYYYYYYYYY } network={ ssid="H530W_pub" key_mgmt=WPA-EAP eap=PEAP identity="jXXXX" password=hash:YYYYYYYYYYYYYYYYYYYYYYYY } network={ ssid="H540W_pub" key_mgmt=WPA-EAP eap=PEAP identity="jXXXX" password=hash:YYYYYYYYYYYYYYYYYYYYYYYY } network={ ssid="H550W_pub" key_mgmt=WPA-EAP eap=PEAP identity="jXXXX" password=hash:YYYYYYYYYYYYYYYYYYYYYYYY }
再起動. 再起動の前に有線の LAN ケーブルを外しておくと良い.
$ sudo reboot
正しく設定できれば, 再起動することで校内の無線 LAN ネットワーク (H520W_pub, H530W_pub, H540W_pub) のいずれかに接続できる. ifconfig でネットワークパラメタを, iwconfig で wifi 関連のパラメタを確認できる.
もしも wlan0 が表示されない場合は,wifi の電源が切れている可能性が高い. デスクトップ右上のネットワークのアイコンをクリックして,"Turn on wifi" とすること.
$ ifconfig ...(略)... wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.163.64.185 netmask 255.255.255.0 broadcast 10.163.64.255 inet6 fe80::16d8:a409:bd12:9f61 prefixlen 64 scopeid 0x20<link> ether bc:5c:4c:58:36:46 txqueuelen 1000 (イーサネット) RX packets 27 bytes 6841 (6.6 KiB) RX errors 0 dropped 1 overruns 0 frame 0 TX packets 39 bytes 6111 (5.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 $ iwconfig wlan0 IEEE 802.11gn ESSID:"H540W_pub" Nickname:"<WIFI@REALTEK>" Mode:Managed Frequency:2.472 GHz Access Point: 6C:DD:30:3E:83:40 Bit Rate:72.2 Mb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=39/100 Signal level=31/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
補足
上記までの手順で無線 LAN に接続出来ない場合は,/etc/dhcpcd.conf に以下の記述を追加して試して欲しい.
$ sudo vim /etc/dhcpcd.conf (末尾に追加) interface wlan0 env ifwireless=1 env wpa_supplicant_driver=wext,nl80211
トラブルシューティング
もしも無線 LAN に接続できない場合は, 設定ファイルが間違っている可能性が高い. 間違いを探すときは, 手動で以下の順にコマンドを実行すると良い. エラーの原因となる行番号が表示される.
wpa_supplicant のプロセス番号を調べる
$ pgrep wpa_supplicant 354 405 423
もし例のようにプロセス番号が表示されたらそれを KILL する. 表示がなければ次に進んで良い.
$ sudo kill -KILL 354 405 423
wpa_supplicant コマンドを実行する.
# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf