X86でOpenWrtルーターを作ってみた
結論
- ルーティングでシングルコアで処理しているのなんでだろうかわからないけど、パワーあるマシンのほうがスループットが出る。
- ビルドイメージさえできたら割と簡単にルーター作れる
- イメージバックアップがお手軽なのでやってみるといいかも。(ddコマンドで)
方針・前提条件
前回におなじで、ルーターはX86マシンで今回は構築する
環境
前回におなじで、ルーターはX86マシンで今回は構築する
想定するネットワーク構成
前回におなじで、ルーターはX86マシンで今回は構築する
用意するもの
- USBディスク x 2
- X86なマシン x 試したい分だけ
作業内容
ビルド環境/imageを焼き込むためのLinux用意
package install
sudo apt-get update
sudo apt-get install -y subversion git g++ flex patch libncurses5-dev zlib1g-dev libssl-dev gawk xz-utils unzip libp11-kit-dev \
libmbedtls-dev gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libmbedtls-dev libev-dev libudns-dev libsodium-dev
また、WSL2上でやる場合は以下の対応が必要でした。
/etc/wsl.conf
[interop]
appendWindowsPath = false
EOF
/etc/wsl.confの参考情報は、[OpenWrt Wiki] Build system setup WSLになります。
追加で、ディスクを作成した後にそれを焼きこむためのUSB BootできるLinuxを用意します。
USBBootできさえすればいいので、今回は、私の持っているマシンで一番確実にどのマシンでも利用可能だったLubuntuをbalenaEtcher - Flash OS images to SD cards & USB drivesでUSBディスクに書き込んで用意しました。
ビルドソース取得~ビルドまで
こちらのリンクをもとにソース取得からビルドまで行っていきます。
make menuconfigでkmodで必要となるものを追加していきます。
今回ASIXなものが必要なので私はその辺を追加しました。
make menuconfig
としたときに
- Kernel Modules
- USB Support
- kmod-usb-net-asix-ax88179
- kmod-usb-net-asix
- USB Support
- Firmware
- iwlwifi-firmware-iwl7265(ただ、Wifiは何故か認識させる事ができなかったので入れるだけ入れた感じ)
- LuCiもどこかにありますので、ここで入れておきます。
選択するときめんどくさいのでbuilt-in?にするために*での指定を行いました。(どうせメモリも多いんで関係)
残りは参考リンクのビルド手順に従いましょう。
イメージを書き込む
Live USBで使えるLinuxを起動し、terminalで下記のように
dd if=/dev/sda of=/dev/デバイス名 bs=12M
これであとは書き込みが終了するまで待ちます。
起動したら
此処から先は前回同様にLuCIにアクセスするため、スイッチに接続し、IPアドレスを特定し、WEB画面から設定するなりしていきます。
計測結果
on Aspire-one USB NIC
root@tiny:~# iperf3 -c 10.0.0.4 -t 100
Connecting to host 10.0.0.4, port 5201
[ 5] local 192.168.11.22 port 42298 connected to 10.0.0.4 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 47.3 MBytes 397 Mbits/sec 22 73.5 KBytes
[ 5] 1.00-2.00 sec 47.4 MBytes 397 Mbits/sec 15 93.3 KBytes
[ 5] 2.00-3.00 sec 46.9 MBytes 394 Mbits/sec 12 146 KBytes
[ 5] 3.00-4.00 sec 47.0 MBytes 394 Mbits/sec 18 147 KBytes
[ 5] 4.00-5.00 sec 47.2 MBytes 396 Mbits/sec 15 76.4 KBytes
[ 5] 5.00-6.00 sec 47.2 MBytes 396 Mbits/sec 8 136 KBytes
[ 5] 6.00-7.00 sec 47.1 MBytes 395 Mbits/sec 15 93.3 KBytes
[ 5] 7.00-8.00 sec 46.9 MBytes 394 Mbits/sec 11 151 KBytes
on Core-i5 onboad
root@tiny:~# iperf3 -c 10.0.0.4
Connecting to host 10.0.0.4, port 5201
[ 5] local 192.168.11.22 port 42788 connected to 10.0.0.4 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 105 MBytes 881 Mbits/sec 0 509 KBytes
[ 5] 1.00-2.00 sec 102 MBytes 853 Mbits/sec 0 509 KBytes
[ 5] 2.00-3.00 sec 102 MBytes 860 Mbits/sec 0 509 KBytes
[ 5] 3.00-4.00 sec 104 MBytes 868 Mbits/sec 0 509 KBytes
[ 5] 4.00-5.00 sec 102 MBytes 860 Mbits/sec 0 509 KBytes
[ 5] 5.00-6.00 sec 103 MBytes 861 Mbits/sec 0 509 KBytes
[ 5] 6.00-7.00 sec 102 MBytes 855 Mbits/sec 0 509 KBytes
[ 5] 7.00-8.00 sec 103 MBytes 862 Mbits/sec 0 509 KBytes
[ 5] 8.00-9.00 sec 101 MBytes 851 Mbits/sec 0 566 KBytes
[ 5] 9.00-10.00 sec 102 MBytes 857 Mbits/sec 0 566 KBytes
使えそうなのはCore-i5です。
また、シングルコアであまりがあるのは、Corei5のマシンだけでしたので、現状の構成はCore i5でやっています。
もし、シングルコア以外でも処理ができるような設定を見つけましたら、その際にはPi4での再構築を行おうと考えています。
(その際には、Pi4用のOpenWrtについてもビルドする必要がありますけども。)
最後に
もともとOpenWrtでArcherC6運用をおこなっていたのですが、VLANのルーティングが遅いのが気になり、Pi4でルーターを作ってみるものの、USB NICがボトルネックとなりX86なマシンでもOpenWrtをビルドしてセットアップを行ってみました。
作業中、ネットワークがどうしても使えなくなるときがありますので、この辺の作業をするときにはネットワーク断になる前に必要な情報を揃えてTry&Errorでやることになるのをわすれないでください。
シングルコアでトラフィックを捌いているのが気になりますが、一旦はこれでいいかなということで今回の調査は一旦終了とします。