【HW】VR500(aka 鎖国ルーター)をゲットしたのでOpenWrtを入れて遊んでみた 
 SRCHACKさんがVR500で面白そうな遊びをしていたので、VR500はHW面で興味があったのですが、自分も筐体をゲットできたので遊んでみました。文章が長いのと長い文章に疲れて所々雑になっているのは許してヒヤシンス




 色は、その昔同社のこんな色のスイッチがあったなーと言う深い青色です。金属筐体なので、テストしてるときもほんのり暖かかったですが、ちゃんと筐体全体で放熱できている証なのでしょう。

HWスペック


SRCHACKさんのページにもあるように、構成は MT7621A(2コア4スレッド)、RAM 256MB、Flash 64MBとなっています。このサイズのネットワーク機器としては非常にパワフルなスペックだと思います。

root@OpenWrt:~# cat /proc/cpuinfo |grep -E "(^core|^proc)"
processor : 0
core : 0
processor : 1
core : 0
processor : 2
core : 1
processor : 3
core : 1

root@OpenWrt:~# free
total used free shared buffers
Mem: 256044 71896 184148 752 5436
-/+ buffers: 66460 189584
Swap: 0 0 0


 MIPSでもSMTってあったんですね…知りませんでした。また、USB3.0も生えているので、どの程度使えるか気になるところです。ちなみに、デフォルトファームではUSB周りは使われていないようです。

OpenWrtを入れるために


 下記SRCHACKさんの手順にHOWTOは書いてあるので、こちらでは省略しますが、もし実際に機器をHACKする場合はパッチなど色々重要なことがいてあるので先に一読してください(重要と言いながら丸投げするスタイル)。

手取り足取り書いてある詳しい開国手順

 パッチの適用の仕方が分からないと言う事はないかもしれませんが、一応3のパッチ適用の際の補足
#gitから引っ張ってくるとデフォルトではopenwrtというディレクトリが出来るので、その下に下りてパッチ
dev1@debian-dev01:~/$ cd openwrt
dev1@debian-dev01:~/openwrt$ wget パッチ
dev1@debian-dev01:~/openwrt$ patch -p1 <VR500_r49404.patch

 また、USBにメモリなどを挿す場合は
> Kernel modules > USB Support
の中の
kmod-usb-storage
kmod-usb-storage-extras

> Kernel modules > Block Devices
にある
kmod-scsi-generic
を含める必要があったので、もしUSBをストレージ用途で利用しようと思っている人は注意してください。

 自分はOpenWrt初心者なので、make menuconfigを実行したときにパッケージを選択したときのMと*の違いが分からず、sysupgradeのファイルを作ってもパッケージが更新されないと悩みました。
 *はsysupgradeのイメージに含める、Mはパッケージの個別ビルドでイメージファイルの中には含めないという意味で、Mで作っていたので無駄に5回くらいmakeしました。

 ちなみに、OpenWrt入れた場合は基本的に元のファームには戻らないと覚悟した方がよいです。OpenWrtを入れたあと純正を入れてもWebUIはそれっぽく戻りますが、本気で戻したい場合はシリアルからあれこれして戻さないと怪しいです。

 もっとも、似たような機能についてはpfsenseのpfBlockerNGで実装されているので、どうしても鎖国したい場合は新しくpfsenseのVM等をたててそちらでやるべきだと思います。(話がそれてしまいますがイメージとしてはこんな感じで出来ます)




 今回テストに利用したe2fsprogs(mkfs.ext[2-4])やfdiskやSoftEtherやSambaなどを含めたごった煮パッケージを作成したので置いておきます。多分純正ファームのWebUIから入ると思います。入っているパッケージは.configファイルを見てください。

vr500-openwrtimages-Chaos_Calmer_15.05.1_r49404.tgz(17MB)

 色々含めたらファイルサイズが大きくなってしまいましたが、VR500には64MBという広大なフラッシュ領域と何かあればUSBメモリが使えるという利点があるのであまり気にならないと思います。まあ検証用なのでもっと切り詰めたい人は自分で作るなりしてください。

 initramfsの方だけでも色々使えるようになっていますが、squashfsの方を適用しないと再起動する度に設定が初期化されてしまうので注意してください。これで若干ハマりました。

OpenWrtで遊ぶ


 WebUIからInitramfsイメージを放り込んだら、そのあとOpenWrtからSquashfsの方を投げ込みます。Initramfsの方はもう少し小さくすれば良かったかなと思いつつ面倒なのでこのまま行きます。


 話がそれますが、OpenWrtの「Wrt」は、冒頭の写真の下に敷かれているWRT-G54のOSにLinuxカーネルやGPLライセンスのライブラリなどを使ってしまう→開示要求→ソース公開→公開されたソースでみんなが遊び始める、と言うのが元だったんですね…知りませんでした。WRT-G54はCiscoLinksysとLinksysのものを持っていたのですが、Linksysのものは壊してしまいました。


