如何配置OVN路由器?

网络 路由交换
现在将三层网络基础功能添加到OVN中。最终呈现出来的将是由逻辑路由器连接的一对逻辑交换机。另外,路由器将被配置为通过OVN中内置的DHCP服务来提供IP地址。

概览

基于我上一篇文章中的实验环境,我现在将三层网络基础功能添加到OVN中。最终呈现出来的将是由逻辑路由器连接的一对逻辑交换机。 另外,路由器将被配置为通过OVN中内置的DHCP服务来提供IP地址。

重构逻辑组件

由于设置开始变得更加复杂,我们将重新构建网络架构。 新的逻辑网络拓扑如下:

  • 2 台逻辑交换机 switches: “dmz” 和“inside”
  • 逻辑路由器“tenant1”,它连接着两个逻辑交换机
  • IP网络“dmz” :172.16.255.128/26
  • IP网络“inside”:172.16.255.192/26
  • 每个逻辑交换机上各有一对“虚拟机”

新的逻辑网络如下图所示

如何配置OVN路由器?

理解路由

在本次实验中,我们将创建一个OVN路由器,即“分布式逻辑路由器”(DLR)。 DLR不同于传统路由器,因为它不是物理的设备,而是一种逻辑架构(与逻辑交换机不同)。 DLR仅作为OVS中的一个功能而存在:换句话说,每个OVS实例能够在overlay网络转发流量之前先在本地模拟出一个三层路由器。

创建逻辑交换机和逻辑路由器

在ubuntu1上定义逻辑交换机:

 

ovn-nbctl ls-add inside 
ovn-nbctl ls-add dmz 
  • 1.
  • 2.

添加逻辑路由器及其关联的路由器和交换机端口:

 

# 添加路由器tenant1 
ovn-nbctl lr-add tenant1 
  
# 为路由器tenant1创建一个连接到dmz交换机的端口 
ovn-nbctl lrp-add tenant1 tenant1-dmz 02:ac:10:ff:01:29 172.16.255.129/26 
  
# 为dmz交换机创建用于连接到路由器tenant1的端口dmz-tenant1 
ovn-nbctl lsp-add dmz dmz-tenant1 
ovn-nbctl lsp-set-type dmz-tenant1 router 
ovn-nbctl lsp-set-addresses dmz-tenant1 02:ac:10:ff:01:29 
ovn-nbctl lsp-set-options dmz-tenant1 router-port=tenant1-dmz 
  
#为路由器tenant1创建一个连接到inside交换机的端口  
ovn-nbctl lrp-add tenant1 tenant1-inside 02:ac:10:ff:01:93 172.16.255.193/26 
  
#为inside交换机创建用于连接到路由器tenant1的端口inside-tenant1 
ovn-nbctl lsp-add inside inside-tenant1 
ovn-nbctl lsp-set-type inside-tenant1 router 
ovn-nbctl lsp-set-addresses inside-tenant1 02:ac:10:ff:01:93 
ovn-nbctl lsp-set-options inside-tenant1 router-port=tenant1-inside 
  
ovn-nbctl show 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

添加 DHCP

OVN中的DHCP与大多数的解决方案有点不同。 大多数人的想法是管理员将:

  1. 给定子网定义一组DHCP选项
  2. 创建逻辑交换机端口,给该端口定义MAC地址和IP地址
  3. 为该端口分配DHCP选项。
  4. 将端口安全设置为仅允许分配的地址

下面,我们将要给4台虚拟机配置逻辑端口。

在ubuntu1上:

 

ovn-nbctl lsp-add dmz dmz-vm1 
ovn-nbctl lsp-set-addresses dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130" 
ovn-nbctl lsp-set-port-security dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130" 
  
ovn-nbctl lsp-add dmz dmz-vm2 
ovn-nbctl lsp-set-addresses dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131" 
ovn-nbctl lsp-set-port-security dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131" 
  
ovn-nbctl lsp-add inside inside-vm3 
ovn-nbctl lsp-set-addresses inside-vm3 "02:ac:10:ff:01:94 172.16.255.194" 
ovn-nbctl lsp-set-port-security inside-vm3 "02:ac:10:ff:01:94 172.16.255.194" 
  
