hgot07 Hotspot Blog

主に無線LANや認証連携などの技術についてまとめるブログです。ネコは見る専。

RouterOS v7.1beta6のWireGuard VPNを試す

RouterOS v7から使えるようになったWireGuard VPNを使って、リモートアクセスVPNを試してみました。設定が少しややこしいですが、速いです!

hAP acでRouterOS v6のOpenVPNを使っていると、ローカルでも30Mbps台で、自宅DSLからだと20Mbps台なので、かなり不満でした。v6のOpenVPNTCPしかサポートしていないというのも不利な点ですが、それにしても、OpenVPNは設定自体がなかなかトリッキーです。MTU問題で痛い目に遭いがち><

自宅VDSL (100Mbps)からセンターのサーバに収容、speedtest.net で測ってみたところ、WireGuardではv6のOpenVPN (TCP)と比較して1.5~2倍のスループットが出ました。本当は50Mbps超えて欲しかったのですが、それでもOpenVPNよりずっと快適になりました。素のVDSLで88Mbps出ている時間帯でこれ↓  (もちっとチューニングできるのでは)

Speed via WireGuard/VDSL.

Speed via WireGuard/VDSL.

 

やりたいこと

  • 高速なリモートアクセスVPNを実現
  • hAP acをLinuxサーバに収容 (サーバ側は設定済み)
  • hAP acのすべてのトラフィックをサーバ側からインターネットに出す。今回の目的は、マネージドな無線LAN基地局を作ることなので、要するに、利用者の無線LANトラフィックをすべてサーバ側から出すようにしたい (基地局設置場所のオーナからトラフィックを保護したい)。
    (= default routeをWireGuard側にする)

 

WireGuardはいいぞ

VPNにも色々ありますが、メジャーどころのIPsecは設定がややこしかったり、接続に相性問題が青々としていたりで、必ずしも使いやすくはありません。リモートアクセスVPNならL2TP/IPsecがメジャーでしょうが、設定がさらに面倒です。あと、アクセラレータがないと、CPUによる処理では速度が出ません。Linuxをサーバにしてちょっと高級な設定をしたい用途では、速度面で不利です。

OpenVPNは、相性問題はないのですが、経験上MTU問題が厄介です。あと、プロトコル上、アクセラレータを作りにくいらしく、CPUパワーがないとショボショボの性能になります。自分の用途では、超小型IoT機器でVPNを使いたいので、まず無理ですね。

さて、WireGuardはというと、CPUによる処理でも効率が高く、しかもサーバ/クライアントとも設定が楽という……、これで人気が出ないはずはありません。実際、多くのプラットフォームに実装されています。すぐにも使いたいのですが、残念ながらRouterOS v6には搭載されず、v7の正式版がなかなか出ないという状況。ぐぬぬ

ところで、後に書きますが、WireGuardも全方位で使いやすいというわけではないので、過度な期待はしないでください。

 

RouterOS v7のWireGuard設定

設定ガイドはここ。本記事の執筆時点で、拠点間接続の例しか書かれていないので、色々と悩むことに……。
10

help.mikrotik.com

hAP acをv7.1beta6にアップグレードして、WireGuard関係のメニューが生えてきたところで、「後は楽勝でしょ!」と思ってしまったのが運の尽き……。最初からこのドキュメントに出会っていれば、少しは楽だったのです。

Linuxでwg0.confをいじったり、OpenWrtのLuCIでWireGuardの設定をしたことのある人は、あれ?と思うかもしれません。RouterOSのWireGuardの設定では、クライアント側のIPアドレスを設定する場所が見当たりません。これ、ドキュメントにあるとおり、WireGuardメニューないしCLIでインタフェースを生やした後、/ip/address の方で手作業でIPアドレスを付与しないといけませんIPアドレス入力欄がWireGuardメニューにないのが落とし穴です。

あと、WireGuardでは、両側のピアが入るローカルサブネットとIPアドレスをあらかじめ決めておく必要があります。クライアント側にDHCP的にアドレスを振るような仕組みは(今のところ)ないようです。これが、多数の利用者を対象にしたリモートアクセスVPNに使いにくいところ。

例えば、サブネットを 172.16.1.0/24、サーバ側アドレスを172.16.1.1、クライアント(hAP ac)側を172.16.1.2にする場合、以下の操作でwireguard1インタフェースが生えて、アドレスが付きます。

> /interface/wireguard/add listen-port=51820 name=wireguard1
> /ip/address/add address=172.16.1.2/24 interface=wireguard1
> /ip/route/add dst-address=172.16.1.0/24 gateway=wireguard1

とりあえず、初見でハマったのはこれぐらいです。あとは、クライアント (hAP ac) の鍵ペアと、サーバの公開鍵、IPアドレス、ポートを設定して、以下のようになればOK。

> /interface/wireguard/print detail
Flags: X - disabled; R - running
0 R name="wireguard1" mtu=1420 listen-port=51820
private-key="<クライアントの秘密鍵>"
public-key="<クライアントの公開鍵>"

