hgot07 Hotspot Blog

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

キャプティブポータルの仕組みと変遷

この記事を開いたということは、おそらく「キャプティブポータル (Captive Portal)」についてある程度はご存じのことと思います。無線LANを使おうとすると、ぱかっとブラウザやポップアップを開いて、利用規約を表示したりログインを要求してくる、うざったいアレです。

煩わしい手動ログイン操作を無くして、自動接続で快適な無線LANを実現したいなら、WPA2 Enterpriseなり、その拡張のPasspointなりを導入すればよいです。セキュリティも高まるし、良いことだらけです……と言いたいところですが、実は欠点もあります。少なくとも現時点では (意味深)。セキュアな公衆無線LANが普及すれば、キャプティブポータルの技術がまったく不要になるかというと、そうでもなさそうです。この話は別の機会に譲るとして、今回はキャプティブポータルの仕組みと変遷についてまとめてみます

 

macOSのCaptive Network Assistant (CNA)

macOSのCaptive Network Assistant (CNA)

 

キャプティブポータルには世代がある

「世代」などと勝手に書いていますが、独自研究によるものなので、Wikipediaならタグが付けられてしまうヤツです。

キャプティブポータルをdisる 批判するのに、「証明書の警告が出るセキュリティ問題があるからダメ」と語られることがあるのですが、これは古い方式にしか当てはまりません。知識のアップデートは重要です。

とりあえず、ザックリと3世代に分類してみました。誰かがキャプティブポータルと言った時に、どれを指しているのかを確認しないと、話が食い違う恐れがあります。

 

第1世代

まだセキュリティのない http が主流だった頃に生まれた技術です。利用者がウェブブラウザを立ち上げて、任意のウェブサイトに http でアクセスすると、接続がポータルサイトにひったくられるタイプです。

この方式は、80/tcpのアクセスをルータでポータルサイト宛に捻じ曲げることで、簡単に実現できます。ログインやクリックスルーの操作後に、フォワーディングを解除して、その端末の対外アクセスを許可するようにファイアウォールのルールを変更します。

最近のフリーWi-Fiでは新しい方式が実装されていますが、この古い方式も最終手段として広く併用されています。「ポータル画面が出ないなら、任意のサイトに http でアクセスしてみればよい」という伝説は、まだまだ有効です。

ウェブアクセスのセキュリティが問題になり、https が普及してくると、この方式では対処できなくなります。やり方を変えずに 443/tcp の宛先を書き換えたら、そう、証明書の警告画面が出ますね。利用者に、この警告画面を無視する癖が付いてしまったら、せっかく https でWWWを構築しても、十分なセキュリティが実現できなくなるでしょう。

やっていることは、中間者 (MITM) 攻撃そのものです。要するに、この方式はダメ!です。

 

第2世代

https が普及してくると、利用者はほとんど http でアクセスしなくなるので、キャプティブポータルが十分に機能しなくなりました。そこで、OSベンダは独自方式を実装しました。細かな実装は違いますが、やっていることは原理的にどれも似たようなものです

OS側に Captive Portal Detection (CPD)という仕組みが入り、OSが積極的な検出動作をします。端末がネットワークに接続されると、OSはベンダが管理している特定のウェブページにアクセスして、その応答を調べます。得られた結果に応じて、次のように処理を進めます。

  • 所定の応答が返った場合:
    インターネットにアクセスできる状態で、キャプティブポータルに遷移する必要がないと判断。
  • 所定と異なる応答が返った場合:
    キャプティブポータルがあると判断し、別ページなどからポータルのURLを取得して、ブラウザまたはミニブラウザ (アクセス制限付き)で開く。
    (この状態を作り出すために、キャプティブポータルのシステムはローカルのDNSサーバでアドレスを上書き(変更)する)
  • 応答が得られなかった場合:
    インターネットもLANもアクセスできない可能性があるので、ポータルへのアクセスも諦める。

執筆時点での各OSの実装は、以下のとおりです。

Google Android, ChromeOSの場合

http://www.gstatic.com/generate_204 にアクセスして、204 No Content が返った場合は、キャプティブポータル無しと判断する。

もし何らかのコンテンツが返ってきた場合は、ミニブラウザでそれを表示する。この状態はキャプティブステートと呼ばれる。上記のページにアクセスして、204 No Content が返るようになったら、キャプティブステートを抜ける。

