本文主要是提供了有關(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ò)無縫對接融合。
1 網(wǎng)絡(luò)模型
SDN-IP允許SDN網(wǎng)絡(luò)與使用BGP路由協(xié)議相鄰的外部網(wǎng)絡(luò)對等和交換流量。下圖顯示了SDN-IP網(wǎng)絡(luò)模型中的各種元素。
2 BGP對等拓?fù)鋵?shí)例
對于如何設(shè)置BGP拓?fù)錄]有嚴(yán)格的要求,只要每個SDN-IP實(shí)例能夠接收通過iBGP發(fā)布的SDN網(wǎng)絡(luò)的所有路由就可以了。下圖顯示了一個BGP配置實(shí)例:
上圖網(wǎng)絡(luò)中的各個節(jié)點(diǎn)和線顯示了BGP對等會話。黑線是內(nèi)部BGP Speaker和外部BGP路由器之間建立的eBGP會話,紅線是BGP Speaker和SDN-IP實(shí)例之間的iBGP會話。
每個外部BGP路由器于一個或多個內(nèi)部BGP Speaker對等。 SDN-IP目前不支持外部多跳BGP對等會話,所以每個對等會話必須在同一個子網(wǎng)中。不同的對等會話可以在不同的子網(wǎng)中,所以為了對接外部路由器,在SDN網(wǎng)絡(luò)中需要為每個對等會話分配IP地址。在SDN網(wǎng)絡(luò)中的IP地址被分配給BGP Speaker。它不要求每個內(nèi)部BGP Speaker對應(yīng)外部每個路由器,因?yàn)锽GP Speaker在他們之間使用iBGP重新分配路由。然而,對于完全冗余的對接外部網(wǎng)絡(luò),外部peer應(yīng)該有多個內(nèi)部BGP Speaker對等會話。上圖可以看出, BGPRouter1與每個內(nèi)部BGP Speaker進(jìn)行對等會話。
網(wǎng)絡(luò)內(nèi)的BGP Speaker使用iBGP與SDN-IP實(shí)例進(jìn)行對等會話。SDN-IP是一個被動的iBGP peer:它監(jiān)聽BGP是否更新,但它不通知其自身的更新。在網(wǎng)絡(luò)內(nèi)的iBGP對等會話可以設(shè)置成多種方式,最簡單的方法是在BGP Speaker和SDN-IP實(shí)例之間進(jìn)行全網(wǎng)的iBGP對等會話,如上圖紅色線iBGP所示,通過這種方式,網(wǎng)絡(luò)中所有BGP節(jié)點(diǎn)都可以學(xué)習(xí)所有的路由。兩個SDN-IP實(shí)例之間的iBGP會話是沒有必要的,因?yàn)樵赟DN-IP實(shí)例中不上報自己的路由。各種不同的iBGP拓?fù)浣Y(jié)構(gòu)如下圖所示:
3 SDN-IP配置
SDN-IP目前采用的是簡單的JSON文件格式導(dǎo)入配置數(shù)據(jù),主要有兩個單獨(dú)的文件:用來存儲IP和MAC地址的addresses.json和存儲BGP對等會話數(shù)據(jù)的sdnip.json。
網(wǎng)絡(luò)文件配置:
配置文件需要放置在config目錄下。手動部署ONOS和SDN-IP,需要把配置文件復(fù)制在每個實(shí)例的config目錄下,目錄在KARAF_ROOT/../config,路徑目前還沒有配置。使用ONOS單元機(jī)制部署一個ONOS群集時,該配置文件可以放在ONOS_ROOT/tools/package/config目錄下,可以在管理節(jié)點(diǎn)上部署,當(dāng)集群部署時他們將自動被復(fù)制到在單元實(shí)例中的正確位置。
3.1 Addresses配置
Addresses.json配置的ONOS地址用來與外部網(wǎng)絡(luò)通信,主要是為了給proxy ARP使用,proxy ARP知道怎樣響應(yīng)來自外部網(wǎng)絡(luò)的ARP請求。如下所示:
{
"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"
}
]
}
文件中包含多個地址項(xiàng)的數(shù)組,每個地址項(xiàng)描述了交換機(jī)端口綁定的一系列地址,每個項(xiàng)包含綁定的交換機(jī)端口(通過DPID和端口號指定)、一系列的IP地址綁定到端口、一個單獨(dú)的MAC地址被用來每個IP地址的ARP響應(yīng)。SDN-IP運(yùn)行時,被SDN網(wǎng)絡(luò)用來對等外部BGP路由器的每個地址需要配置到addresses.json文件中。
3.2 BGP配置
sdnip.json文件包含BGP對等會話的詳細(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"
}
]
}
]
}
sdnip.json主要是包含兩個列表: bgpPeers 和 bgpSpeakers。
bgpPeers包含SDN網(wǎng)絡(luò)對等的外部peer的entry,每個peer有一個對等的地址,連接SDN網(wǎng)絡(luò)的接入點(diǎn)通過DPID和port來指定。
bgpSpeakers包含SDN網(wǎng)絡(luò)中每個BGP Speaker的entry,BGP Speaker的頭部包含了Speaker的任意名稱,連接SDN網(wǎng)絡(luò)的接入點(diǎn)和BGP Speaker的MAC地址。每個BGP Speaker有一系列的“interfaceaddress”和IP地址用來對等會話。
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 用來讀 addresses.json里的文件信息;onos-app-proxyarp用來代表主機(jī)和路由器響應(yīng)ARP請求的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啟動,閱讀配置文件并安裝網(wǎng)絡(luò)intents建立 BGP peering 會話的連通性,然后使用多點(diǎn)單點(diǎn)intents安裝網(wǎng)絡(luò)開始接收路由。
以下SDN-IP命令主要用于用戶監(jiān)控系統(tǒng)狀態(tài):
顯示連接SDNIP的IBGP鄰居,每個鄰居有一個內(nèi)部BGPSpeaker,可以顯示顯示特定的鄰居:
bgp-neighbors [-j|--json] [-n|--neighbor ]
顯示BGP peers接收到的最佳路由信息,包括BGP指定信息:
bgp-routes [-j|--json] [s|--summary]
顯示一個特定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對等ONOS是否正確,如果正確,可以看到一系列內(nèi)部BGPSpeaker:
onos>bgp-neighbors
(3)檢查ONOS是否接收到期待的路由:
onos> routes
(4)路由被接收的話,為每個路由將啟動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
每個主機(jī)都有一個不同的IP子網(wǎng),當(dāng)SDNIP運(yùn)行時,這些主機(jī)之間能夠通信,這是因?yàn)樵赟DN網(wǎng)絡(luò)中使用了基于BGP路由的路由流量。
SDNIP未啟動時,主機(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啟動運(yùn)行
onos> feature:install onos-app-config
onos> feature:install onos-app-proxyarp
onos> feature:install onos-app-sdnip
SDNIP成功啟動后驗(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ī)間是可以通信的。