iperfで遊ぶ


 話がそれてしまいましたが、まずは単体性能としてiperfがどの程度出るか試してみます。検証では、XeonE3 1220v2がのったVMホスト上にあるほぼ素のDebianマシン上でiperf -sを実行し、VR500から下記コマンドを実行しました。

iperf -c IP -t 60 -i 1

 VMホストは10Gネットワークにいるのですが、VR500のWAN側はアップリンク10Gスイッチに繋がったAX3630S-48T2XWに接続されています。簡単な図を書くのにGliffy使いたいのでConfluenceのBlog機能に移行しようかな…




 その結果が以下です。




[ 3] 0.0-60.0 sec 6.27 GBytes 898 Mbits/sec

 と、大体900Mbp出ます。グラフ上だと欠落している谷があるのですが、iperf上で極端に落ちるようなことは無かったので、グラフの表示の問題(firefoxの問題?)だと思いますが謎です。


 次に、NATされたLANにいる物理PC(Thinkpad X220 /Windows8.1)から同じVMに対してiperfした結果です。




 ただし、Windowsのiperfは-w 128KなどとTCPのウィンドウサイズを大きく取らないと500Mbps程度で頭打ちになるようだったので、下記コマンドを実行しました。このオプションで、X220がVMと同じLANにいる限りはiperfで940Mbps程度出ていました。
iperf -c IP -w 128K -t 60 -i 1


 その結果が以下です。




[184] 0.0-60.0 sec 6.31 GBytes 904 Mbits/sec

 と、NATくらいではそこまで影響しないようです。

 その後、VR500にWANの5001をLANのX220にフォワードさせるルールを作り、VMホストから
iperf -c IP -w 128K -t 60 -i 1

 を実行してみました(FWルールはデフォルトのまま)。




 その結果です。



[ 3] 0.0-60.0 sec 3.59 GBytes 514 Mbits/sec

 と、大体500Mbps程度でます。ソフトウェアルーターとしてはがんばっている方なのではないでしょうか。

 最後に、pfsenseでDHCPの降ってこないVLANにPPPoEサーバを作成し、Untaggedな別VLANのスイッチのポートに接続したVR500のWANをPPPoEにして、pfsense上で今までiperfしていたVMに対してNATするルールを作成し、LANにいるX220からiperfした結果です。(要するにWANのエミュレーションをしたかった)




 最初はpfsense自体でiperfを動かしたのですが、pfsense自体でiperfを動かすとX220から直接PPPoEを接続しても何故か500Mbps程度しかでなかったため、今までのVMにフォワードさせたところX220から930Mbps出たのでこちらにしました。手順が怪しいので参考値です。




 結果は、
[184] 0.0-60.0 sec 2.73 GBytes 391 Mbits/sec

 と、大体400Mbps前後です。

 色々iperfで遊んだ結果を並べてみましたが、ラインレートまでとは行きませんが普通に多機能なルーターとしてもそれなりに使えると思います。これ取ってからデフォルトファームの動き見ておけば良かったと後悔…


USB3.0で遊ぶ


 せっかくUSB3.0が生えているので、こちらの動きも見てみようと思います。USBのストレージを有効にする場合は、上の方で説明したkmod-usb-storage等が必要になるのでコンパイルする際には注意してください。

 テスト機材は適当なUSBメモリがなかったので、その辺に転がっていた何かのケースのふたに750Evo(256GB)を接続してテストしました。




この組み合わせはT430のUSB3.0に接続してCrystalDiskmarkをかけたところR/W共に120MB/s程度は出るので今回は十分だと思います。




 とりあえず何も考えずにさしてlsusb(デフォルトではコマンドがないのでmakeするときに選ぶ必要があります)した結果です。
root@OpenWrt:~# lsusb -v

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 1 Single TT
bMaxPacketSize0 64
idVendor 0x1d6b Linux Foundation
idProduct 0x0002 2.0 root hub
bcdDevice 3.18
iManufacturer 3 Linux 3.18.36 xhci-hcd
iProduct 2 xHCI Host Controller
iSerial 1 1e1c0000.xhci
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 25
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
Hub Descriptor:
bLength 9
bDescriptorType 41
nNbrPorts 2
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
TT think time 8 FS bits
bPwrOn2PwrGood 10 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
DeviceRemovable 0x00
PortPwrCtrlMask 0xff
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power
Device Status: 0x0001
Self Powered

