読者です 読者をやめる 読者になる 読者になる

SDN開発エンジニアを目指した活動ブログ

〜SDNなオープンソース製品を実際に使って試してみる〜

RouterBOARD (RB750GL)のOpenFlow化へのチャレンジ 〜OpenvSwitch構築手順メモ編〜

今回は、RouterBOARD (RB750GL)をOpenFlow化して、OpenFlow基本動作を確認するというチャレンジになります。
こちらが、OpenFlow化したRouterBOARD (RB750GL)です。さらに、OpenWRT化に対応したOpenvSwitch 2.3.0版パッケージを搭載しているので、ユーザランドではなく、カーネルモジュールとして、datapathが動作する点が特徴となります。
f:id:ttsubo:20141102183626j:plain

◆これまでのOpenFlow化の経緯

以前、RouterBOARD (RB750GL)のOpenFlow動作の評価を実施しましたが、OpenFlow機能の実用化の視点では、期待はずれでした。


いっぽう、過去のブログ記事「家庭用BuffaloルータのOpenFlow化へのチャレンジ 〜OpenvSwitch構築手順メモ編〜」で紹介したとおり、Buffalo”BHR-4GRV"でもOpenvSwitch構築が可能でした。安価にOpenFlow化にチャレンジするには、よい素材だと思います。

最近になって、一部のオープンソースコミュニテイの間で、RouterBOARDのOpenWRT化が話題になってきました。
さらに、「OpenvSwitchも搭載してOpenFlow機器として安価に構築してみよう!」という活動報告を入手できましたので、今回、実際にOpenvSwitch構築にチャレンジしてみました。
前回のBuffaloルータとの違いは、RouterBOARDのOpenWRT化コミュニテイ有志の尽力により、OpenvSwitch/OpenWRTの構築に必要なソフトウェア資材が、インタネット上のリポジトリに公開されているため、実際の構築手順が、だいぶ簡潔になった点が挙げられます。

◆構築手順の流れ

まずは、RouterBOARD (RB750GL)を用いて、OpenFlowスイッチ台数を増やすことを想定して、OpenvSwitch構築手順をメモっておきます。おおまかな構築手順の流れは、こんな感じです。

(1) RB750GLのOpenWRT化
(2) OpenvSwitchパッケージのインストール
(3) OpenWRTのネットワーク設定
(4) OpenvSwitchの各種設定

◆RB750GLのOpenWRT化

本構築手順は、MacBookMac OS X)での作業を想定しております。
注) ここでの構築手順は、個人の構築メモとして掲載しております。
 (RouterBOARD”RB750GL"が文鎮化してしまうなどの不測な事態が発生しても、あくまでも、自己責任でお願いします。)

こちらの記事がOpenWRT構築の参考にさせて頂きました。

1. RB750GL構成イメージ

RB750GLのOpenWRT化には、NICポートへのLANケーブルの抜き差しが多数発生しますので、参考までに、最終的にOpenWRT構築するRB750GL構成イメージを掲載しておきます。

f:id:ttsubo:20141102195200j:plain

2. initramfsのダウンロード

公開リポジトリIndex of /openwrt/r43011-ovs/trunk/ar71xx.mikrotik/)より
"openwrt-ar71xx-mikrotik-vmlinux-initramfs-lzma.elf"をダウンロードし、MacBookのローカルディスクに置いておきます。

3. BOOTモード変更

RB750GLの2番ポートから、telnetログインして次回のBOOTモードを変更する。

> ssh admin@192.168.88.1

事前の設定内容を確認する。

[admin@MikroTik] /system routerboard settings> print
          boot-device: nand-if-fail-then-ethernet
        cpu-frequency: 400MHz
        boot-protocol: bootp
  force-backup-booter: no
          silent-boot: no

BOOTモードを変更する。

[admin@MikroTik] > /system routerboard settings set boot-device=try-ethernet-once-then-nand

変更後の設定内容を確認する。

