SDN(五) Netgear R6220从刷机到配置 OpenvSwitch交换机

1 引言

积跬步以至千里,积怠情以至深渊,我要做一个踏实的ABCer。

本文将介绍在Netgear R6220路由器上进行基于OpenVswitch的openflow实验。路由器是刷了编译了OpenvSwitch的OpenWRT固件的,具体可参考刷机教程。本文主要以R6220为例介绍从刷机到配置 OpenvSwitch交换机的整个过程。

2 Netgear R6220刷机

  • 收到原厂Netgear R6220路由器后,用一根网线接上笔记本网口和路由器LAN口。
  • 打开浏览器,输入192.168.1.1,进入路由器原厂管理界面,设置好路由器的管理密码。
  • 在浏览器中输入网址http://192.168.1.1/setup.cgi?todo=debug,并回车,开启路由器的telnet功能。
  • Windows系统下打开本地命令提示符(其他系统也可以),输入telnet 192.168.1.1,终端登录路由器,用户名为admin,密码为上边设置的。
  • 进入后,将带有编译好的固件(编译了OpenVSwitch的OpenWRT固件,可以到我的云盘中提取,链接:https://pan.baidu.com/s/1Y3tq0nsxfi5_wX7FO4xXCw ,提取码:ew7d)的U盘插入路由器USB口。
  • 而后,进入…/ramips/mt7621,开始刷入固件,操作步骤如下截图所示。
    在这里插入图片描述
    NT:一定要先刷kernel,再刷rootfs。同时在刷固件过程中一定不要插拔网线,否则变砖!!
  • 刷完固件重启路由器,耐心等待重新获取得到网卡信息,首先重新以网页方式登录路由器新固件OpenWRT的管理界面(方法为在网页中输入192.168.1.1),进入网页后,只设置密码而不做其他多余操作(例如进入网络接口界面,因为一旦进入就会默认生成一次配置,会与之后的终端配置造成冲突),否则影响最终的配置,导致路由器变砖。
  • 紧接着,ssh进入OprnWRT系统,用户名为root,密码为上一步设置的密码。
  • 进入/etc/config下配置network文件和wireless文件,文件的配置需要根据物理设备的网卡信息进行正确配置,因此首先摸清Netgear R6220的网络配置信息尤为关键,否则将导致路由器变砖,或者无法配置好网桥信息。以下部分,第3节主要介绍物理设备网络信息,第4节主要介绍具体的network文件和wireless文件配置,第5节主要介绍针对第4节的配置信息进行的网桥搭建过程。
    NT:刷机变砖请参考本人博客Netgear救砖教程

3 Netgear R6220网络配置信息介绍

在这里插入图片描述
在这里插入图片描述

4 Netgear R6220路由器的网络文件配置

4.1 network文件配置

关于配置文件中的配置代码对应功能介绍,请参考本人博客SDN(二),本人对于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 'fd22:7199:e878::/48'

# 划分lan口
config interface 'lan'  # 将LAN1配置成内网地址
        option type 'bridge'
        option ifname 'eth0.3'
        option proto 'static'
        option ipaddr '192.168.3.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config device 'lan_dev'
        option name 'eth0.3'
        option macaddr '8c:3b:ad:e4:5a:b1'

config interface 'wan_controller'  # wan口配置成控制器地址,该IP地址为运行控制器的主机的网关IP地址
        option ifname 'eth0.4'
        option proto 'static'
        option ipaddr '10.12.34.248'  # 必须与LAN口在不同网段
        option netmask '255.255.255.0'

config device 'wan_dev'
        option name 'eth0.4'
        option macaddr '8c:3b:ad:e4:5a:b0'

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

config interface 'lan2'   # 其余LAN口不分配IP地址,作为openflow端口,供OpenVswitch中网桥的端口映射
        option ifname 'eth0.2'
        option proto 'static'

config interface 'lan3'
        option ifname 'eth0.1'
        option proto 'static'

config interface 'lan4'                   
        option ifname 'eth0.0'            
        option proto 'static'             
                                          
config switch  # swith,用于R6220的四个LAN口的IP映射           
        option name 'switch0'             
        option reset '1'                  
        option enable_vlan '1'            
                                          
config switch_vlan  # 划分vlan                        
        option device 'switch0'           
        option vlan '0'                   
        option ports '0 6t'               
                                          
config switch_vlan                    
        option device 'switch0'
        option vlan '1'            
        option ports '1 6t'           
                                          
config switch_vlan             
        option device 'switch0'
        option vlan '2'                   
        option ports '2 6t'    
                               
config switch_vlan             
        option device 'switch0'
        option vlan '3'        
        option ports '3 6t'    
                               
config switch_vlan             
        option device 'switch0'
        option vlan '4'        
        option ports '4 6t'

配置完成后,输入/etc/init.d/network restart进行网络重启。

4.2 wireless文件配置

在配置好network后,可参照如下代码进行无线设置(也可以进入网页,直接针对无线进行可视化配置),关于Neatgear中的wireless文件本人配置如下,此时无线和LAN1分配在了同一个网段,因此wifi连接路由器也可以进入内网配置。

config wifi-device 'radio0'
        option type 'mac80211'
        option channel '11'
        option hwmode '11g'
        option path 'pci0000:00/0000:00:01.0/0000:02:00.0'
        option htmode 'HT20'
        option country '00'
        option legacy_rates '1'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'  # 当要将wlan0配置成无线接口时,不需要分配网段
        option mode 'ap'
        option encryption 'none'
        option ssid 'OpenWrt2_0'
        option ifname wlan0  # 这个wifi接口名称的设置相当重要,需要作为ovs中网桥设置的接口

config wifi-device 'radio1'
        option type 'mac80211'
        option channel '36'
        option hwmode '11a'
        option path 'pci0000:00/0000:00:00.0/0000:01:00.0'
        option htmode 'VHT80'
        option country '00'
        option legacy_rates '1'

config wifi-iface 'default_radio1'
        option device 'radio1'
        option mode 'ap'
        option encryption 'none'
        option ssid 'OpenWrt2_1'
        option ifname wlan1  # 这个wifi接口名称的设置相当重要,需要作为ovs中网桥设置的接口

配置完成后,再次输入/etc/init.d/network restart进行网络重启。

5 Netgear R6220中OpenVswitch的网桥创建及配置

针对network中的配置,网桥的对应配置如下:

ovs-vsctl add-br br0  # 创建网桥
ovs-vsctl set-fail-mode br0 secure|standalone # 网桥默认模式为standlone,这里将其设置成secure模式
# standlone: 若OVS交换机超过3次无法正常连接到OpenFlow控制器,OVS交换机会自己负责建立流表,与常见的L2交换机类似进行工作。一旦网络连接恢复,OVS会再次切换到使用控制器进行流表管理;
# secure: 在该模式下,若OVS无法正常连接到OPenFlow控制器,OVS会不停的尝试与控制器重新建立连接,而不会自己负责建立流表。
ovs-vsctl add-port br0 eth0.0 -- set Interface eth0.0 ofport_request=4  # 添加端口,并固定端口编号为4,否则每次随机生成。
ovs-vsctl add-port br0 eth0.1 -- set Interface eth0.1 ofport_request=3  # 由于eth0.3已配置成OpenWRT内网接入地址,因此无法添加eth0.3
ovs-vsctl add-port br0 eth0.2 -- set Interface eth0.2 ofport_request=2
ovs-vsctl add-port br0 wlan0 -- set Interface wlan0 ofport_request=5   #添加2.4G频段无线接口
ovs-vsctl add-port br0 wlan1 -- set Interface wlan1 ofport_request=6  #添加5.0G频段无线接口
ovs-vsctl set-controller br0 tcp:10.12.34.180:6653 tcp:10.12.34.180:6654 #  添加多控制器,该IP地址为运行控制器的主机的IP地址

在对网桥进行以上配置后,为运行控制器的主机添加对应网络配置(IP为10.0.30.1/24,网关为10.0.30.254),并运行控制器代码。Netgear R6220路由器即可连接上该控制器。

此外,其他关于网桥的相关操作如下:

ovs-vsctl show  # 查看网桥状态

ovs-vsctl del-br br0  # 删除网桥
# datapath类型分为netdev和system两种类型
# netdev类型:dpdk用户态数据通过;system类型:对应linux内核数据通路
# 
ovs-vsctl set bridge br0 datapath_type=netdev  # 设置datapath类型
ovs-vsctl get bridge br0 datapath_type  # 查看datapath type
ovs-vsctl set bridge br0 other_config:datapath-id=新dpid  # 修改交换机dpid
ovs-vsctl get bridge br0 datapath-id  # 查看datapath id

ovs-vsctl del-controller br0 # 删除控制器
ovs-vsctl set-controller br0 tcp:1.2.3.4:6633 # 设置single controller
# 查询 Controller 设定,如果有成功连到 controller 则会显示 is_connected:true, 反之未连上
ovs-vsctl list controller  # 查看控制器列表
ovs-vsctl del-fail-mode br0  # 移除fail-mode
ovs-vsctl get-fail-mode br0  # 查询fail-mode

# in-band模式下,控制器与OVS交换机连接的网口既可以有控制流量,又可以有数据流量。
# out-of-band模式下,控制器与OVS交换机连接的网口只有控制流量。
# OpenvSwitch不仅仅是一个OpenFlow Switch,它的流表组成除了of流表外,还有其他一些(隐藏)流表。这些隐藏流表默认交换机和控制器在同一网络中(in-band),因此要保证两者互通,要关闭默认的inband。
ovs-vsctl get controller br0 connection-mode  # 查询连接模式
ovs-vsctl set controller br0 connection-mode=out-of-band  # 设置br0连接模式为out-of-band
ovs-vsctl set controller br0 connection-mode=in-band  # 设置br0连接模式为in-band

ovs-vsctl list-br  # 查看有哪些桥
ovs-vsctl list bridge br0  # 查看网桥的配置信息
ovs-vsctl list-ports br0  # 查看桥中有哪些ports
ovs-vsctl list port br0 eth0.0  # 查看网桥段端口配置信息

# stp协议:防止网桥网络中的冗余链路形成环路工作
ovs-vsctl get bridge br0 stp_enable  # 查看ovs交换机是否开启stp协议
ovs-vsctl set bridge br0 stp_enable=true  # 设置交换机开启stp协议

ovs-vsctl get Interface eth0.0 ofport  # 获取网络接口的OpenFlow编号
ovs-vsctl set Interface eth0 type=internal  # 设置 port 为 internal

# 设置可选项
ovs-vsctl set Interface eth0.0 options:link_speed=1G
ovs-vsctl remove Interface eth0.0 options link_speed

# 设置fail模式,支持standalone或者secure
ovs-vsctl del-fail-mode br0
ovs-vsctl set-fail-mode br0 secure
ovs-vsctl get-fail-mode br0

# 关于OpenFlow version
ovs-vsctl set bridge br0 protocols=OpenFlow12,OpenFlow13
ovs-vsctl clear bridge br0 protocols

ovs-ofctl dump-flows br0  # 查看网桥流表信息
ovs-ofctl del-flows br0  # 删除网桥流表
ovs-ofctl show br0   # 查看网桥各端口流表状态信息
vs-vsctl get Interface br0 ofport  # 获得br0网络接口的OpenFlow编号  

OpenVSwitch中常见的port类型介绍:

  1. netdev: 通用网卡设备包括物理网卡以及虚拟网卡
    接收:网卡收到报文后回直接通过OpenvSwitch接收函数处理,不会再走传统内核协议栈;
    发送:OpenvSwitch中的一条flow指定从网卡port发出时通过该网卡设备发送。

  2. internal: OpenvSwitch创建的一种虚拟网卡设备
    接收:OpenvSwitch所在主机通过internal设备网卡发送的报文(协议栈路由查找通过internal设备发送),就进入OpenvSwitch接收处理函数.。报文送入OpenvSwitch处理;
    发送:OpenvSwitch中的一条flow指定从internal port发出时,该报文被重新注入内核协议栈, 标记为从internal网卡接收。

  3. gre device: L2 gre tunnel设备
    接收:协议栈收到gre报文后,传递给L4层解析gre header, 然后传递给OpenvSwitch接收处理函数;
    发送:OpenvSwitch中的一条flow指定从gre设备发送, 报文会根据flow规则加上gre header和ip header,查找路由发送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章