[2024/1/27追記] ドメイン 名の指定に間違いがあったので修正しました。
2023年3月末からOpenRoaming対応になった新生TOKYO FREE Wi-Fi に、OpenWrt箱を接続してみましょう 。OpenRoamingに非対応の機器も接続できるモバイルルータが作れます。といっても、Passpointプロファイルさえ取得できれば、TOKYO FREE Wi-Fi に限りません。国内外のOpenRoaming対応のフリーWi-Fi でも使える技を紹介します。
(おやくそく) プロファイルを仕込んだルータの盗難には十分気を付けましょう。
OpenWrt箱を用意する - Mangoはどう?
結論から述べるとMangoではダメでした_('、3」∠)_
(急ぎたい人は次章へ どうぞ)
手元にお役御免になったGL.iNet Mango (GL-MT300N-V2)があったので、最初にこれを試しました。今となってはCPUがだるいほど遅いし、2.4GHz帯専用だし、簡単にメモリ不足になるので、新規に購入することは奨めません。ちょっとどころじゃなく大きくなってしまいますが、これから買うなら、同社のSlate Plus (GL-A1300)より新しいモデルがよいでしょう。
ところで、かわいい筐体で大ヒットしたMangoですが、当初はOpenWrt 19.xベースで長いことアップグレードが止まっていました。一応、GL.iNet版ではなくOpenWrt版の21.x系ファームウェア が出てPasspoint (Hotspot 2.0)も使えるようになったのですが、公式ファームウェア が出ませんでした。ところが2023年になって突然、22.x系の公式ファームウェアが登場 しました。執筆時点で Version 4.3.7 が出ているので、まずこれにアップグレードします。
手元のMangoは Version 3.105 といういにしえのファームウェア が入っていましたが、まずこれを 3.203 に上げて……と思ったら、GL.iNet ADMIN PANELのUPGRADEメニューではなぜかアップグレードできません。仕方がないので、MORE SETTINGS> AdvancedからLuCIを起動して、そちらでファームウェア を焼きます。ダウンロードできる最新版が 3.216 だったので、それを焼きました。(いきなり4.x系を焼いてもよいかも)
続いて、同様の手順で 4.3.7 を焼きます。設定内容は以降できないので、初期設定からスタートします。
ほい!
Version 4.3.7にアップグレード
まって、初期状態でもうメモリがぱんぱんです;;
Version 4.3.7の中身は、OpenWrt 22.03.4でした。WPA2 Enterpriseを使うのに必要な wpa-supplicant パッケージをインストールしようにも、メモリ不足で入りません。いきなりの試合終了です 。
OpenWrt箱を用意する - Slate Plusにしてみた
[2024/1/28追記] 執筆時点の純正ファームウェア (OpenWrt 21.02ベース) では、PasspointのANQPが正常動作しないことが判明しました。OpenRoamingが採用しているRCOIマッチングの方は動きますが、基地局 によっては接続できないことがありそうです (RCOIが4個以上登録された基地局 )。この機種を使う場合はご了承ください。
GL.iNet Slate Plusも、Slate AXやBeryl AXと比べるともっさりしたCPUですが、モバイル用途ならまだ我慢できるかなと。たまたま()手元にあったので、今回はこれを使ってみます。
Slate Plus (左)とMango (右)
執筆時点のファームウェア はバージョン4.4.6で、OpenWrt 21.02.2ベースでした。
GL-A1300 overview
古いモデルと違って、最初からwpad -openssl (フル版wpad )がインストールされているので、-basic から入れ替える手間がありません。
http://192.168.8.1/cgi-bin/luci にアクセスして、LuCIの方から設定していきます。Wirelessメニューの中でWPA2/WPA3 Enterpriseのクライアント設定に進みます。radio0またはradio1のAddボタンをクリックします。
Wireless Overview
Device Configuration
Device Configurationのポップアップが開くので、General Setupタブの中で、適当なESSIDを入力します。Passpointの場合、これはダミーになります。Networkはwwanを選びます。つまり、上流のネットワークにつなぐという意味です。 続いてWireless Securityタブに移動します。
Wireless Security
次のようにパラメータを入力します。
Encryption: WPA2-EAP (strong security)
Cipher: "Force CCMP (AES) " にする。TKIPは使ってはいけない。
EAP -Method: EAP -TTLSを使うので "TTLS " を選択する。
Use system certificate: サーバ認証を有効にするため、必ずチェックを入れる 。
Certificate constraint (Wildcard ): eap .wi2.ne.jp (2024/1/27:上のキャプチャ画像でSubjectの方に値が入っているのは間違いです)
Authentication: EAP -MSCHAPv2
Anonymous Identity: anonymous@tokyo.wi2.cityroam.jp
802.11w Management Frame Protection: Optional
IdentityとPasswordに入力する値は、以下のようにして取得できます。
まず、(新しい方の) TOKYO FREE Wi-Fiのウェブサイト にアクセスして、規約確認の後、ソーシャルアカウントなどで認証を受けます。
TOKYO FREE Wi-Fi (OpenRoaming対応)
プロファイルをダウンロードできるところまで進んだら、左上の「くわしいメニュー」を選び、プロファイルの手動設定の説明に進みます。
「プロファイルの設定」画面
ずっと下にスクロールしていくと、「ユーザ名、パスワードを作成する」というボタンがあるので、これをクリックします。
「ユーザ名、パスワードを作成する」ボタン
ここで表示されたユーザ名をIdentityに、パスワードをPasswordに入力します。
Wireless Securityタブの一番下にあるSaveボタンをクリックして、Wireless Overviewに戻り、Save&Applyボタンをクリックします。
※ Cityroam の参加機関の基地局 が近所にある場合は、ESSIDに "cityroam" を指定することで、Passpointのない802.1X 認証による接続確認ができます。
※ TOKYO FREE Wi-Fi ではない、他所で発行されるOpenRoamingのプロファイルも、同様に使えます。PasspointプロファイルからID・パスワードを取り出す方法はこちら ↓
hgot07.hatenablog.com
OpenWrtをPasspointクライアントとして設定する
[2024/1/29追記] 汎用に使えるように改造した hostapd.sh をGitHubで公開しました 。以下の手順よりも簡単に設定できるはずです 。
執筆時点のOpenWrt (最新版は23.x)には、まだPasspointのクライアント機能を設定する仕組みがありません。ただし、OpenWrt 21.x以降ではPasspoint対応のwpad (hostapd, wpa-supplicant)が使われているので、一部のスクリプト を書き換えるだけで、Passpointを有効化できます。
大昔に書いた(ウソ)以下の記事を参考にして、Passpointクライアントになるように改造していきます。なお、OpenRoaming (settlement-free model)のRoaming Consortium Oranization Identifier (RCOI)が決め打ちになっているのは、ご容赦ください。
hgot07.hatenablog.com
まず、/etc/config/wireless を (お好きな) テキストエディタ で開き、上で設定したものに対応する config wifi -iface ブロックを見つけます。optionが沢山並んでいますが、そこに一行だけ付け加えて、保存しておきます。
option iw_enabled '1'
まだOpenWrtに存在しないオプションなので、このままでは何も起きません。
ついでに、このファイルを別名で保存しておきます (伏線)。
# cd /etc/config # cp wireless wireless.save
次に /lib/netifd に移動して、hostapd.sh を編集します。
# cd /lib/netifd # cp -p hostapd.sh hostapd.sh.orig # <お好きなエディタ> hostapd.sh
1309行目あたり (wpa_supplicant_add_network() の中)に次のような行があるので、赤字の一行を追加します。
json _get_vars eap _type identity anonymous_identity ca_cert ca_cert_usesystem
json _get_vars iw_enabled ←これを追加
1495行目あたりから、次のように追記します。
if [ "$key_mgmt " = "WPS " ]; then echo "wps _cred_processing=1" >> "$_config" else if [ "$iw_enabled" = "1" ]; then cat >> "$_config" <<EOF interworking=1 hs20=1 auto_interworking=1
cred={ username="$identity" password="$password" ca_cert="/etc/ssl /certs/ca-certificates.crt" domain_suffix_match="$domain_suffix_match" roaming_consortiums="5A03BA0000" eap =$(echo $eap _type | tr 'a-z' 'A-Z') phase2="auth=$auth" } EOF fi
cat >> "$_config" <<EOF network={ $scan_ssid ssid ="$ssid " key_mgmt =$key_mgmt $network_data } EOF fi return 0 }
ファイルを保存したら、wifi コマンドで設定を反映させます。ついでにバックアップも作っておきます。
# cp hostapd.sh hostapd.sh.save # wifi
少し待つと…… ヽ(゚∀゚)ノ
OpenRoamingに接続された状態
WPA2 Enterprise用に設定したSSID とは異なる "openroaming" というSSID に接続されていることが分かります。That's Passpoint!
めでたし、めでたし……
コイツ、消えるぞ……
あとは自分の端末をぶら下げるSSID を吹けばOK、楽勝!と思いきや、ここで衝撃の問題が発覚 。
なんと、このSlate Plusたん、リブートするとWi-Fi クライアントの設定を綺麗さっぱり忘れてしまいます 。具体的には、/etc/config/wireless の中で "sta" に設定された項目が、すべて消えてしまいます。
これでは、モバイルOpenRoamingルータとして使い物にならないではないですか。
色々と探ってみたのですが、どこでこのワイプが行われているのか、まだ判りません。誰か教えて~
仕方がないので、/etc/rc.local をいじって、頭に次の二行を追加しました。(伏線回収)
cp /etc/config/wireless.save /etc/config/wirelesswifi
今度こそ、めでたし、めでたし! (だといいなぁ)