hgot07 Hotspot Blog

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

Edgecore EAP101でOpenVPNクライアントを動かす

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 です。

 

性能評価

OpenVPNTCPモードで使っているので、UDPでは少し違うでしょう。

まずは、自宅の下り400Mbpsぐらい出る光回線 (IPoE) から、研究室のVPNサーバに接続してみます。

EAP101 OpenVPN 自宅からのテスト

EAP101 OpenVPN 自宅からのテスト

OpenVPNはあまり効率のよいプロトコルではないので、期待していなかったのですが、予想よりもいい感じですね。さすがに EAP101 に搭載されている IPQ6010 はパワフルです。

MikroTik mANTBox 52 15s では、RouterOS で、この半分ぐらいしか出ませんでした。

Wi-Fi 6の性能から見るとだいぶ物足りない感じですが、フリーWi-Fi用途なら使いどころはあるでしょう。

 

続いて、研究室のLAN上で測定してみました。

EAP101 OpenVPN LAN内でのテスト

EAP101 OpenVPN LAN内でのテスト

家庭向けの回線と違って上りも速度が出ています。下りは誤差の範囲なので、この辺りがCPUの性能なのでしょう。

MT7981B を搭載した GL.iNet Beryl AX (GL-MT3000) でも測ってみました。ファームウェアはGL.iNet版ではなくOpenWrt版に入れ替えてあります。カタログスペックが150Mbpsなので、しっかり性能が出ていることが分かります。旅行に持ち出すなら、さすがにこっちかな。

(参考) GL.iNet Beryl AX の性能 (LAN内)

(参考) GL.iNet Beryl AX の性能 (LAN内)

WireGuardはないの?

ありません!

OpenWrtのサイトをあさってみたのですが、EAP101のカーネルバージョンが古くて、適合するカーネルモジュールがありません。

OpenWiFi版のEAP101-Tなら、WireGuardのカーネルモジュールが入っていたりします。OpenWiFiで使えるかどうかは調査中です。

 

おしまい