ProxmoxにWiFiアクセスポイントを設定してWiFi経由でアクセスする

nogajun
nogajun

Intel N100のミニPCにはWiFiデバイスがついていますが、Proxmoxでは使えません。

ProxmoxでWiFiデバイスの利用を推奨しない理由は、公式Wikiに書いてありますが、ご家庭の遊びマシンではWiFiが利用できたほうがやっぱり嬉しいです。

今回はProxmoxにアクセスポイントを作って、Proxmoxの仮想マシンにアクセスできるようにしました。

おことわり

今回使ったN100マシンは、自宅サーバーに使ってるBeelink Mini S12 Proではなく、預かっているT-Bao T8 PlusというLANポートが2つあるN100マシンを使っています。そういうことでLANポートもBeelinkはIntelチップでデバイス名はwlo1、T-BaoはRealtekでwlp3s0に変わっています。

今回はデバイスが多いのでまとめました。ネットワークは、そのままデバイス、ブリッジ、コンテナ直結です。

ネットワーク構成図

役割 ネットデバイス Linuxブリッジ コンテナデバイス OpenWrtデバイス OpenWrtブリッジ
外側 enp1s0 vmbr0 eth0 WAN
内側(有線) enp4s0 vmbr1 eth1 LAN BR-LAN
内側(無線) wlp3s0 (同上) (同上) (同上) (同上)

Proxmox本体側(ノード)の作業

アクセスポイントが使えるか調べる

アクセスポイントとして使うには無線LANデバイスがAPモードをサポートしていることが必要です。N100マシンでは大丈夫ですが、ひとまず確認しておきます。

Proxmoxノードの[シェル]を開いて、無線デバイス設定ツールのiwをインストールします。そして、iw listで無線デバイスの情報を表示します。すると中に「Suported interface mode」があって、その中にAPと書いてあればアクセスポイントとして使えます。

# apt install iw
# iw list | less
(中略)
      Supported interface modes:
                  * IBSS
                  * managed
                  * AP
                  * AP/VLAN
                  * monitor
                  * mesh point

無線デバイスのブリッジを追加する

無線デバイス用のブリッジを追加します。無線デバイスですが、存在していてもProxmoxが認識している場合と認識していない場合があります。Proxmoxノードの[システム]→[ネットワーク]を開いて、無線デバイスがなければ、/etc/network/interfacesに設定を追加します。

無線デバイスが認識されていない場合

無線デバイスを追加するには、Proxmoxノードのシェルを開いてip aで無線デバイス名を確認します。

# ip a | less
(中略)
3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether c4:3d:1a:d6:bb:31 brd ff:ff:ff:ff:ff:ff

デバイス名がwlo1と分かったのでエディタで/etc/network/interfacesを開いて追記します。

nano /etc/network/interfaces

設定ファイルを開いたら下の1行を末尾に追記します。wlo1は無線デバイス名なので上で調べたデバイス名と違っていれば環境に合わせて置き換えてください。

iface wlo1 inet manual

これで、Proxmoxノードの[システム]→[ネットワーク]に戻ると無線デバイスが見えるようになります。では続けてブリッジを追加します。

無線デバイスが認識されている場合

Proxmoxノードの[システム]→[ネットワーク]を開くと、LANポートのデバイスenp1s0にはブリッジvmbr0enp4s0にはブリッジvmbr1がそれぞれ作成されています。このブリッジに無線デバイスを参加させれば共有されるので、参加させたいブリッジデバイス(今回はvmbr1)を選択して上のメニューにある「編集」を選択します。

ネットワーク画面

ブリッジの設定ダイアログが開いたら、ブリッジポートにenp4s0が入っていますがその後ろにスペースを開けて、無線デバイスwlp3s0を追記します。

ブリッジダイアログ

そして「編集を適用」ボタンを押して適用すれば設定は終了です。

hostapdをインストールする

無線デバイスとブリッジの準備ができたので、アクセスポイントにするためのhostapdをインストールして設定します。hostapdのインストールは、Proxmoxノードの[シェル]を開いてaptからインストールします。

apt install hostapd

インストールしたらhostapdを設定します。設定ファイルhostapd.confは無いのでエディタから/etc/hostapd/hostapd.confを作成します。

nano /etc/hostapd/hostapd.conf

hostapd.confの設定はArch Linux Wikiにあるものをほぼそのまま使っています。hostapdをインストールすると/usr/share/doc/hostapd/example以下に説明付きの設定ファイルやシチュエーションに応じた設定ファイルのサンプルがあるので、それをコピーして利用しても構いません。ひとまずアクセスできるようにしたいのでパスワード固定で設定しています。

