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 するように変更する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
index gl_home.html; lua_shared_dict shmem 12k; lua_shared_dict nonces 16k; lua_shared_dict sessions 16k; init_by_lua_file /usr/share/gl-ngx/oui-init.lua; server { listen 80; listen [::]:80; # listen 443 ssl; # listen [::]:443 ssl; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:DHE+AESGCM:DHE:!RSA!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SR P:!DSS:!CAMELLIA:!SEED"; ssl_session_tickets off; ssl_certificate /etc/nginx/nginx.cer; ssl_certificate_key /etc/nginx/nginx.key; resolver 127.0.0.1; rewrite ^/index.html / permanent; location = /rpc { content_by_lua_file /usr/share/gl-ngx/oui-rpc.lua; } location = /upload { content_by_lua_file /usr/share/gl-ngx/oui-upload.lua; } location = /download { content_by_lua_file /usr/share/gl-ngx/oui-download.lua; } location /cgi-bin/ { include fastcgi_params; fastcgi_read_timeout 300; fastcgi_pass unix:/var/run/fcgiwrap.socket; } location ~.*\.(html|png|jpg|svg)$ { add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; } include /etc/nginx/gl-conf.d/*.conf; } |
設定ができたら、 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 の設定と動作確認について示す予定である。