一、网络中只有1台OpenFlow路由器的情况
首先,如果要将刷入路由器的OpenWRT系统带有OpenFlow功能,将OpenFlow功能加入OpenWRT的方法网上教程很多,SDNlab上也有教程。
刚刷好的OpenWRT路由器默认开启了telnet,没有开启ssh,先用telnet登陆192.168.1.1,设置ssh的密码。
(1)打开cmd,输用telnet 192.168.1.1。
(2)输入passwd。
(3)输入要设置的密码。
(4)重复要设置的密码。
用ssh登陆OpenWRT路由器,用户名root,密码为刚才设置的。OpenWRT的根目录如下:
于在之后开启OpenFlow功能时需要运行/etc/functions.sh文件,但是/etc下没有该文件,所以要将/lib/functions.sh复制到/etc下。
输入cp /lib/functions.sh /etc
接下来需要配置两个文件,分别为/etc/config/network和/etc/config/openflow(若需要用OpenFlow管理无线网络的话,还需要配置/etc/config/wireless,方法类似,本文暂且不做讨论)。/etc/config/network文件是网络的相关配置,配置好/etc/config/network之后需要在/etc/config/openflow中做一些与之相应的OpenFlow配置。在进行配置之前,我们须先把这两个文件看懂,具体如下。
笔者的/etc/config/network文件内容是这样的:
其中有8部分内容,如图中编号所示。与本文相关的是3、4、7、8这四部分,如下图:
首先来看7和8,这两部分的意思是创建两个vlan。7中option vlan‘1’和option ports ‘1 2 3 4 6t’这两句,是说创建的vlan编号为1,路由器的端口1、2、3、4以及路由器的cpu在这个vlan中;8中option vlan‘2’和option ports ‘0 6t’这两句,是说创建的vlan编号为2,路由器的端口0以及路由器的cpu在这个vlan中。其中6t代表路由器的cpu。至于0、1、2、3、4、5分别指路由器的哪个端口,可以用浏览器进入192.168.1.1,用户名为root,密码为刚才设置的密码,选择network->switch,然后插拔路由器的各个端口,即可在页面中观查到每个端口对应的编号。
现在来看3和4,在这两部分中配置了vlan1和vlan2的属性。3中的option ifname‘eth0.1’即是说,3这一部分配置的是vlan1的属性,同理4中的option ifname‘eth0.2’是说4这一部分配置的是vlan2的属性,依次类推,eth0.X即为vlanX。这里的配置是让vlan1中的端口做内网口,vlan2中的端口做外网口。
接下来是/etc/config/openflow,这个文件就相对简单得多了,如图:
本文我们用的到的是dpid,ofports和ofctl这三个配置。dpid就是一个编号,在网络中只有一个openflow路由器时不用修改;ofports即是需要用openflow功能管理的vlan;ofctl是SDN控制器的相关信息。
看懂了以上这些内容之后我们就可以自己做配置了。大体的思想是,创建3个vlan,vlan1作为控制层,vlan2连接外网,vlan3作转发层,其中控制器在vlan1,控制器通过路由器的OpenFlow功能管理vlan2和vlan3。
经过配置,我把我的/etc/config/network修改为下面这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' configglobals 'globals' option ula_prefix 'fd51:faa9:ddd6::/48' config interface 'lan' option ifname 'eth0.1' option force_link '1' option macaddr 'f0:99:78:a7:37:f5' 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 force_link '1' option macaddr 'f0:99:78:a7:37:f6' option proto 'dhcp' config interface 'opf' option ifname 'eth0.3' option proto 'static' config interface 'wan6' option ifname 'eth0.2' option proto 'dhcpv6' config switch option name 'switch0' option reset '1' option enable_vlan '1' configswitch_vlan option device 'switch0' option vlan '1' option ports '1 6t' configswitch_vlan option device 'switch0' option vlan '2' option ports '0 6t' configswitch_vlan option device 'switch0' option vlan '3' option ports '2 3 4 6t' |
将我的/etc/config/openflow修改为这样,其中控制器在192.168.1.136的6633端口:
1 2 3 4 5 6 |
config 'ofswitch' option 'dp' 'dp0' option 'dpid' '000000000001' option 'ofports' 'eth0.2 eth0.3' option 'ofctl' 'tcp:192.168.1.136:6633' option 'mode' 'outofband' |
与以上配置相匹配,控制器接在路由器的1口(vlan1),外网接在路由器的0口(vlan2),其它计算机接在路由器的2、3、4口(vlan3)。
做好以上配置之后在路由器的终端中运行/etc/init.d/network restart使上述配置生效。运行这条指令后,/etc/config/network的配置已生效,这时vlan3中的电脑与192.168.1.1的ssh连接会断掉,但是OpenFlow功能还没有开启。
因为192.168.1.1在vlan1,所以vlan3中的电脑无法通过192.168.1.1连接路由器,于是我们在vlan1中的电脑上用ssh连接192.168.1.1来开启OpenFlow功能,在路由器的终端执行/etc/init.d/openflow start以开启openflow功能。
开启路由器的OpenFlow功能后vlan3中的电脑即可正常上网。在路由器的终端中执行/etc/init.d/openflow stop可以关闭OpenFlow功能,若关闭路由器的OpenFlow功能,则vlan3中的电脑不能上网,vlan1中的电脑不受影响。OpenDayLight控制器中显示如下:
二、网络中有2台OpenFlow路由器的情况
要使用OpenFlow功能管理两台路由器,需要为每台路由器划分出外网vlan、控制vlan和数据转发vlan。两台路由器的数据转发vlan相互连接,作为数据转发层;两台路由器的控制vlan相互连接,作为控制层。控制器要连接到控制层上。
2.1 两台路由器的具体配置
r1:
- r1的0口在外网vlan,使用OpenFlow服务管理该vlan;
- r1的1口和2口在控制vlan,不使用OpenFlow服务管理该vlan;
- r1的3口和4口在数据转发vlan,使用OpenFlow服务管理该vlan。
r2:
- r2的0口在外网vlan,使用OpenFlow服务管理该vlan;
- r2的1口在控制vlan,不使用OpenFlow服务管理该vlan;
- r2的2口、3口和4口在数据转发vlan,使用OpenFlow服务管理该vlan。
r1的/etc/config/network文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' configglobals 'globals' option ula_prefix 'fd2d:251a:c3c7::/48' config interface 'lan' option ifname 'eth0.1' option force_link '1' option macaddr 'f0:99:78:a7:37:f5' 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 force_link '1' option macaddr 'f0:99:78:a7:37:f6' option proto 'dhcp' config interface 'wan6' option ifname 'eth0.2' option proto 'dhcpv6' config interface 'opf' option ifname 'eth0.3' option proto 'static' config switch option name 'switch0' option reset '1' option enable_vlan '1' configswitch_vlan option device 'switch0' option vlan '1' option ports '1 2 6t' configswitch_vlan option device 'switch0' option vlan '2' option ports '0 6t' configswitch_vlan option device 'switch0' option vlan '3' option ports '3 4 6t' |
r1的/etc/config/openflow文件如下:
1 2 3 4 5 6 |
config 'ofswitch' option 'dp' 'dp0' option 'dpid' '000000000001' option 'ofports' 'eth0.3 eth0.2' option 'ofctl' 'tcp:192.168.1.136:6633' option 'mode' 'outofband' |
r2的/etc/config/network文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' configglobals 'globals' option ula_prefix 'fda6:b23e:d779::/48' config interface 'lan' option ifname 'eth0.1' option force_link '1' option macaddr '8a:6b:67:00:34:04' option type 'bridge' option proto 'static' option ipaddr '192.168.1.2' option netmask '255.255.255.0' option ip6assign '60' config interface 'opf' option ifname 'eth0.3' option proto 'static' config interface 'wan' option ifname 'eth0.2' option force_link '1' option macaddr '8a:6b:67:00:34:05' 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' configswitch_vlan option device 'switch0' option vlan '1' option ports '1 6t' configswitch_vlan option device 'switch0' option vlan '2' option ports '0 6t' configswitch_vlan option device 'switch0' option vlan '3' option ports '2 3 4 6t' |
r2的/etc/config/openflow文件如下:
注意:r1和r2的dpid不能相同,否则连接不上控制器。
1 2 3 4 5 6 |
config 'ofswitch' option 'dp' 'dp0' option 'dpid' '000000000002' option 'ofports' 'eth0.2 eth0.3' option 'ofctl' 'tcp:192.168.1.136:6633' option 'mode' 'outofband' |
网线的连接如下:
- r1的0口连外网;
- r1的1口连控制器;
- r1的2口连r2的1口;
- r1的3口连r2的0口(这条线是为了让r2获取ip地址,如果r2没有ip地址,则数所转发层中的电脑无法上外网);
- r1的4口连r2的2口;
- r2的3口连电脑;
- r2的4口连电脑;
完成上述配置及网线的连接后,在两台路由器上均开启OpenFlow服务,则数据转发层中的电脑可以连接外网,控制器的页面显示如下:
作者简介:
福州大学,数学与计算机科学学院,张为凡,硕士研究生
福州大学,数学与计算机科学学院,彭建云,硕士研究生
福州大学,数学与计算机科学学院,刘宇欣,硕士研究生
福州大学,数学与计算机科学学院,高仁贵,硕士研究生
福州大学,数学与计算机科学学院,何斌杰,硕士研究生
福州大学,数学与计算机科学学院,张栋,副教授。