Bus 002 Device 002: ID 1f75:0888 Innostor Technology Corporation IS888 SATA Storage Controller
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 9
idVendor 0x1f75 Innostor Technology Corporation
idProduct 0x0888 IS888 SATA Storage Controller
bcdDevice 0.15
iManufacturer 1 Innostor Technology
iProduct 2 IS888 USB3.0 to SATA bridge
iSerial 3 088810000000
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 44
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 200mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0400 1x 1024 bytes
bInterval 0
bMaxBurst 15
Binary Object Store Descriptor:
bLength 5
bDescriptorType 15
wTotalLength 22
bNumDeviceCaps 2
USB 2.0 Extension Device Capability:
bLength 7
bDescriptorType 16
bDevCapabilityType 2
bmAttributes 0x00000002
Link Power Management (LPM) Supported
SuperSpeed USB Device Capability:
bLength 10
bDescriptorType 16
bDevCapabilityType 3
bmAttributes 0x00
wSpeedsSupported 0x000e
Device can operate at Full Speed (12Mbps)
Device can operate at High Speed (480Mbps)
Device can operate at SuperSpeed (5Gbps)
bFunctionalitySupport 1
Lowest fully-functional device speed is Full Speed (12Mbps)
bU1DevExitLat 1 micro seconds
bU2DevExitLat 101 micro seconds
Device Status: 0x0001
Self Powered

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 3.00
bDeviceClass 9 Hub
bDeviceSubClass 0 Unused
bDeviceProtocol 3
bMaxPacketSize0 9
idVendor 0x1d6b Linux Foundation
idProduct 0x0003 3.0 root hub
bcdDevice 3.18
iManufacturer 3 Linux 3.18.36 xhci-hcd
iProduct 2 xHCI Host Controller
iSerial 1 1e1c0000.xhci
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 31
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 0mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 9 Hub
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0 Full speed (or root) hub
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0004 1x 4 bytes
bInterval 12
bMaxBurst 0
Hub Descriptor:
bLength 12
bDescriptorType 42
nNbrPorts 1
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
bPwrOn2PwrGood 10 * 2 milli seconds
bHubContrCurrent 0 milli Ampere
bHubDecLat 0.0 micro seconds
wHubDelay 0 nano seconds
DeviceRemovable 0x00
Hub Port Status:
Port 1: 0000.0203 5Gbps power U0 enable connect
Binary Object Store Descriptor:
bLength 5
bDescriptorType 15
wTotalLength 15
bNumDeviceCaps 1
SuperSpeed USB Device Capability:
bLength 10
bDescriptorType 16
bDevCapabilityType 3
bmAttributes 0x00
wSpeedsSupported 0x0008
Device can operate at SuperSpeed (5Gbps)
bFunctionalitySupport 3
Lowest fully-functional device speed is SuperSpeed (5Gbps)
bU1DevExitLat 1 micro seconds
bU2DevExitLat 1 micro seconds
Device Status: 0x0001
Self Powered
root@OpenWrt:~#"


 おお、見える見える。

 次に、USB3.0経由で接続したSSDに対してファイルシステムを通さずにddした結果です。

#書き込み
root@OpenWrt:~# time dd if=/dev/zero of=/dev/sda1 bs=1M count=4000
4000+0 records in
4000+0 records out
real 1m 1.54s
user 0m 0.02s
sys 0m 41.92s
(4 GB) / (61.54 s) =
64.998375 MB / s

#読み込み
root@OpenWrt:~# time dd if=/dev/sda1 of=/dev/null bs=1M count=4000
4000+0 records in
4000+0 records out
real 0m 48.64s
user 0m 0.05s
sys 0m 37.02s
(4 GB) / (48.64 s) =
82.2368421 MB / s


 読み/書き共にUSB2.0以上の速度で動いているので、USB3.0の効果はあります。この状態で、USBストレージにext4のファイルシステムをつくり、Sambaで共有をする準備をします。

root@OpenWrt:~# mkfs.ext4 /dev/sda1
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 61049088 4k blocks and 15269888 inodes
Filesystem UUID: cf655368-2b4d-4626-b7ef-9967a0a121a1
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

root@OpenWrt:~# mount /dev/sda1 /mnt
root@OpenWrt:~# time dd if=/dev/zero of=/mnt/a.img bs=1M count=4000
4000+0 records in
4000+0 records out


Sambbaで遊ぶ


 上のUSB3.0接続のSSDをSambaで共有して遊んでみます。/etc/init.d/sambaをstop&&startするとそのたびに/etc/samba/smb.conf.templateから書き戻されてしまうので、/etc/samba/smb.confに下記設定を書き足し、検証中はkillコマンドでサービスを止めたあと、smbd -Fで起動するという雑手順でテストしていたので、本格的に使う場合は別途考える必要があります。

#/etc/samba/smb.confの一番下に追記
[a]
path=/mnt
browsable=yes
read only=no
writeable=yes
publilc=yes
#

