RouterBOARD (RB750GL)のOpenFlow化へのチャレンジ 〜OpenvSwitch構築手順メモ編〜
今回は、RouterBOARD (RB750GL)をOpenFlow化して、OpenFlow基本動作を確認するというチャレンジになります。
こちらが、OpenFlow化したRouterBOARD (RB750GL)です。さらに、OpenWRT化に対応したOpenvSwitch 2.3.0版パッケージを搭載しているので、ユーザランドではなく、カーネルモジュールとして、datapathが動作する点が特徴となります。
◆これまでの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化
本構築手順は、MacBook(Mac OS X)での作業を想定しております。
注) ここでの構築手順は、個人の構築メモとして掲載しております。
(RouterBOARD”RB750GL"が文鎮化してしまうなどの不測な事態が発生しても、あくまでも、自己責任でお願いします。)
こちらの記事がOpenWRT構築の参考にさせて頂きました。
- OpenWRT on Routerboard (Page 1) — General Discussion — OpenWrt
- [Pdf]router board openwrtインストール-20140811_ver5
1. RB750GL構成イメージ
RB750GLのOpenWRT化には、NICポートへのLANケーブルの抜き差しが多数発生しますので、参考までに、最終的にOpenWRT構築するRB750GL構成イメージを掲載しておきます。
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アドレス設定が行われなかったので、必要な諸設定を手作業で実施した。
- eth0.2の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化は、いちばん魅力があると思います。