OpenWrt: Vxlanのセットアップ

前回、NEC Aterm WG1200CRにOpenWrtをインストールしました。この機種はヤオフクで手に入れたものですが、実は3台まとめての落札だったので、今回、この3台を使ってネットワーク周りをアップグレードすることにしました。現在のネットワークは11n(2.4GHz)の11s(メッシュ)+WPA3 SAEで、通信速度は150Mbpsです。メッシュネットワークは柔軟性のあるネットワークですが遅いという欠点があります。そこでAPモードを使って11acの性能を引き出そうというのが今回の試みです。

11acのWPA3 SAEのAPモード、Clientモードのネットワーク・セットアップまでは問題ないのですが、子機のClientモードの方が仕様上ブリッジできないという欠点があります。プライベートネットワーク上でnat超えは避けて同一のネットワークを透過的に使いたいところです。いろいろ検討してみたところ、トンネリング・インターフェースを使えば出来そうです。以前にWireGurad上にGreTapをのせてネットワークデバイスをブリッジしました。今回も同じ方法が使えます。

GreTap vs. Vxlan

L2のトンネリングする方法としてGreTapの他にVxlanがあります。どちらも同じ目的で使いますが、何が違い、どちらがメリットがあるのかが疑問だったので調べてみたところ、Vxlanはudpプロトコルを使い、マルチキャストができることがわかりました。一方、GreTapはユニキャストのみです。ネットワーク同士をつなげるとしたらVxlanの方が有利なのは明らかです。そこで今回はVxlanを採用することにしました。

Vxlanのセットアップ

OpenWrtのドキュメントを調べたのですがどうも上手くいきません。そこでGoogleで調べて、何が欠けているのか、情報を収集してみました。

まずパッケージのインストールから始めました。

opkg install vxlan kmod-vxlan ip-full ip-bridge

しかし、これだけでは上手くいかず、前回、GreTapでnat周りのカーネルモジュールをインストールしたことを思い出しました。そこで手当たり次第に関連するカーネルモジュールをインストールしてみました。

opkg install kmod-ip6-tunnel kmod-ip6tables kmod-ipt-conntrack kmod-ipt-conntrack-extra \
    kmod-ipt-nat kmod-ipt-nat-extra kmod-iptunnel kmod-iptunnel6 kmod-nf-conntrack \
    kmod-nf-conntrack-netlink kmod-nf-conntrack6 kmod-nf-nat kmod-nf-nat6 kmod-nf-nathelper \
    kmod-nf-nathelper-extra kmod-nfnetlink kmod-udptunnel4 kmod-udptunnel6 kmod-vxlan

AP、Clientの両方の/etc/config/networkに追加します。peeraddrとipaddrはネット環境に合わせて調整します。またインターフェースvxlan0をbr-lan(LAN環境)にブリッジします。

config interface 'vxlan0'
	option proto 'vxlan'
	option port '4789'
	option vid '8'
	option ipaddr '10.201.0.53'
	option peeraddr '10.201.0.50'
	#option tunlink 'l2vpn'
	#option mtu '1400'

config interface 'l2vpn'
#	option ifname '@vxlan0'
	option ifname 'l2vpn0'
	option proto 'static'
	option ipaddr '10.201.0.53'
	option netmask '255.255.255.192'
	#option layer '2'
	option delegate '0'

インターフェースのセットアップ

wi-fiのセットアップ

firewallはVxlan用に作成します。

ネットワークトポロジー

 PCs                                             redius server2
  |                                                   ||
 wifi AP == wifi Client -- (vxlan) -- wifi AP == GW router == WAN
  ||                                   |              |
 radius server1                 (mesh network,  (mesh network,
                               11s + wpa3 sae)  11s + wireguard + gretap)
                                       |              |              
                                      PCs          IP camera

ルーター種別

  • Vxlan: 11acルーター(wi-fi:866Mbps, lan:1Gbps)
  • 11s + wpa3 sae: Atheros router, mt7621以降 (wi-fi:150Mbps, lan:100Mbps)
  • 11s + wireguard + gretap: rt3050, rt5350, mt7620 (wi-fi:150Mbps, lan:100Mbps)

Multi network化

Vxlanは柔軟性あるネットワーキングができるのでクラウド環境でよく使われています。余っている11acルーターを使って試しに自宅ネットワーク環境で試してみます。

config interface 'vxlan0'
	option proto 'vxlan'
	option port '4789'
	option vid '8'
	option ipaddr '10.201.0.53'
	option peeraddr '10.201.0.50'

config interface 'vxlan1'
	option proto 'vxlan'
	option port '4790'
	option vid '8'
	option ipaddr '10.201.0.53'
	option peeraddr '10.201.0.60'

config interface 'l2vpn'
	option ifname 'l2vpn0'
	option proto 'static'
	option ipaddr '10.201.0.53'
	option netmask '255.255.255.192'
	option delegate '0'

ポートを+1ずらして設定しました。

テスト:iperf (==: 有線LAN, –: Wi-Fi)

1 ) AP router == NAS

[  4] local 192.168.211.20 port 5001 connected with 192.168.211.52 port 46574
[  4]  0.0-10.0 sec   146 MBytes   122 Mbits/sec

2) ThinkPad x230 (macOS) — AP router == NAS

[  4] local 192.168.211.20 port 5001 connected with 192.168.211.4 port 54857
[  4]  0.0-10.1 sec   281 MBytes   234 Mbits/sec

3) AP router 2 (Vxlan) == AP router == NAS

[  4] local 192.168.211.20 port 5001 connected with 192.168.211.53 port 34536
[  4]  0.0-10.0 sec   305 MBytes   256 Mbits/sec

4) Client router (vxlan) — AP router 2 (vxlan) == AP router == NAS

[  5] local 192.168.211.20 port 5001 connected with 192.168.211.60 port 46286
[  5]  0.0-10.1 sec  91.7 MBytes  76.5 Mbits/sec

5) ThinkPad x220 (Linux) == Client router (vxlan) — AP router 2 (vxlan) == AP router == NAS

[  5] local 192.168.211.20 port 5001 connected with 192.168.211.2 port 44770
[  5]  0.0-10.4 sec  94.1 MBytes  76.2 Mbits/sec

1図はarproxyのためか速度が半分になってます。2図は通常のAPルーターとして使った場合、十分な速度が出ています。3図は二つ目のAPルーターです。想定通りの速度です。4図はVxlanを通してClientルーターからの速度です。速度が約1/3になっています。ここがボトルネックのようです。仮想状のトンネルはCPUパワーが必要なのか設定の問題なのかわかりませんが調査が必要です。5図エンドポイントです。

総括するとOpenWrtでVxlanを実現しようとしても遅くなってしまうと言う結果でした。

TODO

  • Vxlan超えでradiusサーバーとOpenWrtダッシュボードのアクセス不能の問題。 –> mtu = 1360

参考

  • https://forum.openwrt.org/t/wireguard-vxlan-and-multicast/39405/7
  • https://openwrt.org/docs/guide-user/network/tunneling_interface_protocols#examples
  • https://www.reddit.com/r/networking/comments/4bko87/vxlan_vs_gre/