> /interface/wireguard/peer/print detail
Flags: X - disabled
0 ;;; wgsrv
interface=wireguard1
public-key="<サーバの公開鍵>"
endpoint-address=<サーバのIPアドレス> endpoint-port=51820
current-endpoint-address=<(ここは自動表示される)> current-endpoint-port=51820
allowed-address=172.16.1.0/24 persistent-keepalive=25s rx=0 tx=0

注: WebFigのWireGuard peer設定でallowed-addressを入力しても、値が入らないことがありました。その場合はCLIの方で設定しましょう。

以上でWireGuardが接続できるはずです。サーバ側から ping 172.16.1.2、クライアント側から ping 172.16.1.1 すれば、互いに応答があるはずです。IF ない GOTO 10

 

WireGuardをdefault routeにする設定

今回の目的である、hAP acに収容した端末のトラフィックをすべてWireGuard側に流し、LANには通さないようにする、そのような設定を行います。

手っ取り早く、WireGuard peerの設定メニューで Add Default Route のチェックボックスを探すわけですが……、ない!_('、3」∠)_

WireGuard peer config.

WireGuard peer config.

「そこになければないですねぇ」

OpenVPN-clientの設定には普通に存在する Add Default Route が、どういうわけかWireGuardにはありません。

仕方がないので、手探りで……。必要な設定は以下のとおり。

  • WireGuardで 0.0.0.0/0 を受け付けられるようにする。
  • サーバのIPアドレスの経路を、hAP acが接続されているLANに向ける (重要)
  • IP routeの設定で 0.0.0.0/0 すなわち default を wireguard1 に向ける。
  • wireguard1に対してmasqueradeを有効にする。
  • 元からある default route を外し、ether1 に流れないようにする。
    (metricを増やすだけでは不十分。default routeを外しにくいならmasqueradeを切る方法もある)

ぇ、簡単?……やってみそ😏 経路の設定・解除方法は、分かりますよね?

wireguard1のallowed-addressを変更する必要があります。

> /interface/wireguard/peers/set 0 allowed-address=0.0.0.0/0

masqueradeは、要するにNAPTですね(コラ)。(サーバ側のNAPTは設定済みと仮定)

こんな感じになるように、wireguard1に対してmasqueradeを設定すればOK。

> /ip/firewall/nat/print
Flags: X - disabled, I - invalid; D - dynamic
0 X ;;; defconf: masquerade
chain=srcnat action=masquerade out-interface=ether1

1 I ;;; lte1 not ready
chain=srcnat action=masquerade out-interface=*A log=no log-prefix=""

2 chain=srcnat action=masquerade out-interface=wireguard1 log=no
log-prefix="" 

 

さて、今回ハマったのがこれ……、トンネルの外側でサーバに直接つながる経路の設定です。サーバへの経路を ether1 に向けるだけでしょと思ったそこの私、ハズレです。

gateway=ether1 に設定すると、wireguard1インタフェースのRx表示がピクリとも動きません。仕方がないので、ether1の代わりに、hAP acを接続したLANのゲートウェイIPアドレスを指定してみます。動きました!

ただ、このように固定アドレスを設定すると、hAP acを持ち運んであちこちのDHCP付きLANにつないで使うといったことができなくなります。というわけで、問題は半分しか解決していません。

MikroTikさん、WireGuardにも Add Default Route ☑ を付けてくださいよ~ 🙏

 

課題

上記のとおり、default routeの扱いに少し難があるので、早急に改善してもらいたいところです。

hAP acをオフにして、再度オンにしたときに、WireGuardの接続が回復しないことがあります。うまく復活することもあります。想定している用途では、接続が回復しないのは致命的です。サーバ側で一度WireGuardをdown/upすると復活できるのですが、他のクライアントも巻き込んでしまう問題があります。解決法が分かる人がいたら、ぜひ教えてください。

 

[2021/8/15追記]  後継のhAP ac2にもv7.1beta6を入れることができたので、同様の設定でWireGuardを試してみました。こちらはなんと80Mbps程度出ました。acがMIPS、ac2がARMで、OpenVPNの性能はac2の方が若干低かったのですが、意外な結果です。残念なことに、現時点でhAP ac2には技適がなく、肝心の無線LANを使用できません。

 

おわり

 

P.S.
何度でも書きますが、hAP acに限らず無線LAN機能のあるものは、US版を掴まないように十分注意しましょう。US版の周波数ロックは解除できないし、当然技適もありません。

GL.iNet Slate (GL-AR750S-ext) インプレッション

入手したその夜にレンガ(brick)になって、超焦りましたw💦

同社のCreta (GL-AR750)と同じ、コンパクトでかわいい筐体で、色違い、そして外部アンテナが付いています。小さいは正義!

今から買うなら、Cretaよりお奨めです。

GL.iNet GL-AR750S-ext (Slate)

GL.iNet GL-AR750S-ext (Slate)

性能差

Cretaと同じ形で、ツノ(外部アンテナ)で少し電波を強力にした程度に見えますが、中身は結構違います。

外観から分かる違いは、やはり外部アンテナとGbE対応ポートでしょう。しかしこのアンテナ、付け根がぐらぐらなので、ビシッと格好よく立てるのには少し手間があります。Cretaの無線LANは弱いという評判だったのですが、パーソナルエリアネットワーク(PAN)なら十分でしょう。部屋に置いて使うなら、Slateは魅力的かも。個人的には、スッキリしたCretaの方が好みです。

Slateの性能は、CretaとBerylの間といったところ。Cretaは、Mangoほどではないにしろ、メニュー操作にそれなりにストレスを感じました。古いモデルなので、今から買うのはちょっと抵抗があります。Berylはサクサク動くのですがデブ。その点、Slateはちょうどよい感じ。

CPUは、CretaがQCA9531 @650MHz、SlateがQCA9563 @775MHzで、クロック周波数比はそれほどでもないですが、明らかにSlateは快適です。

ストレージは、Cretaが16MB Flashのみなのに対して、Slateは追加で128MB NAND Flashが付いています。

電源はどちらも定格5V 2AのMicro USBで、ACアダプタに苦労しないレベルです。

 

とにかくすぐbricked_(゚。3」∠)_

他のモデルでは経験がなかったのですが、OpenWrtファームウェアに入れ替えてみたところ、速攻でレンガ状態(bricked)に!

今日届いたばかりなのに……、あんまりだよ、こんなのってないよ!

とにかく、このSlateはbrickedになりやすいです。しかし心配ご無用。こんなこともあろうかと、GL.iNetルータにはU-Bootが搭載されています。これについては後述。

まず、Slate用のファームウェアをLuCIからアップロードして、エラーになることが多いです。ここでファームウェアを焼くのを強行したところで、勝ち目はありません。

では、エラーが出なかった場合はどうかというと、これもかなりの確率でリブート後にDHCPが動かなくなり、アクセスもできず、brickedな状態になります。どうしろと……?

とにかく、/etc/configの中にある設定ファイルを外部にコピーしておくぐらいの慎重さが要ります。ぇ、そんなの頭の中にあるって?……、アッはい。

 

Factory ResetとU-Bootは必修

とにかく、このページを参考に、Factory ResetとU-Bootについて学んでおきましょう。

SlateのU-Bootですが、こんな感じで起動できます。

  • リセットボタンを押しながら電源を接続する。
  • ボタンを押し続けていると、5G LEDが3回点滅した後、2G LEDが点灯する。
  • そこでボタンを離す。

説明どおり、ブラウザから http://192.168.1.1/ にアクセスすれば、FIRMWARE UPDATEの画面になります……、ぇ、ならない?

そんな時は、代わりに http://192.168.1.1/index.html にアクセスしてみましょう。

もう一つ、さりげなく重要なことをメモしておきます。他のモデルでも同様なので、覚えておくとよいです。

LuCIが立ち上がらない場合

GL.iNetの標準の 192.168.8.1 でも、OpenWrtの 192.168.1.1 でも、LuCIのメニュー画面に行かずに、ブラウザが延々とリロードを繰り返してしまうことがあります。このようにLuCIの画面遷移がおかしくなった場合、ブラウザのキャッシュをクリアすれば元に戻ります。もちろん当該アドレスのキャッシュのみ選んでクリアしましょう。

GL web UIに戻れない場合

GL.iNetのファームウェアを使用している場合、通常ならば、192.168.8.1 にアクセスするとGL側のUIが出てきます。ところが、何かのはずみでLuCIに飛ばされてしまって、GL web UIに戻れなくなることがあります。

GL側に戻りたい場合、http://192.168.8.1/? を試してみるとよいです。

 

Creta or Slate?

性能的に、Slateの方がよいと思います。

ただ、Cretaの方が何かとファームウェアが安定していて、安心して使えるようです。アップデートを3回ほど試していますが、コケたことはありません。Cretaを持っている開発者が多いのでしょうか?OpenWrt 21.02.0-rc も真っ先にCreta版が出ました。なので、リファレンスとして一台Cretaを持っておくのもよいかもしれません。

 

おわり

 

 

PoC: Pocket-Sized Mobile OpenRoaming Routers (2021)

Proof-of-Concept Mobile OpenRoaming routers based on OpenWrt.

Probably the smallest in the world? :-)

