GL.iNet GL-AXT1800 で SoftEther VPN Server を立ち上げる

GL.iNet GL-AXT1800 (Slate AX) で SoftEther VPN Server を使えるようにした。手間取った点があるので備忘録として記録しておく。

(2022年8月28日追記) TAPデバイスを使う必要がないことがわかったので、TAPデバイスを使わない場合を「GL.iNet GL-AXT1800 で SoftEther VPN Server を立ち上げる(TAPなし)」として別記事にした。TAPデバイス関連以外の部分は同じ記述を使っている。

背景

同じセグメントに属するが離れた地点の部屋のLANを Layer 2 で接続することを行ってきた。

以前の EdgeRouter X で L2TPv3 over IPsec で Site-to-Site Layer 2 Bridging をしようと思ったが、使用しようとした環境でIPsec の通信が禁止されているようでうまくいかない。他の方法を考えることになった。

手元にある OpenWrt が使える GL.iNet のミニルータを使うことにして、他の Site-to-Site Layer 2 Bridging の選択肢を検討してみた。OpenVPN は、 Site-to-Site Layer 2 Bridging をもうサポートしないとあるので( https://openvpn.net/vpn-server-resources/site-to-site-layer-2-bridging-using-openvpn-access-server/ )、選択肢からまず外れた。

次に WireGuard は、ポート番号 51820 の UDP を使うようであり、確かめていないが、IPsecの通信が禁止されているネットワークでは使えない可能性があるので、後回しにすることにして、他を調べることにした.

SoftEther VPN が HTTPS を使って通信できるようであり、HTTPS は外部には通信できるので、さすがに LAN内通信だけで禁止することはしていなさそうなので、SoftEther VPN を使ってL2 Bridge を構築することにした。

環境

以下のような構成でテスト環境を構築した。GL-AXT1800のEthernetポートでLAN2と印刷されているポート(3つあるポートの中央)と、GL-MV1000 の3つあるEthernetポートの中央のポートで L2 Bridge を構築する。GL-AXT1800で SoftEther VPN server を動作させ、GL-MV1000で SoftEther VPN bridge を動作させる。SoftEther VPN bridge から SoftEther VPN server にカスケード接続する。IPv4 のポート 443 で接続する。

この記事では、GL-AXT1800における SoftEther VPN server の設定を記録する。

Dynamic DNS

Dynamic DNSとして、「GL.iNet GL-AXT1800 (Slate AX) で DDNS を DuckDNS に対して設定する」の記事の設定がしてあるとする。

バージョン

使用したソフトウェアのバージョンは以下の通り。

  • GL.iNet GL-AXT1800 ファームウェア Version 4.0.2 release1
  • OpenWrt 21.02-SNAPSHOT r16399+157-c67509efd7
  • LuCI openwrt-22.03 branch (git-21.284.67084-e4d24f0)

以下では、OpenWrt の LuCI および PuTTY で ssh を利用して設定する。

SoftEther VPN Server の設定

Webサーバーが ポート443 を使わないようにする

GL.iNet GL-AXT1800 (ファームウェアVersion 4.0.2)では、Admin Panel などのために  Web Server の nginx が使用され、HTTPS のためにポート 443 を listen している(GL-MV1000などのファームウェア Version 3では lighttpd が Webサーバとして使われている)。SoftEther VPNの HTTPS 通信はポート番号を指定できるが、前述したようにIPsecですら通信を禁止しているネットワークでは443以外のポートの通信が禁止されている可能性があるので、安全をとってSoftEther にポート443 を使うことにした。制約のないネットワークでは、SoftEther が利用するポート番号を変更した方が簡単である。

さて、PuTTY などの SSH でログインし、 netstat -apn | grep 443 を実行すると次のようになり、nginx が ポート 443 を listen していることがわかる。

そこで、SoftEther VPN でポート 443 を利用するので、nginx でポート 443 を利用しないようにする。/etc/nginx/conf.d/gl.conf を編集する。

PuTTY などの SSH でログインし、ポート 443 の listen をコメントアウトするか、別のポートを listen するように変更する。

設定ができたら、 GL-AXT1800を reboot してから SSH で netstat -apn | grep 443 を実行して、ポート 443 が listen されていないことを確認する。

(原因ははっきりしないが、設定後に、System / Startup の Initscripts タブの中から nginx を探し、Stop→Start で再起動しただけだとサーバーがうまく起動されず、Admin Panel や LuCI にアクセスできなくなった。GL-AXT1800を再起動することで回復した。)

SoftEther VPN Server のインストール

OpenWrt の LuCI の System / Software で(必要に応じて[Update lists]をしてから) softethervpn5 でフィルターして表示し、softethervpn5-server をインストールする。使用した softethervpn5-server のバージョンは、5.02.5180-1 であった。

softethervpn5-serverをインストールしてSoftEther VPN Server が起動されたら、SSH で netstat -apn | grep 443 を実行して、ポート 443 が vpnserver によって listen されていることを確認する。

SoftEther VPN Server Manager による設定

SSH で接続後に SoftEther の vpncmd コマンドを利用して設定することもできるが、ここでは、Windows の SoftEther VPN サーバー管理マネージャを使って設定する。

初めて SoftEther VPN Server に接続したときは、パスワードを入れずにOKボタンを押し、パスワードを設定する。

 

仮想HUBの作成

仮想HUBとしてここでは、IVY-BRIDGE という名前の仮想HUBを作成する。

SoftEther VPN Server / Bridge 簡易セットアップでは、拠点間VPNサーバーまたブリッジを選択し、拠点間接続VPNの中心となり、他拠点からの接続を受け入れるVPN Server を選択する。

この後に、ダイナミックDNS機能、IPsec/L2TP/EtherIP/L2TPv3サーバー機能の設定、VPN Azureクラウドの設定が求められる。今回の設定ではすべて使わないので、無効にする。

 

この後に、ローカルブリッジの設定をする必要があるが、eth1 などのイーサネットポートと直接ブリッジしてうまく動作させる方法がわからない。データリンク層を制御できるTAP(Terminal Access Point)デバイスを使うことにする。簡易セットアップでは、TAPデバイスの作成ができないため、[3. ローカルブリッジの設定]は使わず、閉じる。後ほどTAPデバイスを作成する。

接続用アカウントの作成

IVY-BRIDGE ができたら、それを選択して、[仮想HUBの管理]ボタンを押して、接続用アカウントの作成を行う。

セキュリティデータベースの管理の中の[ユーザの管理]ボタンをクリックする。

[新規作成]ボタンをクリックして、ユーザを作成する。

ここでは sXXXXXX というユーザを作成する。ここでは認証方法としてパスワード認証を用いることにして、パスワードを設定する。

TAPデバイスの作成

仮想HUBが作成出来たら、ローカルブリッジ設定から TAP デバイス  l2vpn を作成する。

[ローカルブリッジ設定]ボタンをクリックし、ローカルブリッジ設定を開く。

[新しいローカルブリッジの定義]の中の仮想HUBには、 IVY-BRIDGE を選択する。

作成する種類には[新しいtapデバイスとのブリッジ接続]を選択する。ここでは、新しいtapデバイス名は l2vpn とした。[ローカルブリッジを追加]ボタンをクリックして、tapデバイスを作成する。

OpenWrt では「tap_」が付加され、 tap_l2vpn という名前のデバイスが作成されることになる。

OpenWrt での設定

OpenWrt での SoftEther VPN Server の設定保存

SoftEther VPN Server Manager による設定は、サーバーを停止させないとファイルに反映されないらしい(Softether+GL iNet GL-AR750で拠点側VPNルータを作る)。LuCI の System / Startup の Initscripts タブの softethervpnserver をまずStopさせる。その後、GL-AXT1800を reboot する。

OpenWrt でのブリッジデバイス br-vpn の作成

OpenWrt で、tapデバイスtap_l2vpnと イーサネットポート eth1 をブリッジ接続するために利用するブリッジデバイス br-vpn を作成する。

Network / Interface の Devices タブ で [Add device configuration…]ボタンを押し、Device type に Bridge device を選び、Device name に br-vpn を指定し、Bridge ports に eth1 と tap_l2vpn を選択する。

[Save & Apply]ボタンを押して設定を反映させる。

OpenWrt でのブリッジデバイス br-lan の設定

OpenWrt で、ブリッジデバイスとして働いている br-lan の設定をする。

Network / Interfaces の Devices タブの br-lan の[Configure]ボタンを押し、 Bridge ports から br-vpn (L2VPN)に使う eth1 を外す。

これを忘れて eth1 が br-lan と br-vpn の両方に含まれていて通信がうまくできず、気がつくまでに時間がかかった。

OpenWrt でのインタフェース L2VPN の作成

OpenWrt で、インタフェース L2VPN を作成する。

Network / Interface の Interfaces タブで[Add new interface…]ボタンを押し、Name に L2VPN、Protocol に Unmanaged 、Device に br-vpn を選択する。

[Create interface]ボタンを押して、インタフェース L2VPN を作成する。

作成後の各タブの設定は以下の通りであった。

設定を保存して、Network / Interfaces のページに戻って L2VPN ができていることを確認する。

[Save & Apply]ボタンを押して設定を反映させる。

ちなみに、Server に加えて、この記事では触れていない Bridge の設定も終えて L2 Bridge で通信できるようになると Network / Interface の Interfaces タブの インタフェース L2VPN の RX は通信が行われると増えるようだが、TX は 0 のままのようだ。

OpenWrt での Firewall の設定

WANからの HTTPS の通信 (Port 443 の通信)を許可するルールを作成する。ここでは Allow-Port-443 という名前のルールとする。

LuCI の Network / Firewall の Traffic Rules タブで、[Add]ボタンを押し、Name を Allow-Port-443、Source zone が wan、Destination zone が Device (input)、Destination Port が 443、Action が accept のルールを作成する。

[Save & Apply]ボタンを押して設定を反映させる。

この後の設定

SoftEther VPN Server に接続する SoftEther VPN Bridge を設定し、 SoftEther VPN Bridge から SoftEther VPN Server へのカスケード接続を行う必要がある。別の記事でSoftEther VPN Bridge の設定と動作確認について示す予定である。