基于ONOS的SDN-IP实验篇

网络
本文主要是提供了有关ONOS的SDN-IP实例如何安装、配置及在SDN网络中如何运行SDN-IP的操作,通过实践了解并实现SDN网络与外部网络无缝对接融合。

本文主要是提供了有关ONOS的SDN-IP实例如何安装、配置及在SDN网络中如何运行SDN-IP的操作,通过实践了解并实现SDN网络与外部网络无缝对接融合。

 [[149500]]

1 网络模型

SDN-IP允许SDN网络与使用BGP路由协议相邻的外部网络对等和交换流量。下图显示了SDN-IP网络模型中的各种元素。

 201518--SDN-IP network model

2 BGP对等拓扑实例

对于如何设置BGP拓扑没有严格的要求,只要每个SDN-IP实例能够接收通过iBGP发布的SDN网络的所有路由就可以了。下图显示了一个BGP配置实例:

 201518--SDN-IP network iBGP

上图网络中的各个节点和线显示了BGP对等会话。黑线是内部BGP Speaker和外部BGP路由器之间建立的eBGP会话,红线是BGP Speaker和SDN-IP实例之间的iBGP会话。

每个外部BGP路由器于一个或多个内部BGP Speaker对等。 SDN-IP目前不支持外部多跳BGP对等会话,所以每个对等会话必须在同一个子网中。不同的对等会话可以在不同的子网中,所以为了对接外部路由器,在SDN网络中需要为每个对等会话分配IP地址。在SDN网络中的IP地址被分配给BGP Speaker。它不要求每个内部BGP Speaker对应外部每个路由器,因为BGP Speaker在他们之间使用iBGP重新分配路由。然而,对于完全冗余的对接外部网络,外部peer应该有多个内部BGP Speaker对等会话。上图可以看出, BGPRouter1与每个内部BGP Speaker进行对等会话。

网络内的BGP Speaker使用iBGP与SDN-IP实例进行对等会话。SDN-IP是一个被动的iBGP peer:它监听BGP是否更新,但它不通知其自身的更新。在网络内的iBGP对等会话可以设置成多种方式,最简单的方法是在BGP Speaker和SDN-IP实例之间进行全网的iBGP对等会话,如上图红色线iBGP所示,通过这种方式,网络中所有BGP节点都可以学习所有的路由。两个SDN-IP实例之间的iBGP会话是没有必要的,因为在SDN-IP实例中不上报自己的路由。各种不同的iBGP拓扑结构如下图所示:

 201518--SDN-IP instances

3 SDN-IP配置

SDN-IP目前采用的是简单的JSON文件格式导入配置数据,主要有两个单独的文件:用来存储IP和MAC地址的addresses.json和存储BGP对等会话数据的sdnip.json。

 201518--SDN-IP configure topo

网络文件配置:

配置文件需要放置在config目录下。手动部署ONOS和SDN-IP,需要把配置文件复制在每个实例的config目录下,目录在KARAF_ROOT/../config,路径目前还没有配置。使用ONOS单元机制部署一个ONOS群集时,该配置文件可以放在ONOS_ROOT/tools/package/config目录下,可以在管理节点上部署,当集群部署时他们将自动被复制到在单元实例中的正确位置。

#p#

3.1 Addresses配置

Addresses.json配置的ONOS地址用来与外部网络通信,主要是为了给proxy ARP使用,proxy ARP知道怎样响应来自外部网络的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"
}
]
}

文件中包含多个地址项的数组,每个地址项描述了交换机端口绑定的一系列地址,每个项包含绑定的交换机端口(通过DPID和端口号指定)、一系列的IP地址绑定到端口、一个单独的MAC地址被用来每个IP地址的ARP响应。SDN-IP运行时,被SDN网络用来对等外部BGP路由器的每个地址需要配置到addresses.json文件中。

3.2 BGP配置

sdnip.json文件包含BGP对等会话的详细信息,也包含内部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主要是包含两个列表: bgpPeers 和 bgpSpeakers。

bgpPeers包含SDN网络对等的外部peer的entry,每个peer有一个对等的地址,连接SDN网络的接入点通过DPID和port来指定。