ovn-nbctl lsp-add inside inside-vm4 
ovn-nbctl lsp-set-addresses inside-vm4 "02:ac:10:ff:01:95 172.16.255.195" 
ovn-nbctl lsp-set-port-security inside-vm4 "02:ac:10:ff:01:95 172.16.255.195" 
  
ovn-nbctl show 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

您可能已经注意到,与上一个实验不同,现在通过一条命令就能定义mac和IP地址。 IP地址定义实现了我们的2个目的:

  1. 它通过OVN在本地应答其知道的IP / MAC的ARP请求来实现ARP抑制。
  2. 从哪个端口收到DHCP请求,就会从哪个接口分配IP地址。通过这种方式来实现DHCP。

接下来,我们需要定义DHCP选项并将它们分配给逻辑端口。这里的处理将与我们以前看到的有点不同,因为我们将直接与OVN NB数据库进行交互。 用这种方式的原因是需要捕获DHCP_Options中的UUID,以便我们可以将UUID分配给交换机端口。 为此,我们将把捕获的ovn-nbctl命令的结果输出到一对bash变量中。

 

dmzDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.128/26 \ 
options="\"server_id\"=\"172.16.255.129\" \"server_mac\"=\"02:ac:10:ff:01:29\" \ 
\"lease_time\"=\"3600\" \"router\"=\"172.16.255.129\"")"  
echo $dmzDhcp 
  
insideDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.192/26 \ 
options="\"server_id\"=\"172.16.255.193\" \"server_mac\"=\"02:ac:10:ff:01:93\" \ 
\"lease_time\"=\"3600\" \"router\"=\"172.16.255.193\"")" 
echo $insideDhcp 
  
ovn-nbctl dhcp-options-list 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

