g00ceyの技術ブログ

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
  • 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でやることになるのをわすれないでください。
シングルコアでトラフィックを捌いているのが気になりますが、一旦はこれでいいかなということで今回の調査は一旦終了とします。


Share

comments powered by Disqus