Edgecore EAP101は、スタンドアロンで使うのはもちろん、EWS101のようなオンプレミスのコントローラや、クラウドコントローラのecCLOUDといった、多彩な構成が可能です。TIP OpenWiFi版のファームウェアが入ったEAP101-Tという製品もあります。
顧客 (オーナー) の店舗に転がすようなマネージドWi-Fiの用途では、オーナーに自前の回線への接続を任せることがあります。このような設置方法の場合、通信事業者の立場では、フリーWi-Fiのトラフィックをオーナーや他の来客のいたずらから保護するために、ケーブルの部分をVPNで保護するなどの対策が欲しいものです。
台数が少ない場合にオンプレミスのコントローラは高くついてしまうので、スタンドアロンで済ませたいことがあります。ところが、オーナーのLANに外からアクセスできないと基地局も触れないので、リモート管理ができないという問題があります。VPNが使えれば、リモート管理もできるようになります。
というわけで、EAP101のスタンドアロンモードでVPNを使いたいわけですが、標準機能では対応していません。幸い EAP101 は ssh でログインできる OpenWrt ベースの製品で、openvpn のパッケージも導入できることが分かったので、試してみました。
仕様外の使い方なので、自己責任でどうぞ。
EAP101でOpenVPNを使えるようにする
パッケージのインストール
v12.5.9 のファームウェアで試してみました。
sshでログインして、opkg update します。色々とエラーが出ますが無視します。
opkg install openvpn-openssl を実行すると、openvpn のパッケージが入ります。
パッケージの微修正
Edgecoreのルートユーザは root ではなく admin なのですが、起動スクリプトが修正されていないので、自分で直します。/etc/init.d/openvpn をエディタで開いて、chown root のところを chown admin に書き換えます。
openvpnクライアントの設定
残念ながらLuCIはEdgecore用にカスタマイズされているので、LuCIからの設定はできません。設定ファイル /etc/config/openvpn に、次のように追記します。名前 (ovpn1) はご自由に。
※ ここではOpenVPNで一般的なUDPではなくTCPを使っています。
config openvpn 'ovpn1'
option nobind '1'
option float '1'
option client '1'
option reneg_sec '0'
option dev 'tun'
option verb '3'
option persist_tun '1'
option persist_key '1'
option remote_cert_tls 'server'
option pkcs12 '/etc/openvpn/cert/user.p12'
option ca '/etc/openvpn/cert/ca.crt'
option enabled '1'
list remote '192.168.1.250'
option proto 'tcp-client'
option port '1194'
OpenVPNサーバのアドレスやポートは、自分の環境に合わせます。
なお、圧縮を使わない場合でも option comp_lzo 'no' を書くと、なぜかサーバ側 (Linux) でエラーが出てしまいました。そのため、この例では外してあります。
証明書のインストール
OpenVPNサーバで作成したクライアント証明書と、サーバのルートCA証明書を、sftpか何かで持ってきて /etc/openvpn/cert に置きます。
ちなみに、PKCS #12形式のクライアント証明書 (秘密鍵入り)は、EAP101上で次のようにして作ることができます。<passpharase> は証明書を発行するときに指定したパスフレーズです。
# openssl pkcs12 -export -in user.crt -inkey user.key -out user.p12 -passin pass:"<passpharase>" -passout pass:""
Firewallとネットワークの設定
どのネットワークをVPNに流すか設定しないと、EAP101からは通信できるのに、端末からはパケットが通らないことになります。
/etc/config/firewall の config zone 'wan' の中に、list network 'wan' という行があるので、その下に list network 'ovpn1' のように追記します。
/etc/config/network の末尾に、以下のように追記します。
config interface 'ovpn1'
option proto 'none'
option device 'tun0'
OpenVPNの起動
/etc/init.d/openvpn start です。
性能評価
OpenVPNをTCPモードで使っているので、UDPでは少し違うでしょう。
まずは、自宅の下り400Mbpsぐらい出る光回線 (IPoE) から、研究室のVPNサーバに接続してみます。
OpenVPNはあまり効率のよいプロトコルではないので、期待していなかったのですが、予想よりもいい感じですね。さすがに EAP101 に搭載されている IPQ6010 はパワフルです。
MikroTik mANTBox 52 15s では、RouterOS で、この半分ぐらいしか出ませんでした。
Wi-Fi 6の性能から見るとだいぶ物足りない感じですが、フリーWi-Fi用途なら使いどころはあるでしょう。
続いて、研究室のLAN上で測定してみました。
家庭向けの回線と違って上りも速度が出ています。下りは誤差の範囲なので、この辺りがCPUの性能なのでしょう。
MT7981B を搭載した GL.iNet Beryl AX (GL-MT3000) でも測ってみました。ファームウェアはGL.iNet版ではなくOpenWrt版に入れ替えてあります。カタログスペックが150Mbpsなので、しっかり性能が出ていることが分かります。旅行に持ち出すなら、さすがにこっちかな。
WireGuardはないの?
ありません!
OpenWrtのサイトをあさってみたのですが、EAP101のカーネルバージョンが古くて、適合するカーネルモジュールがありません。
OpenWiFi版のEAP101-Tなら、WireGuardのカーネルモジュールが入っていたりします。OpenWiFiで使えるかどうかは調査中です。
おしまい