[admin@MikroTik] /system routerboard settings> print 
          boot-device: try-ethernet-once-then-nand
        cpu-frequency: 400MHz
        boot-protocol: bootp
  force-backup-booter: no
          silent-boot: no

4. 作業PC側でのdnsmasq起動

作業PC(MacBook)のUSB-LAN Port設定(en2)のIPアドレスを設定する。

> sudo ifconfig en2 192.168.1.99

事前に、dnsmasqインストールを行った上で、dnsmasqを起動する。
なお、dnsmasqの引数パラメータとして指定する内容については、
user: tsubo
tftp-root: /Users/t_tsubo2000/openwrt
として作業を行った。

> sudo /usr/local/opt/dnsmasq/sbin/dnsmasq -i en2  --dhcp-range=192.168.1.100,192.168.1.200 --dhcp-boot=openwrt-ar71xx-mikrotik-vmlinux-initramfs-lzma.elf --enable-tftp --tftp-root=/Users/t_tsubo2000/openwrt -d -u tsubo -p0 -K --log-dhcp --bootp-dynamic

5. initramfsの転送開始

RB750GLの1番ポートに差し替えて、しばらく待つとinitramfsが転送されるので、しばらくしてから、RB再起動する。1番ポートのLED点滅が完了するまで、しばらく待つ。

6. RB750GLへの初回ログイン

RB750GLの2番ポートに差し替えて、RB750GLにログインする。

> telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------


