Open VSwitch in OpenWrt

在这一篇博客中,我将详细介绍如何在OpenWrt系统中搭建Open VSwitch,从而让AP适用于SDN系统。

AP有“瘦AP”(Fit AP)和“胖AP”(Fat AP)之分,Fat AP是与Fit AP相对来讲的,Fat AP将WLAN的物理层、用户数据加密认证、QoS、网络管理、漫游技术以及其他应用层的功能集于一身。Fat AP无线网络解决方案可由由Fat AP直接在有线网的基础上构成,设备结构复杂,且难于集中管理,比较常用于家庭无线接入,即所谓的“无线路由器”。Fit AP是一个只有加密、射频功能的AP,功能单一,不能独立工作。整个Fit AP无线网络解决方案由无线控制器和Fit AP在有线网的基础上构成。Fit AP上“零配置”,所有配置都集中到无线控制器上。这也促成了Fit AP解决方案更加便于集中管理,并由此具有三层漫游、基于用户下发权限等Fat AP不具备的功能。

本文的解决方案为Fat AP的SDN适配方案,解决思路为Fat AP + Openwrt + OVS。我将介绍三种在Openwrt下安装OVS的方法。

Install OpenVSwitch in OpenWrt

方法一 编译一个带Open VSwitch版本的OpenWrt固件

这种方法是在Linux系统下直接编译一个带有Open VSwitch的固件,并将固件刷入AP中。

此方法操作步骤简单,但容易出错,编译过程常伴随各种未知错误。本人尝试过多次,编译过多种版本下的固件,失败多过成功。但这种方法还是推荐大家学习,方便日后进一步学习扩展。

  • 升级软件安装包,安装编译时需要的组件。

    1
    2
    sudo apt-get update
    sudo apt-get install gccg++binutilspatchbzip2flexbison make autoconf gettext texinfo unzip sharutils subversion libncurses5-devncurses-term zlib1g-dev subversion git gawk asciidoc libz-dev
  • 获取OpenWrt源码并添加OVS

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    git clone git://git.openwrt.org/openwrt.git #获取Openwrt源码
    cd openwrt
    ./scripts/feeds update –a #更新最新代码
    ./scripts/feeds install –a #安装最新组件
    svn up #更新版本号
    #添加openwrt代码连接
    echo 'src-git openvswitch git://github.com/pichuang/openvwrt.git' >> feeds.conf
    #或者(建立代码连接)
    echo 'src-git openvswitch git://github.com/ttsubo/openvswitch.git' >> feeds.conf

    ./scripts/feeds update openvswitch
    ./scripts/feeds install -a -p openvswitch
  • 编译固件

    1
    make menuconfig
    • 1 选择CPU型号(根据AP硬件选择,可参见openwrt的wiki页面)

      1
      Target System—–Atheros AR71xx/AR7240/AR913x/AR934x
    • 2 选择路由型号(根据路由器型号选择)

      1
      TargetProfile—-xxxx
    • 3 添加 Luci 及相关组件(语言包+DNNS)

      1
      2
      3
      LuCI—>Collections—–<*> luci
      LuCI—>Translations—-<*> luci-i18n-chinese
      LuCI—>Applications —> <*>luci-app-ddns.
    • 4 添加UTF8编码

      1
      Kernel modules —> Native Language Support —> <*> kmod-nls-utf8
    • 5 添加复位键支持

      1
      Utilities —> <*> restorefactory
    • 6 添加 openvswitch

      1
      Network -> openvswitch-switch, openvswitch-switch, openvswitch-ipsec (Optional)
    • 7 save

      1
      make V=99

固件编译成功后将在 target 文件夹中找到 .bin 文件,然后将镜像文件刷进系统,就得到了一个有Open VSwitch的AP。

方法二 通过opkg安装Open Vswitch

这种方法是利用Openwrt系统本身的opkg(Open PacKaGe management)管理器直接从互联网下载OVS的安装文件和相关依赖。

此方法有个前提是必须保证AP本身可以上网。

####AP连入互联网

Openwrt系统的官方固件中的WAN是默认DPCH上网的,最简单的上网方式是连接到上级网络的路由器:用网线连接此AP的WAN口和可上网的路由器的LAN口。这样Openwrt可以直接通过DPCH方式上网,不需要任何配置。

如果没有一个正常上网的路由器,AP联网的方式和其他商用路由器类似。首先将AP的WAN口连接到墙上的网口,打开luci界面:192.168.1.1,选择接口(interfaces),编辑WAN,然后按照运营商的上网方式设置相对的上网协议,输入账号密码等。

安装步骤

  • 打开SecureCRT用SSH协议连接到Openwrt(ip地址:192.168.1.1,具体方式可参见上一篇博客)。

  • 更新安装包并安装

    1
    2
    3
    opkg update -a
    opkg install kmod-openvswitch
    opkg install openvswitch

我在使用这个方法安装时,一直出现无法连接到官方下载网站的问题。无法完成更新,也无法安装。

方法三 使用ipk安装包安装

第三种方法是我自己发现的方法,优点是简单而且不容易出错,但缺点就是太麻烦。如果走投无路了,也可以尝试一下这个方法。

此方法就是在Openwrt的软件库上下载相对应的安装包,放入Openwrt的 /tmp/文件夹内,利用opkg install命令安装。

  • 在openwrt的archive网站找到对应的Openwrt固件版本

    attitude_adjustment v12.09

    backfire v10.03 / v10.03.1

    barrier_breaker v14.07

    chaos_calmer v15.05 / v15.05.1

    releases v17.01.0 - v17.01.4

    snapshots trunk

  • 进入分类和版本内,选择相应文件系统,普遍是ar71xx

  • 选择 genetic/文件夹

  • 选择Supplementary Files中的packages

  • packages文件夹中有六个文件夹,所有的ipk文件都在这六个文件夹中。

    ​ base/ Openwrt系统工具(大部分工具安装包可在其中找到)

    ​ luci/ luci相关

    ​ management/ 管理包(不常用)

    ​ packages/ 工具和其他依赖文件

    ​ routing/ 不常用

    ​ telephony/ 不常用

    大部分的基础工具都可以在 base/ 文件夹中找到,所需的依赖文件可在 packages/ 中找到。

  • packages/文件夹中,用ctrl+F搜索 openvswitch ,下载以下ipk文件:

    ​ openvswitch_xx.xx.xx (xx是版本号)

    ​ openvswitch-benchmark_xx.xx.xx

    ​ kmod_openvswitch_xx.xx.xx

  • 打开SecureCRT软件和WinSCP软件,连接到AP。

  • WinSCP将ipk文件导入到 Openwrt 系统的 /tmp/ 文件夹下。

  • SecureCRT中输入

    1
    2
    cd /tmp/
    opkg install openvswitch_xx.xx.xx.ipk #正确文件名
  • 安装一定会失败,并提示缺少以下依赖,此时,在archive文件夹中根据错误提示逐个寻找依赖的ipk文件包,用同样的方式进行安装。

  • 安装完所有缺省再次安装openvswitch的ipk。

  • 安装ovs时,如果出现内核版本不对的错误提示,但又确实是安装了同一个CPU版本下的ovs包,可以尝试强制安装,如果安装之后可以使用ovs,就没有问题。

    1
    opkg --force-depends install openvswitch_xx.xx.xx.ipk

这个方法确实非常麻烦,但是成功率很高,同时也适用于安装其他类型的工具包,所以比较推荐。


以上是我总结的三种在openwrt上安装openvswitch的方法,下一篇我讲继续介绍ovs的相关配置和使用。