Mobile OpenRoaming router (Mango)

Mobile OpenRoaming router (Mango)

Variations

Mobile eduroam/Cityroam/OpenRoaming routers

Mobile eduroam/Cityroam/OpenRoaming routers
  • Previous mobile eduroam/Cityroam/OpenRoaming routers based on MikroTik hAP ac and hAP ac lite (2020)
    ("lite" cannot be used in Japan due to the radio conformity regulations.)
  • New router based on GL.iNet GL-MT300N-V2 (Mango) (2021)
    (2.4GHz band only)
  • New router based on GL.iNet GL-AR750 (Creta) (2021)

 

Features

  • Based OpenWrt 21.02.0-rc3 (as of writing) (firmware: Mango, Creta)
  • Truely pocket-sized.
  • Fully-managed mobile router emitting eduroam, Cityroam, and OpenRoaming.
  • Fast VPN tunnel by WireGuard to protect user communications from owners, LAN operators, etc. RADIUS traffic is also protected.
  • Easy operation: Simply connect the LAN and USB power, and the service will be up.

Mango with LAN & USB cable.

Mango with LAN & USB cable.

Back side of Mango.

Back side of Mango.

Passpoint (aka Hotspot 2.0) is available.

Passpoint (aka Hotspot 2.0) is available.