BusyBox v1.22.1 (2014-10-25 16:27:26 JST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (Bleeding Edge, r43011)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------
root@OpenWrt:/#

現在のNICポート情報を確認する。

root@OpenWrt:/# ifconfig
br-lan    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fd51:9f97:adc0::1/60 Scope:Global
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:172 errors:0 dropped:0 overruns:0 frame:0
          TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:25189 (24.5 KiB)  TX bytes:13656 (13.3 KiB)

eth0      Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:314 errors:0 dropped:1 overruns:0 frame:0
          TX packets:137 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:70007 (68.3 KiB)  TX bytes:16790 (16.3 KiB)
          Interrupt:4 

eth0.1    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:235 errors:0 dropped:0 overruns:0 frame:0
          TX packets:111 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:44285 (43.2 KiB)  TX bytes:13060 (12.7 KiB)

eth0.2    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.1.134  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:74 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:19528 (19.0 KiB)  TX bytes:2750 (2.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:529 errors:0 dropped:0 overruns:0 frame:0
          TX packets:529 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:36808 (35.9 KiB)  TX bytes:36808 (35.9 KiB)

7. OpenWRTファームウェア設定の事前準備

OpenWRTファームウェアを公開リポジトリからダウンロードできるよう、インタネット利用可能なネットワークセグメント(192.168.100.0/24)に、RB750GLの1番ポートを接続し、RB750GLの1番ポートの設定変更を行う。
なお、1番ポートのifconfig down/upを行っても、DHCPでの自動IPアドレス設定が行われなかったので、必要な諸設定を手作業で実施した。

root@OpenWrt:/# ifconfig eth0.2 192.168.100.134
  • 名前解決の設定
root@OpenWrt:/etc# vi /etc/resolv.conf 
search lan
nameserver 127.0.0.1
nameserver 192.168.100.1
  • デフォルトルート設定
root@OpenWrt:~# route add -net default dev eth0.2 gateway 192.168.100.1
root@OpenWrt:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.100.1   0.0.0.0         UG    0      0        0 eth0.2
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br-lan
192.168.100.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0.2

8. OpenWRTファームウェア有効化

古い設定ファイルの削除しておく。

root@OpenWrt:/# mtd erase kernel
Unlocking kernel ...
Erasing kernel ...
root@OpenWrt:/# mtd erase rootfs
Unlocking rootfs ...
Erasing rootfs ...

公開リポジトリIndex of /openwrt/r43011-ovs/trunk/ar71xx.mikrotik/)より、OpenWRTファームウェアの書き込みを行う。

root@OpenWrt:~# wget2nand http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik
Connecting to rb-openwrt-test.mydns.jp (157.7.235.137:80)
kernel               100% |*******************************|  1129k  0:00:00 ETA
Connecting to rb-openwrt-test.mydns.jp (157.7.235.137:80)
rootfs.tgz           100% |*******************************|  2406k  0:00:00 ETA
Erasing filesystem...
Mounting /dev/mtdblock2 as new root and /dev/mtdblock1 as kernel partition
Copying kernel...
Preparing filesystem...
./
./etc/
./etc/resolv.conf
./etc/hotplug-preinit.json
./etc/firewall.user
./etc/hosts
./etc/sysupgrade.conf

…(snip)

./sys/
./rom/
./rom/note
Cleaning up...
Image written, you can now reboot.  Remember to change the boot source to Boot from Nand

OpenWRTを再起動する。

root@OpenWrt:~# reboot

9. SSH疎通の設定

RB750GLの1番ポート(WANポート)でのSSHログインが可能なように、firewall設定を行う。
まずは、RB750GLの2番ポートからtelnetログインする。

> telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
 === IMPORTANT ============================
  Use 'passwd' to set your login password
  this will disable telnet and enable SSH
 ------------------------------------------


BusyBox v1.22.1 (2014-10-25 16:27:26 JST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

 ############ Routerboard User's Group JP ############
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (Bleeding Edge, r43011 with OVS)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------

RB750GLの1番ポート(wan)は、eth0.2対応付けられている。よって、インタネット利用可能なネットワークセグメント側のDHCPから”192.168.100.9”が自動付与されていることを確認する。

root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fdaa:b9c8:e3b0::1/60 Scope:Global
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1166 errors:0 dropped:0 overruns:0 frame:0
          TX packets:579 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:174701 (170.6 KiB)  TX bytes:153478 (149.8 KiB)

eth0      Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2267 errors:0 dropped:10 overruns:0 frame:0
          TX packets:1284 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:497542 (485.8 KiB)  TX bytes:286522 (279.8 KiB)
          Interrupt:4 

eth0.1    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1259 errors:0 dropped:0 overruns:0 frame:0
          TX packets:567 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:200432 (195.7 KiB)  TX bytes:152262 (148.6 KiB)

eth0.2    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.100.9  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          inet6 addr: 240b:11:53a0:400:d6ca:6dff:fe73:148b/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:985 errors:0 dropped:0 overruns:0 frame:0
          TX packets:712 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:251586 (245.6 KiB)  TX bytes:128654 (125.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:76 (76.0 B)  TX bytes:76 (76.0 B)

rootパスワードを設定する。

root@OpenWrt:/# passwd
Changing password for root
New password: 

firewallについて、SSHに関わる設定を追加する。

# Allow SSH
config rule
	option name		Allow-ssh
	option src		wan
	option proto		tcp
	option dest_port	22
	option target		ACCEPT

firewall設定変更を有効にする。
以降、RB750GLの2番ポートと作業PC間のLANケーブリングは不要となる。

root@OpenWrt:/etc# /etc/init.d/firewall restart
Warning: Unable to locate ipset utility, disabling ipset support
 * Flushing IPv4 filter table
 * Flushing IPv4 nat table
 * Flushing IPv4 mangle table
 * Flushing IPv4 raw table
 * Flushing IPv6 filter table
 * Flushing IPv6 mangle table
 * Flushing IPv6 raw table
 * Flushing conntrack table ...
 * Populating IPv4 filter table
   * Zone 'lan'
   * Zone 'wan'
   * Rule 'Allow-DHCP-Renew'
   * Rule 'Allow-Ping'
   * Rule 'Allow-ssh'
   * Forward 'lan' -> 'wan'
 * Populating IPv4 nat table
   * Zone 'lan'
   * Zone 'wan'
 * Populating IPv4 mangle table
   * Zone 'lan'
   * Zone 'wan'
 * Populating IPv4 raw table
   * Zone 'lan'
   * Zone 'wan'
 * Populating IPv6 filter table
   * Zone 'lan'
   * Zone 'wan'
   * Rule 'Allow-DHCPv6'
   * Rule 'Allow-ICMPv6-Input'
   * Rule 'Allow-ICMPv6-Forward'
   * Rule 'Allow-ssh'
   * Forward 'lan' -> 'wan'
 * Populating IPv6 mangle table
   * Zone 'lan'
   * Zone 'wan'
 * Populating IPv6 raw table
   * Zone 'lan'
   * Zone 'wan'
 * Set tcp_ecn to off
 * Set tcp_syncookies to on
 * Set tcp_window_scaling to on
 * Running script '/etc/firewall.user'

RB750GLの1番ポート(wan)から、SSHログインする。

> ssh root@192.168.100.9
The authenticity of host '192.168.100.9 (192.168.100.9)' can't be established.
RSA key fingerprint is f4:ca:b7:fe:19:6e:a0:60:5c:0e:26:76:3f:bf:32:fe.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.9' (RSA) to the list of known hosts.
root@192.168.100.9's password: 


BusyBox v1.22.1 (2014-10-25 16:27:26 JST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

 ############ Routerboard User's Group JP ############
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (Bleeding Edge, r43011 with OVS)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------

◆OpenvSwitchパッケージのインストール

現在のopkg設定内容を確認する。

root@OpenWrt:~# cat /etc/opkg.conf
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
src/gz chaos_calmer_base http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base
src/gz chaos_calmer_luci http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/luci
src/gz chaos_calmer_management http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/management
src/gz chaos_calmer_packages http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/packages
src/gz chaos_calmer_routing http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/routing
src/gz chaos_calmer_telephony http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/telephony
src/gz chaos_calmer_openvswitch http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/openvswitch

opkgをアップデート。

root@OpenWrt:~# opkg update
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_base.
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/luci/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_luci.
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/management/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_management.
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_packages.
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/routing/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_routing.
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/telephony/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_telephony.
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/openvswitch/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_openvswitch.

OpenvSwitchパッケージをインストールする。

root@OpenWrt:~# opkg install openvswitch-common openvswitch-ipsec openvswitch-switch
Installing openvswitch-common (2.3.0-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/openvswitch/openvswitch-common_2.3.0-1_ar71xx.ipk.
Installing libpcap (1.5.3-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/libpcap_1.5.3-1_ar71xx.ipk.
Installing libopenssl (1.0.1j-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/libopenssl_1.0.1j-1_ar71xx.ipk.
Installing zlib (1.2.8-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/zlib_1.2.8-1_ar71xx.ipk.
Installing librt (0.9.33.2-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/librt_0.9.33.2-1_ar71xx.ipk.
Installing libpthread (0.9.33.2-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/libpthread_0.9.33.2-1_ar71xx.ipk.
Installing kmod-openvswitch (3.10.49+2.3.0-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/openvswitch/kmod-openvswitch_3.10.49+2.3.0-1_ar71xx.ipk.
Installing kmod-stp (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-stp_3.10.49-1_ar71xx.ipk.
Installing kmod-llc (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-llc_3.10.49-1_ar71xx.ipk.
Installing kmod-gre (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-gre_3.10.49-1_ar71xx.ipk.
Installing kmod-iptunnel (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-iptunnel_3.10.49-1_ar71xx.ipk.
Installing kmod-lib-crc32c (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-lib-crc32c_3.10.49-1_ar71xx.ipk.
Installing kmod-crypto-crc32c (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-crypto-crc32c_3.10.49-1_ar71xx.ipk.
Installing kmod-crypto-hash (3.10.49-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/base/kmod-crypto-hash_3.10.49-1_ar71xx.ipk.
Installing openvswitch-ipsec (2.3.0-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/openvswitch/openvswitch-ipsec_2.3.0-1_ar71xx.ipk.
Installing openvswitch-switch (2.3.0-1) to root...
Downloading http://rb-openwrt-test.mydns.jp/openwrt/r43011-ovs/trunk/ar71xx.mikrotik/packages/openvswitch/openvswitch-switch_2.3.0-1_ar71xx.ipk.
Configuring kmod-llc.
Configuring kmod-stp.
Configuring libpthread.
Configuring kmod-crypto-hash.
Configuring kmod-iptunnel.
Configuring kmod-gre.
Configuring libpcap.
Configuring zlib.
Configuring libopenssl.
Configuring librt.
Configuring kmod-crypto-crc32c.
Configuring kmod-lib-crc32c.
Configuring kmod-openvswitch.
Configuring openvswitch-common.
2014-11-02T05:58:18Z|00001|vlog|INFO|opened log file /var/log/ovsdb-server.log
2014-11-02T05:58:22Z|00001|vlog|INFO|opened log file /var/log/ovs-vswitchd.log
2014-11-02T05:58:22Z|00002|reconnect|INFO|unix:/var/run/db.sock: connecting...
2014-11-02T05:58:22Z|00003|reconnect|INFO|unix:/var/run/db.sock: connected
Configuring openvswitch-ipsec.
Configuring openvswitch-switch.

OpenWRT起動時、OpenvSwitch自動起動を有効にする。

root@OpenWrt:~# /etc/init.d/openvswitch enable

OpenWRTを再起動する。

root@OpenWrt:/# reboot

OpenvSwitch環境を確認する。

root@OpenWrt:~# lsmod|grep openvswitch
libcrc32c                599  1 openvswitch
openvswitch            64208  0 

root@OpenWrt:~# ovs-vsctl -V
ovs-vsctl (Open vSwitch) 2.3.0
Compiled Oct 25 2014 16:42:21
DB Schema 7.6.0

◆OpenWRTのネットワーク設定

現在のNICポート情報を確認する。

root@OpenWrt:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fd81:eb66:ce8d::1/60 Scope:Global
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:797 errors:0 dropped:0 overruns:0 frame:0
          TX packets:315 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:142753 (139.4 KiB)  TX bytes:57490 (56.1 KiB)

eth0      Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1936 errors:0 dropped:17 overruns:0 frame:0
          TX packets:1322 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:396757 (387.4 KiB)  TX bytes:190786 (186.3 KiB)
          Interrupt:4 

eth0.1    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:889 errors:0 dropped:0 overruns:0 frame:0
          TX packets:308 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:169810 (165.8 KiB)  TX bytes:56768 (55.4 KiB)

eth0.2    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.100.9  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          inet6 addr: 240b:11:53a0:400:d6ca:6dff:fe73:148b/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:976 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1008 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:178785 (174.5 KiB)  TX bytes:128222 (125.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

OpenWRTネットワーク設定内容を確認する。

root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd81:eb66:ce8d::/48'

config interface 'lan'
	option ifname 'eth0.1'
	option force_link '1'
	option type 'bridge'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config interface 'wan'
	option ifname 'eth0.2'
	option proto 'dhcp'

config interface 'wan6'
	option ifname 'eth0.2'
	option proto 'dhcpv6'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0t 2 3 4 5'

config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '0t 1'

OpenWRTネットワーク設定変更として、WAN側ポートには、以下のIPアドレスを設定する。

root@OpenWrt:~# vi /etc/config/network
――――

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

#### Port:1 ####
config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0t 1'

config interface 'wan'
	option ifname 'eth0.1'
	option proto 'static'
	option ipaddr '192.168.0.1'
	option netmask '255.255.255.0'

#### Port:2 ####
config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '0t 2'
	
config interface 'lan1'
	option ifname 'eth0.2'
	option proto 'static'


#### Port:3 ####
config switch_vlan
	option device 'switch0'
	option vlan '3'
	option ports '0t 3'
	
config interface 'lan2'
	option ifname 'eth0.3'
	option proto 'static'


#### Port:4 ####
config switch_vlan
	option device 'switch0'
	option vlan '4'
	option ports '0t 4'
	
config interface 'lan3'
	option ifname 'eth0.4'
	option proto 'static'


#### Port:5 ####
config switch_vlan
	option device 'switch0'
	option vlan '5'
	option ports '0t 5'
	
config interface 'lan4'
	option ifname 'eth0.5'
	option proto 'static'

――――

OpenWRTを再起動する。

root@OpenWrt:/# reboot

OpenWRTネットワーク設定後、現在のNICポート情報を確認する。

root@OpenWrt:~# ifconfig
eth0      Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:590 errors:0 dropped:6 overruns:0 frame:0
          TX packets:191 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:122929 (120.0 KiB)  TX bytes:28084 (27.4 KiB)
          Interrupt:4 

eth0.1    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:508 errors:0 dropped:0 overruns:0 frame:0
          TX packets:169 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:91250 (89.1 KiB)  TX bytes:25180 (24.5 KiB)

eth0.2    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:44 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:15710 (15.3 KiB)  TX bytes:408 (408.0 B)

eth0.3    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:408 (408.0 B)

eth0.4    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:408 (408.0 B)

eth0.5    Link encap:Ethernet  HWaddr D4:CA:6D:73:14:8B  
          inet6 addr: fe80::d6ca:6dff:fe73:148b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:408 (408.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1296 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1296 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:88128 (86.0 KiB)  TX bytes:88128 (86.0 KiB)

◆OpenvSwitchの各種設定

OpenFlowコントローラとの接続を想定したOpenvSwitch設定を行う。

root@OpenWrt:~# ovs-vsctl add-br br0
root@OpenWrt:~# ovs-vsctl add-port br0 eth0.2
root@OpenWrt:~# ovs-vsctl add-port br0 eth0.3
root@OpenWrt:~# ovs-vsctl set-controller br0 tcp:192.168.0.100:6633
root@OpenWrt:~# ovs-vsctl set bridge br0 other-config:datapath-id=0000000000000001
root@OpenWrt:~# ovs-vsctl set bridge br0 protocols=OpenFlow13

設定結果を確認しておく。

root@OpenWrt:~# ovs-vsctl show
ee6fb013-ddce-4af7-a3b5-c0bd4bef0d0e
    Bridge "br0"
        Controller "tcp:192.168.0.100:6633"
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth0.2"
            Interface "eth0.2"
        Port "eth0.3"
            Interface "eth0.3"

root@OpenWrt:~# ovs-ofctl dump-ports-desc br0 --protocols=OpenFlow13
OFPST_PORT_DESC reply (OF1.3) (xid=0x2):
 1(eth0.2): addr:d4:ca:6d:73:14:8b
     config:     0
     state:      0
     current:    1GB-FD AUTO_NEG
     advertised: 1GB-FD
     supported:  1GB-FD
     speed: 1000 Mbps now, 1000 Mbps max
 2(eth0.3): addr:d4:ca:6d:73:14:8b
     config:     0
     state:      0
     current:    1GB-FD AUTO_NEG
     advertised: 1GB-FD
     supported:  1GB-FD
     speed: 1000 Mbps now, 1000 Mbps max
 LOCAL(br0): addr:d4:ca:6d:73:14:8b
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max

以上で、OpenWRT上でのOpenvSwitch環境が構築できました。

留意事項

万一、OpenWRT化の作業中に、不測の事態に陥った場合には、必要に応じた切り戻しを実施しなければなりません。
1. initramfsの再転送によるOpenWRT再構築
もし、tftpサーバからのinitramfsダウンロードにより復旧できる見込みがある場合には、

  • RB750GLの1番ポートに差し替える
  • リセットボタンの長押ししながら、RB750GLを再起動する
  • initramfs転送開始される

2. NetInstallによるRouterOS再構築
initramfsの再転送によるOpenWRT再構築では復旧見込みがない場合、こちらが参考になると思います。←実際。試してませんが...

◆終わりに

Buffalo版と比べると、OpenWRTファームとOpenvSwitchパッケージの導入手順について、相当、簡略化が図られていると思います。
RouterBOARD他機種でのOpenFlow化の実績は不明です。現時点では、RB750GLのOpenFlow化は、いちばん魅力があると思います。