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