Android device connected by Passpoint.

Android device connected by Passpoint.

 

Current limitations

  • Only wired network is supported for the uplink. There's no Wi-Fi uplink support.
  • Difficult to punch through the captive portal wall at the venue.
  • There's no user interface for the owner to change any mode. (Hard to solve due to the lack of admin/normal user separation in OpenWrt)
  • WireGuard cannot go through at some venues using tough network filters.
  • Wi-Fi performance may not be so good. No MIMO. No Wi-Fi 6.

 

※ 国内での利用は技適の確認が必要です。あるいはGL.iNet製FWのバージョンが上がるのを待つか。

--

 

GL.iNet Beryl (GL-MT1300) インプレッション

[2022/10/16追記] 発売当時はちょっと不安定だったBerylですが、ファームウェアのバージョンが上がって、しっかり安定して動くようになっています。OpenWrt 22.03ベースのファームウェアも出てきたので、別記事を起こしました。

 

Mango (GL-MT300N-V2)がめっちゃかわいい上に、性能も素晴らしかったので、同社の製品からは目が離せません。製品はOpenWrtベースでつぶしが利き()、技適もこまめに取ってくれるすばらしい会社です。

国内導入から少し日数が過ぎてしまったのですが、実験用にまとめ買いしたBeryl (GL-MT1300)を使うときが来たので、まずはインプレッションを。

ちっちゃっくないよ!