bgpSpeakers包含SDN网络中每个BGP Speaker的entry,BGP Speaker的头部包含了Speaker的任意名称,连接SDN网络的接入点和BGP Speaker的MAC地址。每个BGP Speaker有一系列的“interfaceaddress”和IP地址用来对等会话。

3.3 SDN-IP端口配置

上文已经提过,bgp端口地址是5000,在 KARAF_ROOT/etc/org.onosproject.sdnip.SdnIp.cfg.文件中进行配置:

bgpPort=5000

4 运行SDN-IP

onos-app-config 用来读 addresses.json里的文件信息;onos-app-proxyarp用来代表主机和路由器响应ARP请求的proxy arp模块

onos> feature:install onos-app-config
onos> feature:install onos-app-proxyarp

配置依赖满足后,安装sdn-ip应用:

onos> feature:install onos-app-sdnip

sdn-ip启动,阅读配置文件并安装网络intents建立 BGP peering 会话的连通性,然后使用多点单点intents安装网络开始接收路由。

以下SDN-IP命令主要用于用户监控系统状态:

显示连接SDNIP的IBGP邻居,每个邻居有一个内部BGPSpeaker,可以显示显示特定的邻居:

bgp-neighbors [-j|--json] [-n|--neighbor ]

显示BGP peers接收到的***路由信息,包括BGP指定信息:

bgp-routes [-j|--json] [s|--summary]

显示一个特定BGP邻居的所有路由信息(即使不是***路由):

bgp-routes [-j|--json] [n|–neighbor ]

显示SDNIP的路由表信息,应该几乎和BGP路由信息相同,但是包括其他源路由信息:

routes [-j|--json] [s|--summary]

4.1 故障排查

(1)检查SDNIP是否被安装:

onos>feature:list | grep sdnip

(2)检查内部BGPSpeaker对等ONOS是否正确,如果正确,可以看到一系列内部BGPSpeaker:

onos>bgp-neighbors

(3)检查ONOS是否接收到期待的路由:

onos> routes

(4)路由被接收的话,为每个路由将启动MultiPointToSinglePoint intents,通过查找MultiPointToSinglePoint intents数检查是否正确,和路由数应该是相同的,且所有的intents应该是已安装状态:

onos> intents –s

5 实例演示

5.1 Mininet中的设置

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

每个主机都有一个不同的IP子网,当SDNIP运行时,这些主机之间能够通信,这是因为在SDN网络中使用了基于BGP路由的路由流量。

SDNIP未启动时,主机间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启动运行

onos> feature:install onos-app-config
onos> feature:install onos-app-proxyarp
onos> feature:install onos-app-sdnip

SDNIP成功启动后验证主机间的连通性:

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

由实验验证可知,主机间是可以通信的。

责任编辑:何妍 来源: SDNLAB
相关推荐

2015-09-17 11:20:29

ONOSSDN-IP架构

2016-06-13 15:53:34

SDN开放网络操作系统ONOS

2015-10-22 10:51:04

ONOSLinux基金会SDN

2015-01-14 14:09:16

SDNNFV

2015-06-23 11:01:52

云计算资源池软件定义网络

2014-12-08 11:17:51

SDNDocker部署Docker

2017-09-08 10:59:05

2017-12-21 15:01:42

2013-11-27 09:25:04

IBMSDN灾害预防

2013-12-16 09:44:01

OpenDayLighSDN网络转发

2013-07-02 11:40:31

软件定义网络SDNIP网络

2013-04-19 11:00:02

SDNLTEHaul移动回传网络

2017-12-22 23:12:44

SDNIBN基于意图的网络

2010-09-27 11:12:33

DHCP IP分配

2015-09-17 14:54:07

SDNNFV网络架构

2015-11-03 10:32:47

ONOS开放网络操作系统

2015-09-17 15:45:06

SDNNFV网络架构

2014-01-07 09:38:34

OpenFlowSDN测试

2015-11-03 15:29:49

ONOS开放网络操作系统SDN

2009-04-09 10:12:00

点赞
收藏

51CTO技术栈公众号