root@OpenWrt:~# kill `ps |grep -E "smbd -F$"|cut -d" " -f2`
root@OpenWrt:~# smbd -F
root@OpenWrt:~# chmod 777 /mnt -R


 その結果です。

読み込み


大体50-60MB/s程度です。

書き込み



大体20-30MB/s程度です。

 そもそもこういった用途では考えられていないので若干パワー不足感がありますが、topを見ている限りだとsmbdプロセスが1コア分しか使えていないようなので、多数の接続があればもう少し合計値は速くなる気がします。

SoftEtherで遊ぶ


 @el1n氏が作成したOpenWrt用パッチがあるので、何も考えずに入れます。ビルドには時間がかかるので、OpenWrtに入れる場合は一旦SoftEther単体でコンパイルが通ることを確認してから追加した方が良いです。

 また、今回は何もしていませんが、デフォルトで入るSoftEtherのバージョンが若干古いので、もし最新版を使いたいという人は適宜package/softethervpn/softethervpn/Makefileを見ながら変えてください。

dev1@debian-dev01:~/openwrt$ git clone https://github.com/el1n/OpenWRT-package-softether.git package/softethervpn
dev1@debian-dev01:~/openwrt$ ./scripts/feeds update
dev1@debian-dev01:~/openwrt$ ./scripts/feeds install softethervpn
dev1@debian-dev01:~/openwrt$ make defconfig
dev1@debian-dev01:~/openwrt$ make menuconfig
#その後TUIの中の > Network > VPNのsoftethervpnをMにしてパッケージを作る

 パッケージが作成されたら、個別で作った人はipkgをいれ、vpnserverコマンドを実行してSoftEtherサーバを作成します。(自分の作ったイメージでは最初から起動しています。)
 デフォルトではvpnbridgeとvpnclientも動いているため、サーバ以外を下記コマンドで無効化します。
root@OpenWrt:~# /etc/init.d/softethervpnbridge stop
root@OpenWrt:~# /etc/init.d/softethervpnbridge disable
root@OpenWrt:~# /etc/init.d/softethervpnclient stop
root@OpenWrt:~# /etc/init.d/softethervpnclient disable


 指摘されて思い出しましたが、VR500再起動後vpnsmngrから接続して仮想ハブの設定をしようとするとなぜか拠点間ブリッジとして動いてしまうことがあるので、下記コマンドで各設定を初期化し、以後拠点サーバとして動くように設定します。
#プロセスを殺す
for a in `ps |grep -E "/usr/bin/vpn.*"|cut -d" " -f2`; do kill $a ; done
#自動起動無効化
for a in bridge clilent ; do /etc/init.d/softethervpn${a} disable ; done
#設定ファイル初期化
rm /usr/bin/vpn_*
#VPNサーバ起動
/etc/init.d/softethervpnserver start



 起動後、LANに接続されたX220からvpnsmgrで接続し、仮想ハブを作成しますが、SoftEtherの初期手順については他の人が沢山作っているので省略します。

 仮想ハブをeth0:1(LAN)にブリッジさせ通信しようとしたのですが、eth0:1やbr-lanに対してSoftEtherからブリッジをかけても通信が出来なかったため、aというtapを作成し、sshからbrctrl addif br-lan tap_a を実行しました。

 コマンド実行したあとにWebUIからいじれることに気がついたので、次回再起動時も有効にするためにはNetwork->Interfaces->LANのPysical settings内のブリッジに追加すれば次回起動時も勝手にbr-lanにくっついてくれます。



 その後、デフォルトで起動している5555ポートに対してポートフォワードし、WANにいるT430(Win10)からVPN越しにLANにいるX220にiperfした結果です。



 速度としては、大体50Mbps程度で安定していました。BuffaroのWZR-HP-AG300H(AR7161@680MHz 128MiB 32MiB )で10-20Mbpsだったので、このレベルの機器としてはかなり速い方だと思います。

まとめ


 色々試してみましたが、普通のルーターとしても、NASのヘッドとしても、SoftEtherを動かすVPNサーバとしても、何をしてもそつなくこなせるだけのパワーはあると思います。
 これ以上のマシンパワーが欲しいのであればXeonE3等のマシンの上で動くVMでやるか、それなりのCPUを積んだ物理x86マシンの上でやるしかない気もします。
 個人的にはUSB3.0接続の複数HDD積める箱でも買ってmdraid+rsyncdサーバとして使ってみようかと思いつつ、ものがないので試せませんが。。

 ハードウェアとしてはいいので、2万円くらいでホワイトボックスルーターとして出てくれると手を出しやすいので夢が広がる気がします。以上!

コメントを書く
必要事項とコメントを入力して下さい。









タグの挿入