ESXi on intel NUC でアクセスポイントを作る備忘録です.
機器の概要
今回アクセスポイント化するのは,ESXi8 で仮想マシンサーバーとして運用している Intel NUC7I5BNH です.
もともとこの NUC に搭載されていた Intel® Dual Band Wireless-AC 8265 を ESXi8 の PCI パススルー機能を用いて Linux 仮想マシン(Alpine Linux ver. 3.18.4)から利用することでアクセスポイント化します.
アクセスポイント化する目的
アクセスポイント化の目的は,異なる VLAN ネットワークに簡単にアクセスできるようにすることです.
実はウチの自宅はいろいろ理由があって,複数 VLAN にネットワークを分けています.
主に使う VLAN ネットワークには,NETGEAR NIGHTHAWK AX1800
をアクセスポイントとして設置しているのですが,メインで使っている以外の VLAN ID を持つネットワークにも無線LAN経由でアクセスしたいことがたまにあります.
業務向けのアクセスポイントの場合 VLAN 毎に SSID を設定することができるものがありますが,自宅で使うルーター機能とセットになっているアクセスポイントにはまずありませんし,もちろん現在使用中の AX1800 にもありません.ということで,現在使っている ESXi8 サーバーである NUC7I5BNH に搭載されていて使っていなかった Wifi をアクセスポイント化してメインの VLAN 以外のネットワークも Wifi に対応させようと考えた訳です.
制限事項
上記の通りの目的なので,本来なら VLAN ID ごとに異なる SSID となるようにしたいところです.しかし残念ながら,Intel のカードの場合は,これが(多分ハードウェア的に)これが実現できないようです.
これは,Linux の場合,iw コマンドで当該 LAN カードの valid interface mode combinationsの AP を見れば良いようで,実際,見てみると,
$ iw phy0 info Wiphy phy0 wiphy index: 0 max # scan SSIDs: 20 max scan IEs length: 422 bytes max # sched scan SSIDs: 20 max # match sets: 11 Retry short limit: 7 .... valid interface combinations: * #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1, total <= 3, #channels <= 2 ....
の通り,AP<=1 となっているので,最大で1のアクセスポイントのみであることがわかります(Atheros のものだとできるらしい).
また,Intel の Wifi カードを Linux から AP として使う場合は,地域設定を上手く切り替えることができない(5GHz 帯は国によって発して良い電波の周波数帯域が異なっている)という問題があり,結果5GHz帯のアクセスポイントには(少なくとも素直な方法では)できないっぽいです.
提供するAPの仕様
という事で,今回は,以下のようなインターフェスを持つ Alpine Linux で構成された仮想サーバーを作成します.
- eth0: 日常的に使用しているLAN(管理用,VLAN100)へのインターフェス
- eth1: AP を提供する先の VLAN ID を持つ LANへのインターフェース
- wifi0: Intel® Dual Band Wireless-AC 8265 を表すインターフェース
- br0: eth1 と wifi0 のブリッジインターフェース
このようにすることで,AP を提供する VLAN を変更したい場合は,単に eth1 の所属ネットワークを対応する VLAN ID を持つネットワークに ESXi の管理画面から切り替えれば良いだけになります.
もちろんこのやり方だと,この AP で接続できる VLAN ネットワークは一つです.しかし,少なくとも私の場合は異なる VLAN ネットワークに同時に接続したいという訳ではありませんし(つまり一つにアクセスできれば十分),VLAN を切り替えても,SSID とパスワードは変わらず,畢竟,クライアントの接続先を変更する必要もないということになります.
次に,AP が提供する周波数帯は(Intel のカードの制限から)もちろん 2.4GHz 帯に限定されますが,
- 802.11n, ac に対応
- WPA-PSK 対応(WPA2対応)
- SAE 対応(WPA3対応)
とすることにしました(本当はさらに WPS にも対応させたかったのですが,少なくとも Alpine Linux で標準的に提供されているソフトウェアの場合はどうも WPS オプションなしでコンパイルされているようで,この実現は今回は見送りました).
構築の実際
OS の準備
ESXi の仮想マシンとして Alpine Linux の最新版を導入しますが,気をつけなければならない点は以下の通りです.
- ネットワークのポートグループから,各VLAN ID に対応する仮想スイッチをあらかじめ作成しておく必要があります.また,仮想 NIC として eth0 は管理ネットワークに,eth1 は AP を提供する VLAN ネットワークに所属させます.
- メモリは512MBで十分ですが,「すべてのゲスト メモリを予約(すべてロック)」にチェックが必要です.
- ゲストOSのバージョンは「その他のLinux 6.x 以降(64ビット)」です.
- セキュアブートは無効化します.
- STANDARD バージョンの Alpine Linux をインストールする必要があります(VIRTUAL 等だと無線LANのドライバが提供されません).
Alpine Linux の実際のインストール手順や open-vm-tools のインストール等については以下の記事をご覧ください.
sysctl.conf の設定
IPv4 や IPv6 のパケットの転送が正常に行われるよう /etc/sysctl.conf に以下のように設定します.
/etc/sysctl.conf
# content of this file will override /etc/sysctl.d/* net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 net.ipv6.conf.eth0.accept_ra=2
なお,最後の行の net.ipv6.conf.eth0.accept_ra=2 は RA を用いて eth0(管理ネットワークへのインターフェース)に IPv6 アドレス他を自動設定するためのものです.IPv6 も固定アドレス運用する場合は,net.ipv6.conf.eth0.accept_ra=0 と設定しなければなりません.
bridge 関係ソフトウェアの追加とブリッジの設定
今回は eth0 と wifi0 をブリッジしますので,そのためのソフトウェアを追加します.
# apk add bridge bridge-utils
また,/etc/networks/interfaces にブリッジの設定を行います.管理ネットワークの IPv4アドレス他を DHCP で設定します(IPv6 は RA で自動設定です).
# vi /etc/networks/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto br0 iface br0 inet manual bridge-ports eth1 bridge-stp off
hostapd の追加
無線LANアクセスポイント機能を提供するサーバソフトウェアである hostapd を追加し,その設定を行います.まず追加は,
# apk add hostapd
とするだけです.
次に,デフォルトでインストールされる設定フェイルをバックアップします(デフォルトの設定ファイルはあまりに多岐に渡る設定の説明が載せられており,分かりにくいので,今回は設定ファイルを書き換えるのではなく,新しく作成します).
# cp -rf /etc/hostapd /etc/hostapd.orig
また,新たな設定ファイルである hostapd.conf を以下の内容で作成します(SSID 名は ssid = 以下に,パスワードは,wpa_passphraseと sae_password に設定しますが,それ以外項目の詳しい説明は割愛します).
# rm -rf /etc/hostapd/* # vi /etc/hostapd/hostapd.conf interface=wlan0 bridge=br0 driver=nl80211 ssid=test country_code=JP hw_mode=g channel=11 auth_algs=1 ieee80211n=1 ieee80211ac=1 wpa=2 wpa_passphrase=xxxxxxxxxxxxxx wpa_key_mgmt=SAE WPA-PSK rsn_pairwise=CCMP group_cipher=CCMP ieee80211w=1 sae_password=xxxxxxxxxxxxxxx wps_rf_bands=ag
テスト起動は以下のように行います.
# hostapd -d /etc/hostapd/hostapd.conf
hostapd の自動起動を設定は以下の通りです.
# rc-update add hostapd boot # reboot
設定は以上です.
使用雑感
実際の使用感ですが,2.4GHz 帯のみではありますが,数台つなぐくらいだと全く気にならない程度の速度が出ます(自宅は住宅地で,10じゃきかないくらいの大量のアクセスポイントが見える環境です).
WPA-PSK の接続も WPA3 の接続も全く問題なくPC,スマホ,タブレットから行えますし,VLAN の切り替えも簡単です.さすがにいつもつかう多数の機器を接続するネットワーク用のアクセスポイントとしては訳者不足だと思いますが,実験用とかあまり使われないネットワーク用のものとしては手軽で良いのではないかなと思います.もちろん ESXi で動かしてますので,逸般の誤家庭向けなんですけどね.
以上!