基于ONOS的SDN-IP實(shí)驗(yàn)篇
本文主要是提供了有關(guān)ONOS的SDN-IP實(shí)例如何安裝、配置及在SDN網(wǎng)絡(luò)中如何運(yùn)行SDN-IP的操作,通過實(shí)踐了解并實(shí)現(xiàn)SDN網(wǎng)絡(luò)與外部網(wǎng)絡(luò)無(wú)縫對(duì)接融合。
1 網(wǎng)絡(luò)模型
SDN-IP允許SDN網(wǎng)絡(luò)與使用BGP路由協(xié)議相鄰的外部網(wǎng)絡(luò)對(duì)等和交換流量。下圖顯示了SDN-IP網(wǎng)絡(luò)模型中的各種元素。
2 BGP對(duì)等拓?fù)鋵?shí)例
對(duì)于如何設(shè)置BGP拓?fù)錄]有嚴(yán)格的要求,只要每個(gè)SDN-IP實(shí)例能夠接收通過iBGP發(fā)布的SDN網(wǎng)絡(luò)的所有路由就可以了。下圖顯示了一個(gè)BGP配置實(shí)例:
上圖網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)和線顯示了BGP對(duì)等會(huì)話。黑線是內(nèi)部BGP Speaker和外部BGP路由器之間建立的eBGP會(huì)話,紅線是BGP Speaker和SDN-IP實(shí)例之間的iBGP會(huì)話。
每個(gè)外部BGP路由器于一個(gè)或多個(gè)內(nèi)部BGP Speaker對(duì)等。 SDN-IP目前不支持外部多跳BGP對(duì)等會(huì)話,所以每個(gè)對(duì)等會(huì)話必須在同一個(gè)子網(wǎng)中。不同的對(duì)等會(huì)話可以在不同的子網(wǎng)中,所以為了對(duì)接外部路由器,在SDN網(wǎng)絡(luò)中需要為每個(gè)對(duì)等會(huì)話分配IP地址。在SDN網(wǎng)絡(luò)中的IP地址被分配給BGP Speaker。它不要求每個(gè)內(nèi)部BGP Speaker對(duì)應(yīng)外部每個(gè)路由器,因?yàn)锽GP Speaker在他們之間使用iBGP重新分配路由。然而,對(duì)于完全冗余的對(duì)接外部網(wǎng)絡(luò),外部peer應(yīng)該有多個(gè)內(nèi)部BGP Speaker對(duì)等會(huì)話。上圖可以看出, BGPRouter1與每個(gè)內(nèi)部BGP Speaker進(jìn)行對(duì)等會(huì)話。
網(wǎng)絡(luò)內(nèi)的BGP Speaker使用iBGP與SDN-IP實(shí)例進(jìn)行對(duì)等會(huì)話。SDN-IP是一個(gè)被動(dòng)的iBGP peer:它監(jiān)聽BGP是否更新,但它不通知其自身的更新。在網(wǎng)絡(luò)內(nèi)的iBGP對(duì)等會(huì)話可以設(shè)置成多種方式,最簡(jiǎn)單的方法是在BGP Speaker和SDN-IP實(shí)例之間進(jìn)行全網(wǎng)的iBGP對(duì)等會(huì)話,如上圖紅色線iBGP所示,通過這種方式,網(wǎng)絡(luò)中所有BGP節(jié)點(diǎn)都可以學(xué)習(xí)所有的路由。兩個(gè)SDN-IP實(shí)例之間的iBGP會(huì)話是沒有必要的,因?yàn)樵赟DN-IP實(shí)例中不上報(bào)自己的路由。各種不同的iBGP拓?fù)浣Y(jié)構(gòu)如下圖所示:
3 SDN-IP配置
SDN-IP目前采用的是簡(jiǎn)單的JSON文件格式導(dǎo)入配置數(shù)據(jù),主要有兩個(gè)單獨(dú)的文件:用來(lái)存儲(chǔ)IP和MAC地址的addresses.json和存儲(chǔ)BGP對(duì)等會(huì)話數(shù)據(jù)的sdnip.json。
網(wǎng)絡(luò)文件配置:
配置文件需要放置在config目錄下。手動(dòng)部署ONOS和SDN-IP,需要把配置文件復(fù)制在每個(gè)實(shí)例的config目錄下,目錄在KARAF_ROOT/../config,路徑目前還沒有配置。使用ONOS單元機(jī)制部署一個(gè)ONOS群集時(shí),該配置文件可以放在ONOS_ROOT/tools/package/config目錄下,可以在管理節(jié)點(diǎn)上部署,當(dāng)集群部署時(shí)他們將自動(dòng)被復(fù)制到在單元實(shí)例中的正確位置。
#p#
3.1 Addresses配置
Addresses.json配置的ONOS地址用來(lái)與外部網(wǎng)絡(luò)通信,主要是為了給proxy ARP使用,proxy ARP知道怎樣響應(yīng)來(lái)自外部網(wǎng)絡(luò)的ARP請(qǐng)求。如下所示:
{ "addresses" : [ { "dpid" : "00:00:00:00:00:00:00:a1", "port" : "1", "ips" : ["10.0.1.101/24"], "mac" : "00:00:00:00:00:01" }, { "dpid" : "00:00:00:00:00:00:00:a2", "port" : "1", "ips" : ["10.0.2.101/24"], "mac" : "00:00:00:00:00:01" }, { "dpid" : "00:00:00:00:00:00:00:a5", "port" : "1", "ips" : ["10.0.3.101/24"], "mac" : "00:00:00:00:00:01" }, { "dpid" : "00:00:00:00:00:00:00:a6", "port" : "1", "ips" : ["10.0.4.101/24"], "mac" : "00:00:00:00:00:01" } ] }
文件中包含多個(gè)地址項(xiàng)的數(shù)組,每個(gè)地址項(xiàng)描述了交換機(jī)端口綁定的一系列地址,每個(gè)項(xiàng)包含綁定的交換機(jī)端口(通過DPID和端口號(hào)指定)、一系列的IP地址綁定到端口、一個(gè)單獨(dú)的MAC地址被用來(lái)每個(gè)IP地址的ARP響應(yīng)。SDN-IP運(yùn)行時(shí),被SDN網(wǎng)絡(luò)用來(lái)對(duì)等外部BGP路由器的每個(gè)地址需要配置到addresses.json文件中。
3.2 BGP配置
sdnip.json文件包含BGP對(duì)等會(huì)話的詳細(xì)信息,也包含內(nèi)部BGP Speaker 和外部BGP peers之間的連通性。
{ "bgpPeers" : [ { "attachmentDpid" : "00:00:00:00:00:00:00:a1", "attachmentPort" : "1", "ipAddress" : "10.0.1.1" }, { "attachmentDpid" : "00:00:00:00:00:00:00:a2", "attachmentPort" : "1", "ipAddress" : "10.0.2.1" }, { "attachmentDpid" : "00:00:00:00:00:00:00:a5", "attachmentPort" : "1", "ipAddress" : "10.0.3.1" }, { "attachmentDpid" : "00:00:00:00:00:00:00:a6", "attachmentPort" : "1", "ipAddress" : "10.0.4.1" } ], "bgpSpeakers" : [ { "name" : "bgp", "attachmentDpid" : "00:00:00:00:00:00:00:a3", "attachmentPort" : "1", "macAddress" : "00:00:00:00:00:01", "interfaceAddresses" : [ { "interfaceDpid" : "00:00:00:00:00:00:00:a1", "interfacePort" : "1", "ipAddress" : "10.0.1.101" }, { "interfaceDpid" : "00:00:00:00:00:00:00:a2", "interfacePort" : "1", "ipAddress" : "10.0.2.101" }, { "interfaceDpid" : "00:00:00:00:00:00:00:a5", "interfacePort" : "1", "ipAddress" : "10.0.3.101" }, { "interfaceDpid" : "00:00:00:00:00:00:00:a6", "interfacePort" : "1", "ipAddress" : "10.0.4.101" } ] } ] }
#p#
sdnip.json主要是包含兩個(gè)列表: bgpPeers 和 bgpSpeakers。
bgpPeers包含SDN網(wǎng)絡(luò)對(duì)等的外部peer的entry,每個(gè)peer有一個(gè)對(duì)等的地址,連接SDN網(wǎng)絡(luò)的接入點(diǎn)通過DPID和port來(lái)指定。
bgpSpeakers包含SDN網(wǎng)絡(luò)中每個(gè)BGP Speaker的entry,BGP Speaker的頭部包含了Speaker的任意名稱,連接SDN網(wǎng)絡(luò)的接入點(diǎn)和BGP Speaker的MAC地址。每個(gè)BGP Speaker有一系列的“interfaceaddress”和IP地址用來(lái)對(duì)等會(huì)話。
3.3 SDN-IP端口配置
上文已經(jīng)提過,bgp端口地址是5000,在 KARAF_ROOT/etc/org.onosproject.sdnip.SdnIp.cfg.文件中進(jìn)行配置:
bgpPort=5000
4 運(yùn)行SDN-IP
onos-app-config 用來(lái)讀 addresses.json里的文件信息;onos-app-proxyarp用來(lái)代表主機(jī)和路由器響應(yīng)ARP請(qǐng)求的proxy arp模塊
onos> feature:install onos-app-config onos> feature:install onos-app-proxyarp
配置依賴滿足后,安裝sdn-ip應(yīng)用:
onos> feature:install onos-app-sdnip
sdn-ip啟動(dòng),閱讀配置文件并安裝網(wǎng)絡(luò)intents建立 BGP peering 會(huì)話的連通性,然后使用多點(diǎn)單點(diǎn)intents安裝網(wǎng)絡(luò)開始接收路由。
以下SDN-IP命令主要用于用戶監(jiān)控系統(tǒng)狀態(tài):
顯示連接SDNIP的IBGP鄰居,每個(gè)鄰居有一個(gè)內(nèi)部BGPSpeaker,可以顯示顯示特定的鄰居:
bgp-neighbors [-j|--json] [-n|--neighbor ]
顯示BGP peers接收到的***路由信息,包括BGP指定信息:
bgp-routes [-j|--json] [s|--summary]
顯示一個(gè)特定BGP鄰居的所有路由信息(即使不是***路由):
bgp-routes [-j|--json] [n|–neighbor ]
顯示SDNIP的路由表信息,應(yīng)該幾乎和BGP路由信息相同,但是包括其他源路由信息:
routes [-j|--json] [s|--summary]
4.1 故障排查
(1)檢查SDNIP是否被安裝:
onos>feature:list | grep sdnip
(2)檢查內(nèi)部BGPSpeaker對(duì)等ONOS是否正確,如果正確,可以看到一系列內(nèi)部BGPSpeaker:
onos>bgp-neighbors
(3)檢查ONOS是否接收到期待的路由:
onos> routes
(4)路由被接收的話,為每個(gè)路由將啟動(dòng)MultiPointToSinglePoint intents,通過查找MultiPointToSinglePoint intents數(shù)檢查是否正確,和路由數(shù)應(yīng)該是相同的,且所有的intents應(yīng)該是已安裝狀態(tài):
onos> intents –s
5 實(shí)例演示
5.1 Mininet中的設(shè)置
mininet> h1 ip addr show ... inet 192.168.1.1/24 brd 192.168.1.255 scope global h1-eth0 ... mininet> h2 ip addr show ... inet 192.168.2.1/24 brd 192.168.2.255 scope global h2-eth0
每個(gè)主機(jī)都有一個(gè)不同的IP子網(wǎng),當(dāng)SDNIP運(yùn)行時(shí),這些主機(jī)之間能夠通信,這是因?yàn)樵赟DN網(wǎng)絡(luò)中使用了基于BGP路由的路由流量。
SDNIP未啟動(dòng)時(shí),主機(jī)間ping操作,是不通信的:
mininet> h1 ping h2 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. From 192.168.1.254 icmp_seq=1 Destination Net Unreachable From 192.168.1.254 icmp_seq=2 Destination Net Unreachable From 192.168.1.254 icmp_seq=3 Destination Net Unreachable
5.2 SDN-IP啟動(dòng)運(yùn)行
onos> feature:install onos-app-config onos> feature:install onos-app-proxyarp onos> feature:install onos-app-sdnip
SDNIP成功啟動(dòng)后驗(yàn)證主機(jī)間的連通性:
mininet> h1 ping h2 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_seq=1 ttl=62 time=0.693 ms 64 bytes from 192.168.2.1: icmp_seq=2 ttl=62 time=0.139 ms 64 bytes from 192.168.2.1: icmp_seq=3 ttl=62 time=0.149 ms
由實(shí)驗(yàn)驗(yàn)證可知,主機(jī)間是可以通信的。