GL-iNet XE300 (Puli) と SoftEther VPN/マイIP ソフトイーサ版 でGlobal IP

OpenWrtルータでマイIP ソフトイーサ版/SoftEther VPN によってルータのLANポートにGlobal IPアドレスを割り当てて使えるようにした。その途中で調べたことを備忘録として残しておく。

背景

UniFi Dream Machine  (UDM) の OS をアップグレードをしようとしたが、Automatic Cloud Backup を enable にしないとできない。Automatic Cloud Backup を有効化しようとしたが、Global IP アドレスでインターネットにつながっていないと有効化できない。

以前、PCの SoftEther と InterlinkマイIP ソフトイーサ版で Global IP を UDM に割り当てて初期化していた(UniFi Dream Machine を一度セットアップできればLAN内で使えた)。動的グローバルIPアドレスが割り当てられるモバイルネットワークのSIM(イオンモバイル SIM タイプ2 )を利用してモバイルルータ GL-iNet XE300 (Puli) で接続できないかと思って少し試してみたが、必要な IP Passthrough や Bridge の機能を GL-iNetのソフトウェアもOpenWrt もそのまま使える形では持っていないことがわかった。しかたがないので、モバイルルータで以前と同様にマイIP ソフトイーサ版とSoftEther VPNを使ってブリッジし、UDM のWANにGlobal IP アドレスを与えて、UDMのOSのアップグレードをすることにした。

IP Passthrough もしくは Bridge

まず、もともと求めていた機能を探していた際に調べたことを残しておく。

モバイルルータのLANポートに接続したデバイスにモバイルモデムが取得したIP アドレスを与えるためには、モバイルルータに、bridge もしくは IP passthrough の機能が必要である。モバイルネットワークのモデムは Ethernet デバイスなどとは異なり、モデムがIPアドレスを取得するようになっており、通常はモバイルルータに内蔵されているモデムそのままではブリッジとしては使えない(ようだ)。USB接続の外付けモデムを使っても同様である。IP passthrough には、OpenWrtのフォーラムのInstalling and Using OpenWrtの中のスレッド IP Passthrough の図がわかりやすい。

IP passthrough の実現方法

通常は、モデムで受信したIPパケットをすべて、LANポートに送信し、また、LANポートに届いたすべてのパケットをモデムに送信するような IP passthrough 機能を実装してbridge の代わりに使っているようである。

モデムからLANポートへ送り出す際には、LANポートに接続されたデバイスが受信するように、送信先MACアドレスをLANポートに接続されたデバイスにする必要がある。デバイスごとにMACアドレスは異なるので、1台しかLANポートには接続できないというか、複数台接続してもその中の1台のMACアドレスをイーサネットフレームの送信先に指定することになるので、1台しか通信できない。

また、動的なIPアドレスが割り当てられる場合には、そのIPアドレスをLANポートに接続されたデバイスに通知する必要がある。これを実現するには、モバイルルータのLANポートにDHCPサーバーの機能をもたせて、モバイルネットワークからのIPアドレスが変更されたら、それが、LANポートに接続されたデバイスに反映される必要がある。DHCPサーバーからリースを取り消す方法はないので、リースの期間を短くして(できるだけ)タイムリーにIPアドレスの変更を反映させるようだ。ちなみに、固定のIPアドレスを使っている場合にはDHCPサーバーの機能は不要である。

GL-iNet

GL-iNetのフォーラムの Technical Support for Routers の中のスレッド X750 IP Passthrough (Transparent Bridge) によれば、2022年7月に GL.iNet Staff が、We have this feature in one of our project. Not yet add in the standard firmware. と書いているので、近いうちに使えるようになるであろうか?もっとも、GL-X750 は日本では発売されていないので(技術基準適合証明を受けていないので)、X750にIP Passthrough機能が実装されるだけでは使えない。

OpenWrt

これまでに、IP passthrough機能を OpenWrt (REDE)で実装した例はあるようである。LTEforum.at の次のスレッドに、 Blaubeereさんのポストがある。

ソースコードも GitHub ( https://github.com/NextBlaubeere/bridge-mode-openWRT-LEDE/ )に公開されているが、作成されたのが2017年で、Blaubeereさんもそれ以来直していないということなので、現在のバージョンOpenWrtではそのままでは動作しないと思われる。

GL-iNet GL-XE300 (Puli)の設定

環境

SoftEther VPNのサーバー

Interlink  マイIP ソフトイーサ版 (要契約)

SoftEther VPN Server Manager

SoftEther VPN 4.0 (Ver 4.41, Build 9787)

GL-iNet GL-XE300 (Puli)

ファームウェア: Version: 3.217

OpenWrt: 19.07.8

SoftEther: softethervpn5-bridge 5.01.9674-1

SoftEther VPN Server Manager での設定

OpenWrtのSoftEther Bridge の設定は、Windows の SoftEther VPN Server Manager から行った。SoftEther VPN Server Manager を Puli の IPアドレスである 192.168.8.1 に接続した。最初に接続すると管理パスワードなどの設定が必要であるが、それを設定してから、パネルの左下側にある「ローカルブリッジ設定」をクリック。

ローカルブリッジ設定では、仮想HUBは BRIDGEにして、LANカードには、PuliのLAN側ポートである eth0 を選択し、「ローカルブリッジを追加」をクリックして、ローカルブリッジを作成した。

このままだと Puli をリブートすると設定が失われるので、OpenWrt で SoftEther VPN を停止する必要がある。

OpenWrt LuCI での設定

SoftEther VPN Server Manager での設定の保存

SystemのStartup から softethervpnbridge を探し、「Stop」を押して停止することで、設定が保存される。「Start」をクリックするか、設定が正しく保存されたことを確認するためにPuli を再起動する。 SoftEther VPN Bridgeが機能していることを確認する。

Interface SOFTETHER

SoftEther VPN Bridge を機能させるための Interface を追加する。ここでは、SOFTETHERという名前にした。「Advanced settings」はデフォルトのままとした。

「Physical Settings」では、Interface に SoftEther VPN Server Managerでブリッジ先のインタフェースとして選択した eth0 を選択。すでにブリッジは構成されているので、「Physical Settings」での Bridge Interfaces のチェックは入れない。

このインタフェースは、 SoftEther VPN Server とつながるもので、Puli やその他のインタフェースと情報交換するものではないので「Firewall Settings」はデフォルトのままのunspecifiedとした。

Global IP を利用する機器(PC)の設定

マイIP ソフトイーサ版では、固定IPアドレスが割り当てられているので、その情報に従って Puli の eth0 に接続する機器のIPアドレスを設定する。

動作確認

PuliのEthernetの WANポート(eth1)をインターネットに接続するか(および)、SIMを挿入してモバイルネットワークの設定をすれば外部と通信ができるようになり、SoftEther VPNによってブリッジ接続され、PuliのLANポート (eth0) にはグローバルIPアドレスが割り当てられた状態で通信ができるようになるはずである。

その他

上記の設定をする前に OpenWrt 22.03.5 で LuCI を使って、同様のことをしようとしたが、無駄な設定をしたり、誤った設定をしたためかうまくグローバルIPアドレスで通信できなかった。とりあえず、グローバルIPアドレスで使えるようにすることが重要だったので、再度試みることは行っておらず、OpenWrt 22.03.5のLuCI での設定はよくわかっていない。OpenWrt 22.03.5のLuCIでは、Interface と Device が分離されていて、上記で使った OpenWrt 19.07.8のLuCIと同じ設定はできない。