本当に小さくはないです。CretaやBrumeからちょっと大きいぐらいかと思っていたら、結構違いました。Pocket-Sized Travel Router って書いてあったやん!・・・・・(ノ`Д´)ノ彡┻━┻

往年のVAIO Pシリーズですねわかります。

写真の紫の方がBrume (GL-MV1000)

Beryl & Brume

Beryl & Brume

Beryl (bottom) & Brume (top)

Beryl (bottom) & Brume (top)

電力も大きめ

Brumeの定格が5V 2Aなのに対して、Berylは5V 3Aと表示があります。Brumeはその辺に転がっているACアダプタやPCでも平気だったりするのですが、Berylではアダプタを選びます。ちなみに、付属のアダプタはこれで、本体サイズもちょっとアレですが、ケーブルが太くて邪魔です。

Beryl付属のACアダプタ

Beryl付属のACアダプタ

ますます携帯用途からは遠ざかりました_('、3」∠)_

ちなみに、MangoやCretaはほんのり温かい程度、Brumeはちょっと熱めですが、Berylは本体のサイズが大きい分だけ熱が分散しているのか、Brumeほど熱い感じはしません。

 

まだまだ青い……

ちょっと古めのCretaは、応答速度にイラつくことが多目ですが、Berylは新しいだけあって、サクサク動く感じです。サクッと初期設定とアップデートを終わらせて、いざ細かい設定を……あれ?

Advancedメニューが、ない、ないよ!

まさか封じられてしまったのかと心配したのですが、何のことはない、GL.iNet独自メニューのPlug-insからluciのパッケージを導入すれば、Advancedメニューが出てきます。

さて、これで喜ぶのは早かった……

LuciのWireless設定では、SSIDのスキャンが動かないとか、接続状態が検出できないとか、WPA2-PSKがなくてOpenとWEP(!)しか選べないとか、なかなか困った状況でした。それっぽいパッケージを入れまくってみたのですが、解決せず。[2021/7/27追記] 下に若干追記しました。

ちなみに、GL.iNet謹製のメニューの方では、WPA2-PSKの無線LANにも正常に接続できました。sshログインして /etc/config/wireless を覗いてみても、きちんと設定されています。

というわけで、OSがまだ青々としているようです。OEMではないOpenWrtに入れ替えてしまう手もあるかもしれませんが、こちらは未確認で進行形

 

TIPS: ちなみに、一度luciのメニューに入ってしまうと、192.168.8.1 にアクセスしてもLuciが強制されてしまって、GL.iNet ADMIN PANELに戻れなくなることがあります。その場合 http://192.168.8.1/? にアクセスすれば戻れます

 

[2021/7/27追記]

システムが吹っ飛んだ!_(゚。3」∠)_

どうやら現在のバージョン(3.201)にバグがあるようで、luciでパッケージの削除を行っていると、肝心のluciやweb uiまでも吹き飛ばしてしまうみたいです。泣く泣くリセットボタンでファクトリーリセットするのですが、もし救い出したい設定などがあるなら、sshログインを試してみる方法があります。

> ssh root@192.168.8.1
root@GL-MT1300:~# opkg update
root@GL-MT1300:~# opkg install luci
root@GL-MT1300:~# reboot

リセットボタンを10秒ぐらい押して、リセット;;

パッケージ削除は、バージョンが上がるまで避けた方がよいでしょう。

 

[2021/7/27追記]

Wireless設定を使いやすくできる?

前に書いたとおり、そのままではsshやluciで無線LANの設定が満足にできません。kmod-mac80211-hwsim をインストールすることで、少し改善の兆しが見えたのですが、結論を言うとだめです

kmod-mac80211-hwsim を入れると、iw phy コマンドでデバイスが見えるようになります。下図のように、luciのWireless Overviewに、radio0, radio1というデバイスが生えてきます。

Wireless Overview (初期状態)

Wireless Overview (初期状態)

Wireless Overview (kmod-mac80211-hwsim導入後)

Wireless Overview (kmod-mac80211-hwsim導入後)

新しくできたradio0, radio1の方なら、WPA2-PSKやWPA2-EAPの選択も見えたのですが、なぜか設定しても正常に動きません。

何の成果も得られませんでした!

luci側での設定は諦めるしかなさそう。

WPA2 Enterpriseでの接続も頑張ってみたのですが、GL.iNet側のインタフェースがダメダメで、/etc/config/wireless や /etc/config/ssids をいじるぐらいでは接続できませんでした。さぁ、こまた……

 

[2021/7/30追記] 一応ここに、OpenWrtの新しいパッケージがあります。21.02.0-rc3を試してみたのですが、Access Pointの電波が出ないとか、WireGuardをオフにすると元のLANにdefault routeが戻らない(ネットに出られなくなる)とか、まだまだ青々としているようです。

 

サイズにこだわるなら……

Berylは、高性能が欲しい人向けです。

小さいは正義!な人には、残念ながらお奨めできません

Brumeはかわいいのですが、残念ながら無線LAN機能がありません。Wi-Fiモジュール付きのGL-MV1000Wというモデルもあるのですが、市場にあまり出回っていません(技適もない?)。

Cretaは、やはりちょっと古すぎる感じがあるので、となると Slate (GL-AR750S-Ext) でしょうかね。これも少し熱いと言われていますが、試してみたいところです。

 

To Be Continued... (マテ

 

 

 

 

 

Passpointはどこまで進んだのか (2021)

以前書いた記事↓から、なんと1年半も経っていました。今回はこの続編のようなものです。

hgot07.hatenablog.com

結論から言うと、ほとんど変わっていません!w

とりあえず、必要な定義から。

  • PasspointとHotspot 2.0は同じもの (少なくとも仕様上はな!)
    基地局メーカーではHotspot 2.0の表記が多いのですが、名前の分裂が問題となり、Wi-Fi AllianceとWBAではPasspointの方を積極的に使うこととされています。
  • 次世代ホットスポット / Next Generation Hotspot (NGH)の名称はフェードアウト
    マーケティング的な風呂敷として便利な言葉でしたが、OpenRoamingのような具体的なシステムが登場してきたので、WBAでは積極的に使わない方針のようです。

 

Passpoint Release 3からどうなった?

前回執筆時の2020年1月時点で、Wi-Fi CERTIFIED™ Passpointの仕様はRelease 3が出ていましたが、その後の改訂はありません。

ざっくり言うと、SSIDに依らずに自動接続できる仕組みを規定したRel. 1が登場し、Online Sign-Up (OSU)などを追加したRel. 2が出て、さらにVenue URLやOperator Icon Metadataなどの機能を追加したRel. 3になりました。

なぜ最近改訂がなかったのかというと、「すぐに必要になる新たな機能が無かったから」だろうと思います。いや、課題は色々と残っているのですが、少なくともどう実装すべきかという高レベルの話には至っていません。

そもそもPasspointは規格(仕様)なので、ある程度固まってきたら、そう頻繁に変えるようなものではないですよね。つまり、Passpointという規格に従って、エンドユーザ向けのサービスの開発が進んできたら、自然とその名称が後ろに隠れていくものでしょう。802.1Xなんて聞いたことがなくてもeduroamやd Wi-Fiが使えるみたいに。

 

Passpoint Release 2, 3対応の基地局がない!?

一番いいのを頼む

どうせ買うなら最新のものを……、というわけでPasspoint Rel.3対応の基地局を探そうとすると、ない!? そもそもPasspoint対応すら仕様表に書かれていなかったりします。

一応、対応製品はWi-Fi AllianceのProduct Finderで探すこともできます。(登録が遅いし、掲載されていても非対応な機種とかあって、信頼性に難ありなのですが……)

www.wi-fi.org

 

それでは、本当にRel. 2やRel. 3に対応した製品がないのかというと、そうでもなくて、部分的に機能が少しずつ追加されている感じです。例えば、UniFiならこんな設定があり、OSUに対応しているっぽいです。ぽい。

OSU of UniFi

OSU of UniFi

どうもRel. 2以降の認定が進んでいないようですね。Rel. 2のとある機能の敷居が高くて嫌われている疑惑が……、しらんけどw

Wi-Fi Allianceには、仕様策定の他に、認定プログラムを実施する機関の顔がありますので、そこのビジネスが滞ると……(ウワナニヲスル

 

Passpoint Release 3は来ないのか

なんとも雲行きの悪い話を書きましたが、悲観することはないです。

OpenRoamingが本格的に立ち上がったことで、ローミングサービスの細かなUI/UXも議論されるようになってきました。そこでよく話題に上るようになったのが、Venue URLやOperator Iconです。Rel. 3の認定プログラムを通さなくても、基地局ベンダがこれらの機能を追加してくる可能性は高いです。

以前のエントリから引用します。

"Operator Icon Metadata"や"Venue URL"は、例えばフリーWi-Fiにおいて、サービスを提供している事業者やスポンサーはどこかといった情報を、利用者に伝えるのに役立つでしょう。1X認証は、自動接続されて、標準ではキャプティブポータルがないため、従来はスポンサーの不満がありました。

 

※ 余談ですが、お宅の無線LANルータ、Wi-Fi CERTIFIED™のロゴが付いていますか?最近のWi-Fi 6対応機なら付いているでしょうが、少し前の11acのモデルでは、付いていない製品もありました。なぜでしょうね~

 

Passpointの今後

先に書いた通り、仕様としてのPasspointは、次第に利用者の目には見えない、裏方に回っていくものと考えられます。ぇ、今までも知られていなかったって?あっ、はい_('、3」∠)_

なので、サービスのプロモーションとしても、Passpointの名前はあまり前面に出て来なくなるのではないかと思います。その代わりに、OpenRoamingのように、具体的なサービスの名称の方が、一般的になってくると予想しています。

 

Passpointで遊んでみたい?

設定方法がまとまった資料は、こちら↓がお奨めです (というか現状これしかない)。

booth.pm

Passpoint対応のアクセスポイントの中でも、比較的安価で設定もいじりやすく、安定しているのはAruba AP-200シリーズでしょう (注: Instant OnはPasspoint非対応, 書籍のガイドにはPasspoint記載なし)。しかし、AP-200シリーズは終売になってしまいました。執筆時点で、AP-203Rはまだ若干の流通があるようです。ただし、AP-200シリーズは今となっては少しトロいので、あまりお奨めではないです。

2021年の電子部品不足から、Aruba APは軒並み国内在庫がなくなっています。

安い基地局をお探しなら、こちらもどうぞ。

hgot07.hatenablog.com

面倒がなくて、一発で安定して動くという点では、Merakiが楽ちんですよ。安くはないけど。(リクエスト出さないとHotspot 2.0が有効にならないのは、今でもそう?)

 

おわり

アライドテレシスAT-TQm5403のPasspointを試してみる

海外勢から遅れに遅れて、やっとのことで国内メーカーからPasspoint (Hotspot 2.0)対応の無線LANアクセスポイントが出てきました。アライドテレシスAT-TQ 5000シリーズです。

私の記憶が確かならば……、Passpoint対応国産機第一号は「ポジモ」なのですが、一般用途ではこの5000シリーズが最初でしょう。パナソニックは実機が出たかどうか怪しい。

ハードウェアは2018年発売ですが、Passpointは2021年春のファームウェア(Ver.6.0.1-5.x)から対応しています。

基地局メーカーではHotspot 2.0の表記が多いのですが、名前の分裂が問題となり、Wi-Fi AllianceとWBAではPasspointの方を積極的に使うこととされています。

今回、AT-TQm5403を入手したので、これでPasspointを試してみました。小文字のmの付かないAT-TQ5403との違いは、コントローラでの管理台数と最大接続台数です。型番の末尾に付く -Z1 などの記号は、サポートサービスの区別です。

もし既に学校や図書館、会議施設等でこの5000シリーズを導入しているなら、訪問者のために、WBA OpenRoamingによるセキュアな公衆無線LANの提供も検討するとよいでしょう。

 

まずは結果!

ほい!基地局Cityroamの認証基盤に接続し、GlobalReachから入手したOpenRoaming用プロファイルを使って、Passpoint経由で無事に接続されました。

Passpointによる接続

Passpointによる接続 (iOS 14.5)

ハードウェア

こんな感じです。家庭用と比べたら結構大きいです。

AT-TQm5403

AT-TQm5403

AT-TQm5403 (rear)

AT-TQm5403 (rear)

IEEE 802.3afのPoEアダプタでも縮退モードで動くようですが、802.3atまたはACアダプタを使うように警告が出ます。

 

ファームウェアのアップデート

世の中には、保守契約を結んでいないとセキュリティアップデートすら提供しないひどいメーカーもあるのですが、アライドさんの基地局のサポートは良心的です。ユーザ登録も特に要りません。ウェブサイトから最新のファームウェア (執筆時点でVer.6.0.1-6.1) をダウンロードして、基地局に流し込むだけです。

 

Passpointまわりの設定

無線LANRADIUS認証の設定については、ざっくりと省略。無線LANのバンド数が多く、2.4GHz帯の他、5GHz帯がW52/W53, W56と分かれているのが、ちょっと面倒です。Merakiなら特に意識することなく一括で認証周りの設定が済むのですが……。(バンドステアリングとかどうなっているのでしょう?)

とにかくマニュアルです。802.11uとHotspot 2.0に項目が分かれています。

設定項目が多くて、Passpoint初心者は面食らうと思いますが、ある程度慣れていてもちょっと驚くぐらい面倒なので大丈夫(アレ?)。正直、見通しがかなり悪いです。

イメージはこんな感じ。まずはHotspot 2.0の方から。

Hotspot 2.0 Settings

Hotspot 2.0 Settings

Passpointを有効にしたいバンドとSSID (仮想AP, VAP)を選択してから、Hotspot 2.0 Settingsのタブを開きます。とりあえず設定が必要なのは、Operator Friendly NameとOperating Class Indicationぐらいです。下部にOSU (Online Sign-Up) の文字が見えるので、もしかしたらPasspoint Release 2にも対応しているのかも (今回は使用せず)。

次に、802.11u Settingsを開くと、こんな感じ。

802.11u Settings

802.11u Settings

こちらは色々といじる必要があります。多くの項目が、説明的なラベルのついた選択肢ではなく、生の数値で入力する仕様です。これは厳しい><

こんな感じで設定しました↓

  • Access Network Type: 3 (無料のパブリックネットワーク)
  • Internet Access: 有効
  • Venue Group, Type: 0, 0 (不特定の場所)
  • Homogeneous ESS Identifier (HESSID): (当該SSIDMACアドレス)
  • Roaming Consortium List: (OpenRoaming用のRCOI)
  • Venue information: eng:Cityroam
  • Domain Name: cityroam.jp
  • IP Address Type Availability: 14 (NATが1回のプライベートIPv4アドレス)

これら以外はデフォルトのままです。

Venue Group, Typeは、アライドのマニュアルにも代表的な値が掲載されているのですが、すべてを知るにはIEEE Std 802.11を見ないといけません。うーん、面倒。

今回、NAI Realmは登録していません。これも入力フォーマットが複雑で、マニュアルだけでは何を入れたらよいか分からないレベルです。

HESSIDは、ブランクに設定できるはずですが、設定を保存しようとするとエラーになります。仕方がないので、当該SSIDMACアドレスを入力しました。

以上、とにかく色々と分かりにくいので、改善を望みますMerakiならずっと楽に設定できるので、技術的にできないわけがありません。

バンドごとにPasspoint設定を入れるのも、非常に手間がかかります。本来は直交させるべき設定だと思います

素直に動いたのはご立派。Wi-Fi 6対応の6000シリーズでも早期にPasspoint対応してくれることを願います

 

終わり

 

 

 

IMSI Privacy Protection - SIM認証のプライバシ対策

キャリアWi-Fiでおなじみ(?)のSIM認証ですが、そのプライバシ保護についての話です。最近のスマートフォンでは、MACアドレスランダム化が実装されていて、第三者による端末追跡を困難とすることによって、プライバシ保護が実現されています。ところが、MACアドレスランダム化だけでは不十分でした。

この一年ほどの間に、Wi-Fi業界では(Google主導で) "IMSI Privacy Protection" と呼ばれる仕組みが議論されていて、これから端末などに実装されようとしています。その概略を紹介します。

[2021/6/18] 今後この方式が標準になるかどうかは未確認で進行形

IMSI: International Mobile Subscriber Identity; 国際的な加入者識別番号で、携帯電話の契約時に割り当てられ、SIMに書き込まれる。英語ではイムズィのように読む。

詳しい概略(?)はWireless Broadband Allianceのウェブサイトからダウンロードできます(要登録)。多少長い英文でもざくざく読んでいける人は、ここで当エントリはやめて、ソースを参照した方が確実でしょう。英文ソースの翻訳を記事にするつもりはなく、あくまで「こんなのもあるよ」程度の安い記事なので。

wballiance.com

とりあえず日本語でざっくり掴みたい人は、この先へどうぞ。

 

どのようなプライバシ問題か

無線LANのプライバシ問題やその対策について、以前にいくつか記事を書きました。

hgot07.hatenablog.com

hgot07.hatenablog.com

今回はどのようなプライバシ問題かというと、フリーWi-Fiでおなじみの、「端末(利用者)追跡」です。前の記事に書いたように、すべての追跡が悪いわけではないのですが、利用者の承諾もなしに追跡できてしまうことがプライバシ上の懸念となります

 

何が問題だったのか

前の記事では、認証方式としてEAP-TTLSやPEAPが使われている場合について書きました。SIM認証では方式が違い、EAP-SIM, EAP-AKA, EAP-AKA'が使われています。このうち、最近ではEAP-AKAまたはAKA'を使うのが一般的です。

これらのSIM認証方式では、EAPトンネルやouter identityといったものはなく、利用者の識別情報が平文で空中を飛ぶことになります。具体的には、識別情報として使われるIMSIが、暗号化されない形で利用されていました

基地局(AP)の中にあるオーセンティケータと端末の間では、次のようなやり取りがあります。まず、オーセンティケータから端末に対して、EAP-Request/Identityというメッセージが送られます。これに対して、端末はEAP-Response/Identityを返しますが、このとき <prefix><IMSI>@<NAI realm> の形式で識別情報が渡されます(*1)。NAI realmは、 wlan.mnc<MNC>.mcc<MCC>.3gppnetwork.​org の形式で、MNCがMobile Network Code、MCCがMobile Country Code (両方を合わせてPLMN-IDと呼ばれる)を表します。

IMSIが平文のままだと、どのようなプライバシ上の問題が生じるでしょうか?

悪意ある攻撃者が、キャリアWi-Fiの利用者の無線通信を傍受していたり、キャリアWi-Fiを装った偽基地局を設置していたりすると、利用者が気付かないうちに、IMSIが攻撃者に知られることになります。攻撃者と書きましたが、実は、こっそりと無線LANの利用者を追跡しようとしている、追跡ビジネスかもしれません

IMSIは利用者に振られた永続的なIDなので、それが書き込まれたSIMを使い続ける限り、地球の裏側まで追跡されうるということです

 

[2021/6/18追記] *1: 一部の端末は、どのSSIDに対しても1X認証で接続を試みるようです。そのため、WPA2 Enterpriseの無線LANシステムを運用していると、通りすがりの人のものと思しき端末から接続が試行され、RADIUS proxyのログに 3gppnetwork.org のレルムでLogin incorrectの記録が残ります (キャリアのIdPに接続されていないためOKは出ない)。このログでは、prefix+IMSIが丸見えのものが多数ですが、以下のようにユーザ名部分が匿名になっているものもあります。手元の2019年のログには既に匿名のものが見えます。(詳細は調べ切れていません)

  • aka_anonymous@wlan.mnc010.mcc440.3gppnetwork.org (ドコモ)
  • sim-encr_softbank@wlan.mnc020.mcc440.3gppnetwork.org (ソフトバンク)
  • anonymous@wlan.mnc260.mcc310.3gppnetwork.org (T-Mobile US)

 

EAP-AKAの場合

端末は、EAP-Request/Identityを蹴ることができるようです。

 Ω ΩΩ<な、なんだってー!!!

ところが、この蹴り方がきちんと定義されていなくて(ぇ?)、下手に応答しないように実装すると、接続できない問題が生じるようです。

EAP-AKAの場合、続いてオーセンティケータからEAP-Request/AKA-Identity (AT_PERMANENT_ID_REQ) が送出され、端末がEAP-Response/AKA-Identityを返します。これには  AT_IDENTITY が含まれており、形式はこれまた <prefix><IMSI>@<NAI realm> です。(ダメじゃん)

一応、AT_IDENTITY に仮名ID (pseudonym)を返す方法も規定されていますが、認証成功のためには後に素のIMSIを送ることになって、全然保護になっていません。(この辺はざっくり省略)

 

IMSI暗号化によるプライバシ保護

そこで、どうするかというと、認証に必要なIMSIを含むPermanent Identityを RSAES-OAEP(Optimal Asymmetric Encryption Padding, Sect. 7.1 of RFC8017) を使って暗号化します。ここで、暗号文にランダム性が入るのがキモです

Permanent Identity = <IMSI>@wlan.mnc<MNC>.mcc<MCC>.3gppnetwork.org

Encrypted Permanent Identity = Base64(RSA-OAEP-SHA-256(Permanent Identity))

端末は、こうして得られたEncrypted Permanent Identityを AT_IDENTITY に詰めて、オーセンティケータに送り返します。このときの AT_IDENTITY の形式は、`\0`<Encrypted Permanent Identity><,<attribute>=<value>>となります。IMSIがランダム性を含む暗号に変換されているため、盗聴されても追跡が困難になります

RSAの鍵を扱うために、公開鍵暗号基盤 (PKI) を使います。

# おうふ、また鬼門のPKIか_('、3」∠)_