在TPLINK TL-WR1043ND上刷入OpenWRT配置OpenvSwitch使之变成OpenFlow路由器

前言

在经历了无数次重置,无数次失败后,终于成功的完成了标题所述内容。可能是我太渣,所以赶紧记录下来,以备后用。关于如何刷入,可以参考我之前的文章:

TP-LINK TL-WR1043ND 刷入 OpenWRT & OpenvSwitch & OpenFlow 1.3

每次重置要做的事

OpenWRT发展的越来越好,功能也很完善。刷入后能直接重置,就给你恢复如初了。每次重置后,需要做这么些事:

  1. 按住Reset按钮 >30s。(重置前的事,务必大于30秒)
  2. 用Xshell登陆OpenWRT。root@192.168.1.1
  3. 修改密码。passwd
  4. opkg update
  5. opkg install luci
  6. opkg install openvswitch

有时候可能会出现OpenvSwitch安装不了的情况。解决方案如前一篇文章所述。

  • 先刷入官方factory;
  • 再刷入自己编译的sysupgrade
  • 再刷入官方的sysupgrade

这个问题只在第一次重置时候遇到,之后就再没遇到过。

接下来就进入正题了。

划分VLAN

划分VLAN一直是我比较头大的一块。之前很多次失败都是败在了划分VLAN上面,因为很多次都是划分完VLAN路由器就进不去了。网上也没有找到一个合适的教程,各家有个家的说法。这次拿着WR1043ND,也是找了会儿教程,然后发现OpenWRT官方文档就很详细,就直接拿来参考了。OpenWRT官方文档真是给了我太大帮助。

插入一下端口记录,和VLAN配置相关,不能把WAN口,CPU口之类的搞错了。

  • 5是WAN口
  • CPU和6都是CPU口

更多参考 Switch Ports(for VLANs)。不同型号的路由器请自行寻找各自的文档。

OpenWRT的关于VLAN配置的官方文档:

TP-Link TL-WR1043ND Example: Add additional VLANs on v.2.x hardware

我是按照该文档给出的配置进行修改的。这里的config globals下的内容直接保留的原来的内容。给出我到这一步的/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 'fdc3:fa09:5f59::/48'

config interface 'lan'
    option type 'bridge'
    option force_link '1'
    option ifname 'eth1.11 eth1.12 eth1.13 eth1.14'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '60'

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

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

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

config switch_vlan
    option device 'switch0'
    option vlan '11'
    option name 'LAN1, eth1.11'
    option ports '0t 4'

config switch_vlan
    option device 'switch0'
    option vlan '12'
    option name 'LAN2, eth1.12'
    option ports '0t 3'

config switch_vlan
    option device 'switch0'
    option vlan '13'
    option name 'LAN3, eth1.13'
    option ports '0t 2'

config switch_vlan
    option device 'switch0'
    option vlan '14'
    option name 'LAN4, eth1.14'
    option ports '0t 1'

config switch_vlan
    option device 'switch0'
    option vlan '2'
    option ports '5 6'

config interface 'lan1'
    option proto 'static'
    option ifname 'eth1.11'

config interface 'lan2'
    option proto 'static'
    option ifname 'eth1.12'

config interface 'lan3'
    option proto 'static'
    option ifname 'eth1.13'

config interface 'lan4'
    option proto 'static'
    option ifname 'eth1.14'

以上内容只是给每个LAN口划分了一个VLAN,然后给每个VLAN分配了一个interface。例如,lan1对应的是vlan11,interface是eth1.11。一直到这一步,都不该出现路由器连不上的问题,如果出现了,那就是你配置错误了。

配置OpenvSwitch

配置好VLAN后,要开始配置OpenvSwitch了。

打开终端,连上你的路由器。

配置OVS网桥

#新建网桥
ovs-vsctl add-br ovs-lan

配置端口

