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,查找路由發送

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