実際にインターネットまで疎通しているかどうか、 http://connectivitycheck.gstatic.com/generate_204 を用いてチェックする。

Apple macOS, iOS/iPadOSの場合

http://captive.apple.com/hotspot-detect.html にアクセスして、

<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>

が返った場合は、キャプティブポータル無しと判断する。

異なるコンテンツが返った場合は、Captive Network Assistant (CNA, ミニブラウザ)でそのコンテンツを表示する。Successのコンテンツが返るようになったら、キャプティブステートから抜ける。

Microsoft Windowsの場合

Windows 10以降では、http://www.msftconnecttest.com/connecttest.txt にアクセスして、所定の文字列 "Microsoft Connect Test" が返った場合は、キャプティブポータル無しと判断する。

(Windows 8.1以前では、上記の代わりに http://www.msftncsi.com/ncsi.txt が用いられる)

異なる応答が返った場合は、http://www.msftconnecttest.com/redirect にアクセスして、そのコンテンツを規定のブラウザで表示する。

参考:

learn.microsoft.com「この動作は仕様です。」爆笑

Windowsには Network Connectivity Status Indicator (NCSI) という仕組みがあり、これが20~30秒間隔で connecttest.txt にアクセスする。所定の文字列が返った場合に、ネットワークに正しく接続されているとみなす。

 

 

第2世代の方式では、以下のような問題がありました。

  • 処理がベンダのウェブサイトに依存しているので、個別に実装する必要がある。
  • インターネットの疎通を確認する仕組みが組み合わされており、キャプティブポータルを抜けた後も、ポーリングのトラフィックがある。機内Wi-FiのようにLANに閉じたシステムでは、OSを騙す処理が必要になる。
  • キャプティブポータルのシステムで、FQDNの書き換えを行う必要があり、httpsが利用できない。
  • 実装がFQDNの書き換えに依存するため、最近普及しつつあるDNS over HTTPS (DoH)と相性が悪い。

 

第3世代

通化された安全なキャプティブポータルの仕組みを実現するために、Captive Portal APIが策定されました。

この方式では、DHCP option 114 や Router Advertisement を用いて、端末にAPIのURLが伝えられます。APIへのアクセスは https で行います。

APIは、JSON形式で次のような応答を返します。

{
  "captive": true,
  "user-portal-url": "https://portal.example.com/",
  "venue-info-url": "https://venueinfo.example.com/",
  "seconds-remaining": 326,
  "can-extend-session": true
}

user-portal-url は、ログインや利用規約の画面を出すためのページを指します。captiveがtrueの場合にアクセスされます。

venue-info-url は、サービスエリア独自の情報などを表示する、ポータルページを指します。captiveがfalseの場合でも、端末はこのURLを通知できます (端末の実装に依存)。つまり、WPA2 Enterpriseで自動接続されるような公衆無線LANであっても、利用者をポータルサイトに誘導することができます。

いずれのURLも https を使うことになっています。

 

参考:

developer.apple.com

さて、このモダンなキャプティブポータルですが、執筆時点 (2023/11/26)でOSの実装がまだ十分ではありません。まともに実用になるのはAndroid 11以降ぐらいでしょう。Appleは、iOS/iPadOS 15以降とmacOS 13 (Ventura)以降で対応したようですが、captive false時の通知機能が不十分です。Windows 10/11は非対応のようです。

 

ウェブログイン機能の実装

キャプティブポータルの主な用途である、ウェブログイン機能については、オープンソースの実装が幾つかあります。この辺でしょうか。(まだ試していない……)

 

Venue Info通知機能の実装

冒頭に書いたように、WPA2 EnterpriseやPasspointで自動接続できる無線LANシステムでは、利用者をいかにしてポータルサイトに誘導するかが、課題になっています。この場合、ウェブログインは不要で、ポータルサイトへの導線を用意すればよいということになります。

詳細は12月以降に公表するとして、とりあえず、試しに作ってみたものはこちらにあります。素材にどうぞ。

github.com

 

おしまい

 

ps
キャプティブポータルについて調べようとすると、その表面的な動作を解説するサイトばかり検索に引っかかって、機構を調べるのに苦労しました。せっかく機構を解説しているサイトが見つかっても、OSのバージョンによって動作が異なることがあり、古い情報に翻弄されました。実機で調査したものもあり、間違いがあるかもしれません。何かおかしいところがあったら教えてください。

 

参考になるその他のサイト

ミニPCのMeLE Quieter3Cを基地局にしてみた

いまさらですが、MeLE Quieter3CというファンレスなミニPCを紹介します。

3Qという似た型番のモデルがあるのですが、端子に違いがあります。私はUSB-Cの機能が充実している3Cを選びました。

 

よかった所

  • 小さくてファンレス、そして鞄にも入れやすい薄型。
    以前紹介した GMKtec NucBox7 と同じN5105搭載ですが、あちらはファン付きで少し音がするのと、厚みがあって手提げに入れにくいのが難点でした。
  • M.2 2280 NVMeのSSDが増設できる。最初からついてくるストレージはオンボードのeMMCなので、そちらを生かしたままでも殺しても、大容量のSSDを搭載できます。ただし熱には注意。
  • Wi-Fi 6対応
    Linuxを載せて基地局として動かしたかったので、重要でした。(残念ながらhostapdで11axがまだ使えなかったのですが)
  • x86_64アーキテクチャ
    他のアーキテクチャと比べて、色々なことがあまり苦労せずに実現できます。普通にUbuntu ServerやopenSUSE Leap 15.5 / Tumbleweedも入りました。
  • スタイリッシュ (゚∀゚)
    ちょっと角が痛い……

 

微妙だったところ

  • N100が出て結構経っているので、N5105は少し見劣りがする。まぁ、そこそこ速いです。
  • ACアダプタを選ぶ。USB-Cから給電するのですが、容量が足りているのに起動できないアダプタがちらほらありました。
    [2024/2/29追記] 付属のアダプタは、ネゴシエーション無しの12V固定出力という、凶悪仕様でした。他の機器に接続すると壊す恐れがあります。
  • M.2 NVMeモジュールとケースの間の隙間が大き目で、放熱が難しい。薄い熱伝導テープでは届かなかった。
  • RJ45端子がGbE 1個しかない。2.5GbEは無理としても、もう一つあったら、さらに遊べたのに。(USBで増設しよう)
  • メモリ8GBはWindowsでは少しつらたん。ストレージは128GBと256GBのモデルがあるので要注意。

 

基地局として使ってみた

これが主目的で買ってみたのです…

hostapdを使って、内蔵の無線LANアダプタをAPモードで動かしてみます。ドライバの表示によると内蔵PHYはRTL8852BEのようです。(Intelのモデルが存在するという情報もあり、謎です)

openSUSE Leap 15.5の5.x系カーネルでは、hostapdが刺さってしまう問題があります。仕方がないのでTumbleweedの6.x系カーネルを試したところ、あっさりと動きました。rtw89_8852bドライバで認識しました。

hostapdを使った基地局の作り方ですが、以前の記事と同じ設定です。

hgot07.hatenablog.com

8852BEは、(Intel AXと違って) 5GHzでもちゃんと動くし、VHT80の設定もできました。さらにPasspointもばっちり!

11axの設定は、hostapdかドライバが対応していないらしく、成功しませんでした。

本体の電源ボタンを押すと、Linuxはきちんと、お行儀よく、shutdownしてくれました。ヘッドレスでも使いやすいモバイルAPになりましたヽ(・∀・)ノ

 

過度な期待はしないでください

さっそくPasspoint対応の基地局と機内Wi-Fiを模した環境を詰め込んで、Wireless Global Congress EMEAのWGセッションでデモをしてきました。というか、これが主目的でした。

 

WGC EMEAでPasspointデモ中のQuieter3C

WGC EMEAでPasspointデモ中のQuieter3C

ホテルでの予行演習はばっちり。いざ会場でAPのデモをしようと思ったら、5GHz帯では会場のAPに負けてさっぱりだったので、2.4GHz帯に逃げてきました。それでも、電波ゆんゆんな環境では、端末がなかなかつながらないという現象が見られました。他の強いAP群に時空間を取られていたのかもしれません。どうせビームフォーミングなんて効かないし、専用APに負けても仕方ないのでしょう。

というわけで、
私はリハーサルで動いて客先で動かない実績を増やしました
の札を首から下げることになりました。

 

おしまい

 

 

 

GL.iNet Beryl AXでなんとかPasspointを吹いてみる (VHT160/HE160もあるよ)

GL.iNet Beryl AX (GL-MT3000)でPasspointを吹くことに成功したので、ご報告です。

Beryl AXというと、ファームウェアが色々と微妙でした。WPA2 Enterpriseすら満足に使えなかったので、しばらく放置していました。以前の記事はこちら ↓

hgot07.hatenablog.com

さて、時は流れて、なんとなくOpenWrt 23.05のリリースノートを眺めていたらGL-MT3000の文字が!(゚∀゚)

もしこれがhostapdベースなら、Passpointもイケるのでは?

 

OpenWrt版ファームウェア

ファームウェアはこちら。glinet_gl-mt3000-squashfs-sysupgrade.bin をダウンロードして、Beryl AXのLuCIからあっさりアップグレードできました。一度は文鎮になりそうと覚悟していたのですが。

へぇ、MT7xxxはFilogicというブランド名になったんだ。

ただし、OpenWrt 21.xベースの純正ファームウェアからだいぶバージョンが飛んでいるので、設定はフルリセットしないとだめです

ちなみに、執筆時点 (2023/11)の純正ファームウェアはsnapshotが4.5.0で、まだ21.xベースでした。

 

パッケージの入れ替えにご用心

さっそくLuCIやopkgコマンドで探ってみると、ありました、wpad!hostapdが統合されているので、wpadでも大丈夫です。

Wirelessメニューを見ると、バァーーンとこのとおり、きちんとMediaTek MT7981が認識されています。

無線LANデバイスが正しく認識されている

無線LANバイスが正しく認識されている

適当に無線LANSSIDを追加してから /var/run の下を見ると、hostapd-phy1.conf ができていました。これはイケそう。

ここで大きな注意点です。iw-fullに入れ替えようとiwを削除したところ、デバイスが正常に認識されなくなりました。iw-full を入れても、iw を入れなおして、削除された他のパッケージを再インストールしても、WirelessメニューがGeneric表示になり、iw phyで表示が出なくなりました。どうやら、MediaTekのドライバが壊れるみたいです。iw のパッケージは、絶対にいじらないようにしましょう。

Passpointを試したいので、wpad-basicのままではいけません。wpad-opensslなどのFullバージョンに入れ替えます。入れ替えた後に、一度システムをリブートすれば、LuCIでWPA-EAPの選択肢が表示されて、WPA2 Enterpriseの設定もできるようになります。

 

Wi-Fiまわりの設定

 [2023/11/22追記] 

/etc/config/wireless の config wifi-device セクションに、最初は option country がありません。ここはきちんと JP に設定しましょう。

option country 'JP'

 

Passpointの設定

WPA2 EnterpriseのSSIDを吹いてから、過去記事のように /etc/config/wireless に追記すればOKです。

hgot07.hatenablog.com

ほいきた!(゚∀゚)

Windows 10のPasspoint表示

Windows 10のPasspoint表示

Android 13が接続された様子

Android 13が接続された様子

Android 13が接続された様子 (速度など)

Android 13が接続された様子 (速度など)

接続直後にPixel 7がピロンと鳴ったので、通知を見たところ、このような画面が。

Venue Info URL

Venue Info URL

なるほど、Android 13はPasspointのVenue Info URLに対応しているわけですね。iw_venue_url にダミーのURLを入れてあったので、本番環境では正しいサイトに向けないといけません。

 

160MHz幅に挑戦

[2023/11/22追記, 2024/2/19修正]

HT80の設定ではあっさり動きましたが、VHT160/HE160では少してこずりました。注意点として、channelをautoにした上でしばらく待たないと、電波が出てきません。こうです ↓

option channel 'auto'
option htmode 'HE160'

うひょー、これはこれは(・∀・)

VHT160のチャネルグラフ

HE160のチャネルグラフ

VHT160のチャネル詳細

HE160のチャネル詳細

VHT160でリンクしているPixel 7

HE160でリンクしているPixel 7

VHT160でspeedtest (2.5GbE接続)

HE160でspeedtest (2.5GbE接続)

iperf3も試してみます。Beryl AXにiperf3のパッケージを入れて iperf3 -s で起動……、だけではうまくいきません。Firewallの設定も必要です。

Pixel 7で試してみた結果がこちらです。

iperf3の結果

iperf3の結果

Wi-Fiの仕様の半分程度ですが、こんなものでしょうかね。

 

Wireguardを試す

[2023/11/22追記]

Wireguardを売りにしているGL.iNetですが、OpenWrt 21.x系のファームウェアを入れると速度が半分になってしまう問題がありました。兄貴分のGL-AXT1800では、メーカー謹製の対策版パッケージらしきものが入っていました。Beryl AXのOpenWrt版ファームウェアではどうでしょう?

ほい!

Wireguardの速度

Wireguardの速度

製品仕様では300Mbpsとうたわれていますが、それを超える十分な速度が出ています。これは助かる。

 

おまけ:純正ファームウェアでWPA2 Enterprise

純正ファームウェアはまだhostapdベースではないので、早くOpenWrt 23.5.xベースにしてねと、GL.iNetに要望を出しておきました。いつになることやら……。

ところで、純正ファームウェアでもWPA2 Enterpriseなら設定できることが分かりました。/etc/config/wireless の中に、次のように書きます。

option key '<RADIUS secret>'
option encryption 'wpa2'
option server '<RADIUS server IP address>'

聞き出すのに苦労しましたが。

 

どのモデルがいい?

GL.iNetの最近のモデルですと、以下のものでPasspointが使えることを確認しています。

多少大きくてもよいならSlate AXがお奨めです。

 

おしまい

 

 

 

 

 

LinuxのhostapdでWPA2 Enterprise / Passpointの基地局を作る

こんなちっちゃなWi-Fiドングルが基地局として動くなら、Passpoint/OpenRoamingも動かしてみたくなりますよね?(

Passpoint / OpenRoaming基地局にもなるT2U Nano

Passpoint / OpenRoaming基地局にもなるT2U Nano

 

hgot07.hatenablog.com

WPA2 Enterpriseの設定

まずは、hostapdでWPA2 Personalの設定ができているところからスタートします。分からなければ、上の記事などを参照してください。

今回はEnterpriseモードで動かすので、hostapd.conf にある以下のような行を削除します。

wpa_passphrase=testPass

WPA2 EnterpriseではRADIUSサーバが必要なので、これは既に設定されているものとします。ここでは同じホストの上で動いていると仮定して、ローカルのIPアドレスを指定しています。hostapd.confの中に、このように書きます。

ieee8021x=1
nas_identifier=testap.example.com
wpa_key_mgmt=WPA-EAP
rsn_pairwise=CCMP
auth_server_addr=127.0.0.1
auth_server_port=1812
auth_server_shared_secret=testing123
acct_server_addr=127.0.0.1
acct_server_port=1813
acct_server_shared_secret=testing123

nas_identifierは、普通はホスト名などを書きますが、機器名を入れているベンダもあります。どの個体か区別できるようにしておいた方が、トラブルシューティングが楽です。

これだけではあまり速度が出ないので、速度を上げるには前回の記事を参考にしてください。

 

Passpoint / OpenRoamingの設定

最低限の設定は、以下のようになります。パラメータの値は資料を当たってください。(IEEE Std 802.11™-2020)

interworking=1
access_network_type=3
internet=1
venue_group=3
venue_type=0
roaming_consortium=5a03ba0000
venue_name=eng:Test AP venue
venue_url=1:https://portal.example.com/
network_auth_type=00
ipaddr_type_availability=0c
domain_name=example.com
hs20=1
hs20_oper_friendly_name=eng:Test-AP

注: OpenRoamingのRCOIが書かれていますが、バックエンドのRADIUSサーバがOpenRoamingに参加していない場合に、この値を使ってはいけません。RCOIは登録が必要なので、自前のものがないなら、NAI realmの方を使ってください。

 

おしまい

(えっ、これだけで動くの?)

 

 

 

LinuxとTP-Link Archer T2U Nanoで基地局を作る

無線LAN子機として売られているTP-Link Archer T2U Nano AC600 (ながっ!)を使って、Linux箱を基地局に仕立てるお話しです。「hostapdで一発でしょ?」あっはい。でも、いざ試してみると、まともに動かないデバイスドライバばかりです。動く環境がなかなか見つからないのでした。チップベンダRealtekのサポートの悪さは、なんとかならないんでしょうか。

この記事を起こそうと思った時には、既に11ac Wave2とWPA3、MU-MIMOに対応したT3U Nanoが登場していました。ところが、動きそうで動かないちょっとだけ動くドライバばかりで、結局APモードでうまく動く環境が作れませんでした。

ちなみに、中身のチップは以下のようです。

こんなちっちゃなドングルがアクセスポイントとして動いているのは、見ていて楽しいです (VirtualBox上のopenSUSE Tumbleweedで動作中)。

APとして動作中のT2U Nano

APとして動作中のT2U Nano

 

openSUSEを使う

最近はUbuntuで動けばそれでいいみたいなソフトウェアばかりで、困ってしまいます。私はUbuntuとはどうにも仲良くなれないので、openSUSE Leapばかり使っています。今回もこれで行くつもり……のはずが、うまくいきませんでした。何がだめかというと、現在のkernel 5.xベースのLeap 15.5では、なぜかhostapdが刺さってしまうのです。openSUSE Tumbleweedがkernel 6.xで、試してみたらうまく動いたので、今回は泣く泣くこちらで様子を見ます。

Ubuntuが使える人は、その方がよさそうです。

 

デバイスドライバ

RTL8811au, RTL8812au用のカーネルドライバがないと、wlan0みたいなデバイスが生えてきません。標準では提供されていないので、野良ビルドすることになります。

GitHubを覗くと88x2au用のドライバが幾つか見つかりますが、まともに動かないものが多かったです。唯一、APモードまできちんと動いた神ドライバが、こちら

ドライバのインストールは、git cloneしてから、make && make install で済みます。もちろんカーネルドライバをコンパイルする環境が必要なので、予め kernel-devel などのパッケージを入れておかないといけません。

カーネルがアップデートされたら、またmakeからやり直し。これだから標準でディストリビューション入るようにしてくれないベンダはダメなんです (ぶつぶつ)。

iw phyと打って、何か表示されるようになったら、おそらく無線LANバイスが生えているでしょう。ip addrでデバイス名が見えるはず。openSUSE Tumbleweedでは、wlan0みたいな簡単なやつではなくて、wlp0s20f0u1みたいに長ったらしいデバイス名で表示されます。(grubの設定をいじって、wlan0みたいに表示する方法もありますが、ここでは省略)

無線LANバイスができたら、IPアドレスを振って、確認してみます。

# ip addr add 192.168.0.1/24 dev wlan0
# ip -br addr

openSUSEyast無線LANバイスにアドレスを振ろうとすると、クライアントモードで設定しようとしてハマってしまいます。仕方がないので、DHCPサーバのスタートアップスクリプトに紛れ込ませるなどして、対処するとよいでしょう。

 

IP forwardingとIP masqueradeを設定

IP forwardingと、IP masqueradeを有効にします。

お使いのディストリビューションとバージョンによって設定方法が異なるので、各自で調べてください。

 

DHCPサーバの設定

「大したことをするわけでもないのにISC DHCP (今時ならKEA)をいじるのは面倒くさいなぁ」と思う貴方にお奨めなのがDnsmasqです。DHCPサーバとDNSサーバの機能が、恐ろしく簡単に設定できます。

色々と解説ページがあるので、詳しくは検索してみてください。

DHCPサーバとして設定が必要なのは、これ ↓ ぐらいです。/etc/dnsmasq.conf に書きます。

interface=wlan0
no-dhcp-interface=eth0
dhcp-range=192.168.0.10, 192.168.0.250, 255.255.255.0, 1h
dhcp-option=option:netmask, 255.255.255.0
dhcp-option=option:router, 192.168.0.1
dhcp-option=option:dns-server, 8.8.8.8

ちょっとハマりどころがありまして、同一ホスト上でDnsmasqが動いていても、端末がアドレス取得できない問題がありました。Firewallでポート67/udpを開けておく必要があります。

(こんなんわかるかい!🫠)

 

hostpadの設定

なにやらすごく難しい印象のhostapdですが、パラメータの意味がちょっと難しいだけで、設定箇所はそれほど多くありません。デフォルトのテンプレートはここにあります。

2.4GHz帯、WPA2-PSKのAPを設定する場合、デフォルトから以下のパラメータを変更するだけで済むはず。

interface=wlan0
driver=nl80211
ssid=testap
country_code=JP
hw_mode=g
channel=11
wpa=2
wpa_passphrase=testPass
wpa_pairwise=CCMP

hostapdを起動して、AP-ENABLEDの表示になったら、ssid= で指定したSSIDのビーコンが出ているはずです。

# hostapd /etc/hostapd.conf
wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED

端末を接続して、無線LANがつながるか、アドレスが取得できるか、DNSが引けるか、インターネットの通信ができるかを確認します。

おや、54Mbpsという低速でリンクアップしていますね?素の11bなら、それで正しいです。

ieee80211n=1 と設定すれば、少しだけ高速になります。しかし、2.4GHz帯でチャネルボンディングを使うのは極悪なので、諦めましょう。HT40の設定はしないこと。

 

5GHz帯でVHT80の設定

「速度が欲しいか?」

5GHz帯で、VHT80の設定をしてみます。hostapd.confの変更点は以下のとおり。

hw_mode=a
channel=48
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
ieee80211ac=1
vht_capab=[SHORT-GI-80][HTC-VHT]
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42

まず11nの設定をして、HT40が使えるようにしています。続いて11acの設定をして、VHT80が使えるようにしています。

ht_capabとvht_capabの設定が分かりにくいですが、テンプレートでコメントアウトされているものを有効化しただけです。HT40には+と-があり、HT40-はchannelに指定されたチャネルより低い方のチャネルと組み合わせて40MHz幅にする方法です。

 

バァーーン

VHT80が有効化されたチャネルグラフ

VHT80が有効化されたチャネルグラフ

端末の接続状況 (IPアドレスは説明と異なる)

端末の接続状況 (IPアドレスは説明と異なる)

SSIDとバンド幅の様子

SSIDとバンド幅の様子

仕様上は最高433Mbpsですが、T2U Nanoは超小型なので、こんなものでしょうか。ビームフォーミングがないので、普通の基地局として使うには厳しいこともあると思います。過度な期待はしないでください。

 

宿題

近くに多数の基地局がある環境では、T2U Nanoはそれらの電波に負けてしまい、端末が接続しにくくなるようです。のろのろと遅いビーコンを出しているせいもあるかもしれません。この辺の最適化は今後の課題です。

 

(ギター演奏)
To Be Continued

 

[2023/11/24追記] T2U Nanoと似た型番で、Bluetooth対応のT2UB Nanoというモデルがあります。試してみたところ、rtw88_8821cuドライバで認識するのですが、"failed to get tx report from firmware" というエラーが出て、電波を吹くに至りませんでした。TOKAIZ TWA-001 (RTL8811cu)も同症状で、電波が出ませんでした。残念!

 

 

 

 

VNCでmacOSを使っている時にスクリーンセーバーから抜けられなくなる問題を避けるには

昨年のことを忘れていて、またまたハマったので、メモです🫠

macOSVNCから使っていると、操作中にも関わらずスクリーンセーバーが起動して、しかもこの状態から抜けられなくなるという問題があります

VNCではなく、直結の入力デバイスを操作しても、抜けられません。

アプリが動いていない頃を見計らって電源ブッチしかなさそう。

 

対策というかワークアラウンドというか

M1 Mac miniのMontereyとSonomaで確認しましたが、一応、自己責任でどうぞ。

% sudo defaults write /Library/Preferences/com.apple.screensaver loginWindowIdleTime 0

参考: https://www.reddit.com/r/macmini/comments/posw4u/deleted_by_user/

 

こっちは、やっちゃだめ ><
Montereyにアップグレードしたときにシステムが起動しなくなって酷い目に遭いました。
Never do it: How to turn off screensaver for VNC desktop sessions in macOS Catalina?

 

おしまい

Beelink EQ12 (Intel N100)のWindows再インストール (でハマった件)

Beelink EQ12という、Intel Alder Lake N100搭載のミニPCを買いました。

だってこれ、小さいのに2.5GbEが2系統あって、Wi-Fi 6搭載で、CPUがそれなりにっょぃ。N5105の10WよりTDPが低い(6W)くせに高性能なんて、魅力的じゃないですか~
(フルパワー時はN100の方が少し消費電力が大きいらしいというオチがあります)

 

 

Amazonで安く出ていたのも魅力的。実はTRIGKEYという別の会社からも似たような製品が出ていて、端子のレイアウトが酷似していて、どうみても中身が一緒な気がします。たまたま安かった方を買ってみただけです。

さて、Windows 11の再インストールで少しハマったので、後半は自分用のメモです

 

軽く紹介

ばばーん!

Beelink EQ12 (N100)

Beelink EQ12 (N100)

Beelink EQ12背面

Beelink EQ12背面

SSDの様子を見たかったので、いきなり開けてみます(笑)

底面を開けてみた図

底面を開けてみた図

写真のファンは小さめですが、これはHDD用です。CPU用は反対側にあります。前回の GMKtec NucBox7S ほど耳障りな音はしません。ただ、ファンが付いているということは、製品寿命がここで決まるということでしょうね。

肝心のSSDはというと、さらにネジを5本(だったか)外さないとアクセスできません。つらい!

SSDモジュール

SSDモジュール

SSDは M.2 NVMe 2280 なので、入手性はよいです。

 

なんでWindowsを再インストールするの?

とりあえず製品のレビューはこちらが詳しいです。

pc.watch.impress.co.jp

Amazonの製品情報をよく見ると、どこにもWindowsがプリインストールされているとは書かれていないんですよね。N5105のミニPCは軒並みWindows 11プリインストールだったので、イヤな予感が。(どうせLinuxで使うから関係ないんだけど?)

とりあえず電源を入れてみると……あれ?

プリインストールのWindows 11

プリインストールのWindows 11

Windows 11がプリインストールされているのですが、これ、大丈夫なんでしょうか? (ミニPC界隈はライセンスが怪しいことがある)

参考情報はここ↓ (モデルは少し違いますが)

chimolog.co

「個人用途で使用が許可されていないボリュームライセンスVL版)です。」🤔

手元のEQ12を確認してみると……、

VOLUME_MAK channel

VOLUME_MAK channel

おうふ🫠

重要なのは、新たにライセンスを購入する必要はないという点でしょう。

 

ハマったところ その1

あちこちの記事で、Windows 11を再インストールしろとさらりと書かれています。

まぁ、今時の環境なので、Windows 11も楽勝で入るんでしょう?

MicrosoftのサイトからWindows 11をダウンロードしてきて、いざ!

「ネットワークに接続しましょう」の画面

「ネットワークに接続しましょう」の画面

あー、ハイハイ、面倒な子ですねぇ……。(嫌々ながらLANケーブルを挿してみる)

「しーん」

強制再起動して、最初からやり直してみても、ボタンがグレーアウトされたまま。仕方がないので、検索してみます。

gigazine.net

先人の知恵、ありがたや。

  • 上記画面になったら、Shift + F10を押す。
  • コマンドプロンプトが立ち上がるので、cd oobe を実行。
  • BypassNRO.cmd を実行。
  • 再起動されて、先ほどと同じ画面に、今度は「インターネットに接続していません」というボタンが出現する。

あとはいつもどおりのインストール作業です (のはずだった)。

 

ハマったところ その2

Windows 11のインストールが無事に済んだのですが、何かおかしい。

ネットワークが見えていません!Wi-Fiも動作していません!

バイスマネージャで見ると、Intel I225-Vのドライバが正常に動作していません。仕方がないので、こんなこともあろうかと用意しておいたUSB-LANアダプタを使って、Intelのサイトからドライバをダウンロードします。

USB-LANアダプタでネットワーク仮接続

USB-LANアダプタでネットワーク仮接続

既存のドライバを一旦削除した後、ドライバを再インストールしたところ、無事に内蔵LANが動き始めました。

EQ12の無線LANアダプタはIntel AX101ですが、これもIntelからドライバをダウンロードしてきて導入すればOK。

 

ライセンスはどうなったか

ほい!

RETAIL channelのライセンス

RETAIL channelのライセンス

RETAIL channelの表記に変わりました😇

 

まとめ

ちょろっと動画サイトを眺めてみましたが、前回のN5105と同様、もう軽い事務用PCはこれで十分ではないかという性能です。DVDドライブ付きの高くてデカい省スペースPCは、もうオフィスから駆逐されそうです。

さて、当初の目的だったopenSUSEでも導入しますか……

 

おしまい