如果您想了解有关OVN NB数据库的更多信息,请参阅ovn-nb的手册(译者注:http://openvswitch.org/support/dist-docs/ovn-nb.5.pdf)。

现在,我们将使用存储在变量中的UUID为逻辑交换机端口分配DHCP_Options。

 

ovn-nbctl lsp-set-dhcpv4-options dmz-vm1 $dmzDhcp 
ovn-nbctl lsp-get-dhcpv4-options dmz-vm1 
  
ovn-nbctl lsp-set-dhcpv4-options dmz-vm2 $dmzDhcp 
ovn-nbctl lsp-get-dhcpv4-options dmz-vm2 
  
ovn-nbctl lsp-set-dhcpv4-options inside-vm3 $insideDhcp 
ovn-nbctl lsp-get-dhcpv4-options inside-vm3 
  
ovn-nbctl lsp-set-dhcpv4-options inside-vm4 $insideDhcp 
ovn-nbctl lsp-get-dhcpv4-options inside-vm4 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

配置虚拟机

与上一个实验一样,我们将使用OVS内部端口和网络命名空间构建的“伪虚拟机”。 现在的区别是,我们将使用DHCP进行地址分配。

接下来我们将设置虚拟机。

在ubuntu2上:

 

ip netns add vm1 
ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal 
ip link set vm1 address 02:ac:10:ff:01:30 
ip link set vm1 netns vm1 
ovs-vsctl set Interface vm1 external_ids:iface-id=dmz-vm1 
ip netns exec vm1 dhclient vm1 
ip netns exec vm1 ip addr show vm1 
ip netns exec vm1 ip route show 
  
ip netns add vm3 
ovs-vsctl add-port br-int vm3 -- set interface vm3 type=internal 
ip link set vm3 address 02:ac:10:ff:01:94 
ip link set vm3 netns vm3 
ovs-vsctl set Interface vm3 external_ids:iface-id=inside-vm3 
ip netns exec vm3 dhclient vm3 
ip netns exec vm3 ip addr show vm3 
ip netns exec vm3 ip route show 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

在 ubuntu3上:

 

ip netns add vm2 
ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal 
ip link set vm2 address 02:ac:10:ff:01:31 
ip link set vm2 netns vm2 
ovs-vsctl set Interface vm2 external_ids:iface-id=dmz-vm2 
ip netns exec vm2 dhclient vm2 
ip netns exec vm2 ip addr show vm2 
ip netns exec vm2 ip route show 
  
ip netns add vm4 
ovs-vsctl add-port br-int vm4 -- set interface vm4 type=internal 
ip link set vm4 address 02:ac:10:ff:01:95 
ip link set vm4 netns vm4 
ovs-vsctl set Interface vm4 external_ids:iface-id=inside-vm4 
ip netns exec vm4 dhclient vm4 
ip netns exec vm4 ip addr show vm4 
ip netns exec vm4 ip route show 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

测试网络连通性

在ubuntu2上,从vm1测试网络连通性:

 

# ping vm1的默认网关 
root@ubuntu2:~# ip netns exec vm1 ping 172.16.255.129 
PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data. 
64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=0.689 ms 
64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.393 ms 
64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.483 ms   
# 从 overlay网络ping vm2(跨越整个 tenant1) 
root@ubuntu2:~# ip netns exec vm1  ping 172.16.255.131 
PING 172.16.255.131 (172.16.255.131) 56(84) bytes of data. 
64 bytes from 172.16.255.131: icmp_seq=1 ttl=64 time=2.16 ms 
64 bytes from 172.16.255.131: icmp_seq=2 ttl=64 time=0.573 ms 
64 bytes from 172.16.255.131: icmp_seq=3 ttl=64 time=0.446 ms   
# 经过 router ping通 vm3(跨越整个 overlay网络) 
root@ubuntu2:~# ip netns exec vm1  ping 172.16.255.194 
PING 172.16.255.194 (172.16.255.194) 56(84) bytes of data. 
64 bytes from 172.16.255.194: icmp_seq=1 ttl=63 time=1.37 ms 
64 bytes from 172.16.255.194: icmp_seq=2 ttl=63 time=0.077 ms 
64 bytes from 172.16.255.194: icmp_seq=3 ttl=63 time=0.076 ms   
#经过 router ping 通vm4(跨越整个 overlay网络) 
root@ubuntu2:~# ip netns exec vm1  ping 172.16.255.195 
PING 172.16.255.195 (172.16.255.195) 56(84) bytes of data. 
64 bytes from 172.16.255.195: icmp_seq=1 ttl=63 time=1.79 ms 
64 bytes from 172.16.255.195: icmp_seq=2 ttl=63 time=0.605 ms 
64 bytes from 172.16.255.195: icmp_seq=3 ttl=63 time=0.503 ms 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

结语

OVN使得第三层overlay网络易于部署和管理。 另外像DHCP的服务直接构建到系统中的方式,有助于减少构建有效的SDN解决方案所需的外部组件的数量。 在下一篇文章中,将讨论如何将我们(当前隔离的)overlay网络连接到外部世界。

译者简介:郑敏先,就职于诺云系统(上海)有限公司。工作地点为南京的诺云研发中心。担任解决方案工程师。

责任编辑:未丽燕 来源: SDNLAB
相关推荐

2009-12-21 15:49:44

Cisco路由器

2013-06-07 11:06:20

路由技术静态路由配置路由器

2012-05-23 09:23:34

2020-06-01 20:50:04

VTY Shell路由器系统运维

2011-09-14 17:16:14

2010-07-30 15:23:34

路由器配置

2010-07-30 14:53:35

路由器设置

2009-04-14 09:48:00

cisco路由器配置

2009-12-22 15:57:18

Cisco路由器配置

2009-12-21 14:12:30

路由器配置故障

2011-02-22 08:57:28

路由器基础

2009-12-11 15:21:15

华为路由器CISCO路由器

2009-12-23 15:00:15

正确配置路由协议

2010-08-04 10:14:36

路由器配置

2009-12-08 17:10:22

路由器配置

2010-08-03 11:29:53

路由器配置

2009-12-17 09:02:04

路由器配置

2009-12-18 16:59:22

配置路由器

2010-08-09 09:49:15

华为路由器配置

2011-08-29 13:04:09

路由器设置路由器连接路由器
点赞
收藏

51CTO技术栈公众号