ssid=(アクセスポイントのSSID)
wpa_passphrase=(アクセスポイントのパスワード)
interface=wlp3s0 # Proxmoxの無線デバイス
bridge=vmbr1 # Proxmoxで無線デバイスに設定したブリッジデバイス
auth_algs=3
channel=1
driver=nl80211
hw_mode=g
logger_stdout=-1
logger_stdout_level=2
max_num_sta=5
rsn_pairwise=CCMP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
country_code=JP
utf8_ssid=1

設定ファイルを作成したらアクセスポイントとして見えるかテストするので、以下のコマンドで無線デバイスを起動します。

ip link set dev (無線デバイス) up

そして次のコマンドでhostapdを起動します。

hostapd -d /etc/hostapd/hostapd.conf

この状態で、WiFiアクセスができるデバイスからアクセスポイントを検索すると設定したSSIDのアクセスポイントが見えるはずです。今は見えるだけでIPも割り振られないので接続できません。これで問題がなく見えたなら、hostapdを自動起動するようにsystemdのマスクを外して有効化します。

systemctl unmask hostapd
systemctl enable hostapd

以上でProxmox本体側の設定は終わりです。

Proxmoxの作業

無線デバイスのブリッジを設定してhostapdを入れたなら作業としては、ほぼ終わってます。あとは無線デバイスにDHCPでIPを設定するものを用意すればアクセスポイントとして使えます。

なので、適当なコンテナにdnsmasqなどをインストールしてブリッジにつなげば終わりですが、ここで前回の「ProxmoxのLXCコンテナでOpenWrtを使う」が使えます。ということで、OpenWrtコンテナを設定して無線デバイスにDHCPでIPを設定するようにしましょう。

OpenWrtコンテナの設定

OpenWrtコンテナを追加する詳しい方法については前回の記事を見てもらうとして、コンテナのダウンロードがWeb UIがまどろっこしいという人は、wgetを使ってダウンロードしてコンテナを追加できます。OpenWrtのコンテナはデイリービルドなので日付を変更する必要があるので注意してください。

wget -bc -o /var/lib/vz/template/cache/openwrt-23.05-default_20240206_amd64.tar.xz https://images.linuxcontainers.org/images/openwrt/23.05/amd64/default/20240206_11%3A57/rootfs.tar.xz
pct create 501 /var/lib/vz/template/cache/openwrt-23.05-default_20240206_amd64.tar.xz --arch amd64 --hostname openwrt --rootfs local-lvm:4 --memory 512 --cores 1 --ostype unmanaged --unprivileged 1

OpenWrtのコンテナを追加したら、Proxmoxの追加したコンテナに戻ってネットワークを追加します。コンテナのネットワークについては、WANになるデバイスeth0vmbr0を、LAN側になるeth1に無線デバイスも参加しているvmbr1IPアドレスを設定せずに追加します。

ネットワークを追加したらコンテナを起動しますが、コンテナにはLAN側の設定がないので最初にネットワークの設定をします。

ネットワークの設定は、前回の記事と同じですがOpenWrtコンテナの[コンソール]を開きます。そしてEnterキーを押すとシェルに入るので下のシェルスクリプトをコピーしてコンソールに貼り付けます。

uci batch <<EOL
add network device
set network.@device[0].name='br-lan'
set network.@device[0].type='bridge'
set network.@device[0].ports='eth1'
set network.lan='interface'
set network.lan.device='br-lan'
set network.lan.proto='static'
set network.lan.ipaddr='192.168.1.1'
set network.lan.netmask='255.255.255.0'
EOL
uci commit
service network restart

ネットワークが設定されれば、設定はさておきOpenWrtのdnsmasqがDHCPでIPを振ってくれるのでインターネットにアクセスできます。WiFiからアクセスできるデバイスで設定したSSIDに接続してみましょう。

OpenWrtのネットワーク設定をしていないので、セグメントが違っていたりしてつながらない場合もあるかもしれません。その場合は、OpenWrtの設定を自分のネットワークに合わせて設定して接続を試してみてください。

まとめ

やっぱり自宅サーバーで家の中から使う場合には、WiFiからアクセスできるのは楽です。今回は接続できるか試したのでアクセスポイントのパスワードは固定にしていますが、Samba-ADとFreeRadiusで認証できるようにしたいですね。