無線を介したLayer-2ブリッジの構築

ネットワークのトラフィックを調べるために、ポートミラーリングしたものをWiresharkなどでキャプチャする際に、有線だとLANケーブルが長くまったり、キャプチャに使うPCなどの置き場に困ることがあった。そこで、有線LANのポート間をWiFiを介したLayer 2 Bridge によって延長することにした。

構成

IPアドレスを限定してよければ通常のWiFiルータのアクセスポイントとクライアントで良い。ただ、それではミラーリングしたもののキャプチャには向かないため、Layer2 のブリッジを構成する。WDS(Wireless Distribution System)機能を使えばWiFiのアクセスポイント間の接続ができるが、WDSで有線LAN間を接続する方法がよくわからない。そこで、ここでは、無線と有線のポートを持つノード間をWiFiで接続し、プライベートIPアドレスを割り当て、その上に VXLAN で L2ブリッジを構成して、ノードの有線LANポート間のブリッジとなるようにすることにした。

ノードには GL-iNetの GL-AR300M と GL-AR300M16 を利用した。後述するように同じファームウェアで動作するかと思っていたが、異なるものを使用する必要があった。GL-AR300Mには16MBのNOR Flashに加えて128MBのNAND Flashがあるが、GL-AR300M16 には16MBのNOR Flashしかない。

OpenWrtで設定を行うが、GL-iNetのファームウェアではOpenWrtのバージョンが古いので、ファームウェアを書き換えてOpenWrt バージョン 22.03.05 を使った。

ファームウェアの書き換えと準備

GL-AR300M

Web「Flashing OpenWRT on the GL-AR300M16 Router」を参考に、GL-AR300M のファームウェアの書き換えを行った。

手順としては、 GL-AR300MのLAN と PC (DHCP)を接続し、PCから192.168.8.1 にアクセスする。GL-iNetの Admin Panel の Upgrade で、(あらかじめダウンロードしておいた)以下の initramfs ファイルをインストールした。

https://downloads.openwrt.org/releases/22.03.5/targets/ath79/nand/openwrt-22.03.5-ath79-nand-glinet_gl-ar300m-nand-initramfs-kernel.bin

この initramfs への書き換えが終わったら、再起動をし、OpenWrtを立ち上げる。OpenWrt の Image formats に説明があるように、initramfsは、ロードされたらRAMだけで動作するファームウェアである。これを利用して、ファイルシステムへの状態保存ができる squashfs にファームウェアを書き換える必要がある。

OpenWrt にアクセスするために、PCのIPアドレスを 192.168.1.2 にして、OpenWrtである192.168.1.1 にアクセスする。OpenWrt の LuCIにログインする。System の Backup/Flash Firmwareを選択し、Flash new firmware image で(あらかじめダウンロードしておいた)以下のsquashfs ファイルを指定して upload する。

https://downloads.openwrt.org/releases/22.03.5/targets/ath79/nand/openwrt-22.03.5-ath79-nand-glinet_gl-ar300m-nand-squashfs-sysupgrade.bin

Continue を選択し、フラッシュの書き換えを行う。squashfsへの書き換えができたら、再起動して、LuCI にログインする。Softwareから、package list を更新し、リストされたモジュールから luci-proto-vxlan をインストールする。kmod-vxlan、vxlanなども一緒にインストールされる。

GL-AR300M16

GL-AR300Mと同様にファームウェアの書き換えを行う。最初同じファームウェアを使えばよいと思って作業していたが、失敗する。GL-AR300M とは異なる GL-AR300M16用を使う必要があった。以下のファイルを使ってファームウェアを書き換えた。

glinet_gl-ar300m16-initramfs-kernel.bin

glinet_gl-ar300m16-squashfs-sysupgrade.bin

OpenWrtへファームウェアを書き換え後には、LuCI にログインして luci-proto-vxlan をインストールした。

OpenWrtの設定

以下では、GL-AR300M の設定を示す。他方(GL-AR300M16)の設定は、違いがある部分を補足する。

インタフェースとデバイス

まず、設定後のインタフェースをデバイスを記録しておく。

Interfaces

インタフェースには、Unmanaged の L2VPN、VXLANのVX0 を加えている。

Devices

ブリッジデバイスとして br-vpn を加えている。

Wireless設定

NetworkのWirelessで SSID 等を設定する。ここでは、WirelessBridge としている。

GL-AR300M を Masterとしている。ここには示していないが他方(GL-AR300M16)が Clientとなる。

device wlan0

WiFiの無線デバイスとして wlan0 の設定をする。WiFiの設定を行う。

SSIDは WirelessBridge とし、セキュリティは WPA2 PSK とした。

interface wwan

WiFiのインタフェース wwan には、静的アドレスを割り当てる。Master のGL-AR300M に、ここでは192.168.6.1 を割り当てている。ここには示していないが、Client側には192.168.6.6 を割り当てている。

MasterとClientが通信できればIPアドレスはもちろん他のものでもよいが、VXLANの設定で用いているので、変更した場合にはVXLANの設定も変更する必要がある。

 

VXLAN

Layer 2 Bridge のために VXLANを用いている。

interface VX0

Master側のGL-AR300Mでは、相手先のRemote IPv4 address には Clientの wwan のIPアドレスである 192.168.6.6 を設定し、自身の Local IPv4 address には、Maser の wwanのIPアドレス 192.168.6.1 を設定している。

Client側では、Remote IPv4 address に192.168.6.1、Local IPv4 addressに 192.168.6.6 を設定することになる。

 

device vx0

デバイス vx0 は、インタフェース VX0 を作成する際に作られる。

以下のスクリーンショットではMTUをデフォルト1500のままにしてあるが、VXLANのヘッダ(50 バイトから54バイト)があるので、フラグメントを避けるためには環境に合わせて適切な値を設定する必要がある。

L2VPN

ブリッジデバイス br-vpn のインタフェースとしてL2VPNを設定している。L2VPNは Unmanaged でIPアドレスは割り当てられない。これによって、どのようなIPアドレスのサブネットにも接続が可能になる。

device br-vpn

VX0 と有線Ethernetポートの eth1 (GL-AR300MではWAN側)をブリッジする。これによって、VXLANと有線Ethernetを接続する。前述のように、L2VPN は Unmanaged でIPアドレスは割り当てられていないようになっている。

 

lan

lanは制御コンソール接続用として使っている。

Master は IPv4 アドレスを 192.168.5.1/24 とし DHCP Server を有効にしている (Ignore interface のチェックを外し、Dynamic DHCPにチェックを入れている)。もちろん、IPアドレスは他のものでもよい。

ClientのIPv4アドレスもなんでもよいが、MasterとClient を同じPCに接続して区別できるように192.168.7.1/24 とし、DHCP Server を有効にしている 。

 

device br-lan

ブリッジデバイス br-lan には、Master側の GL-AR300Mでは eth0 をポートに指定している。GL-AR300M以外で多数のポートがある場合でコンソールとして使えるポートを増やす際には、ここで追加指定できる。

 

おわりに

とりあえず、有線LANケーブルと同様にIPアドレスを気にすることなく、無線で延長できるようになった。あまり、テストはしていないが、使っていて不具合が出てきたら直したい。