#将端口加入OVS网桥
ovs-vsctl add-port ovs-lan eth1.11
ovs-vsctl add-port ovs-lan eth1.12
ovs-vsctl add-port ovs-lan eth1.13
ovs-vsctl add-port ovs-lan eth1.14

添加的时候可能会报错:

ovs-vsctl: Error detected while settipng up 'eth1.11'. See ovs-vswitchd log for details.

这是因为目前eth1.11同时被分配到了lan和lan1,暂时不用管,之后我们会将eth1.11从lan中移除。更多关于这个错误的信息可以参考 [ovs-discuss] ovs-vsctl:Error detected while setting up 'vn0'.Seeovs-vswitchd log for details.

查看一下端口是否添加成功:

ovs-vsctl show

如果成功,会显示如下信息:

root@OpenWrt:~# ovs-vsctl show
7b0019aa-8e05-4950-a558-fc57fc318447
    Bridge ovs-lan
        Port ovs-lan
            Interface ovs-lan
                type: internal
        Port "eth1.14"
            Interface "eth1.14"
        Port "eth1.11"
            Interface "eth1.11"
        Port "eth1.12"
            Interface "eth1.12"
        Port "eth1.13"
            Interface "eth1.13"

luci端操作

这一步比较关键,成败在此一举。直接从终端操作,可能会不好搞,一操作就路由器失联,陷入死循环。然而luci界面有一个比较好的功能,就是可以先save,最后一起apply,所以这一步我们在luci界面操作。

打开路由器管理界面,在Network -> Interface下面,如果上述步骤都没错,可以看到LAN1-LAN4,LAN,WAN,WAN6这几个interface。我们要操作的是LAN这个interface。点击LAN的edit。然后选择Physical Setting,把Interface下面的'VLAN Interface "eth1.11"(lan1,lan)'一直到eth1.14的勾都去掉,先点击下方的save。然后只勾上Ethernet Adapter "ovs-lan",再save一下。然后把Bridge interfaces后面creates a bridge over specified interface(s)前面的勾去掉,再save一下。完成上述步骤后,点击右上角的unsaved changes,然后全部save&apply

等待路由器自动配置完成,即可。至此也不该有任何问题。我重复了好几次,证明这个方法是可行的。

加入WiFi

有线的搞定了,下面搞一下无线的。

在终端打开无线的config文件:

vim /etc/config/wireless

注释掉option disabled 1这行,保存后,执行wifi启动wifi。

此时ifconfig一下能看到新增了wlan0,将wlan0也加入ovs-lan:

ovs-vsctl add-port ovs-lan wlan0

再次查看ovs-vsctl show,应该能看到wlan0成功加入了。

总结

这次折腾前前后后经历了大半年。网上的教程,只能说每个人都只有一部分可取,要把多方教程综合一下,才能得出最后的解决方案。在此特别感谢@世界的盡頭 和 @Phil 的博客,给了我很大帮助。至此OpenvSwitch on OpenWRT这一话题算是告一段落,接下来要回归根源,参考OpenFlow官方文档,把OpenvSwitch整个的文档都实践一遍。

下一步计划:

  • 实践整个OpenvSwitch命令
  • 挑选一个合适的控制器,熟悉控制器命令

参考资料

  • http://www.ztang.com/compile-openwrt-with-openflow-1-3-into-tp-link-tl-wr1043nd-v3.html
  • https://wiki.openwrt.org/toh/tp-link/tl-wr1043nd#exampleadd_additional_vlans_on_v2x_hardware
  • https://wiki.openwrt.org/toh/tp-link/tl-wr1043nd#switch_ports_for_vlans
  • http://openvswitch.org/pipermail/discuss/2015-April/017242.html
  • http://worldend.logdown.com/posts/257810-configure-open-vswitch-in-openwrt
  • http://blog.night9.cc/openvswitch-lab-7-setting-openwrt
未经允许不得转载:Zhiqing Tang » 在TPLINK TL-WR1043ND上刷入OpenWRT配置OpenvSwitch使之变成OpenFlow路由器