SDN控制器之OVN实验二:使用OVN配置路由器

2023-05-16

概览

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

重构逻辑组件

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

  • 2台逻辑交换机 switches: "dmz"和"inside"

  • 逻辑路由器"tenant1",它连接着两个逻辑交换机

  • IP网络"dmz" :172.16.255.128/26

  • IP网络"inside":172.16.255.192/26

  • 每个逻辑交换机上各有一对"虚拟机"

新的逻辑网络如下图所示

理解路由

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

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

在ubuntu1上定义逻辑交换机:

  1. ovn-nbctl ls-add inside

  2. ovn-nbctl ls-add dmz

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

  4. # 添加路由器tenant1

  5. ovn-nbctl lr-add tenant1

  6.  
  7. # 为路由器tenant1创建一个连接到dmz交换机的端口

  8. ovn-nbctl lrp-add tenant1 tenant1-dmz 02:ac:10:ff:01:29 172.16.255.129/26

  9.  
  10. # 为dmz交换机创建用于连接到路由器tenant1的端口dmz-tenant1

  11. ovn-nbctl lsp-add dmz dmz-tenant1

  12. ovn-nbctl lsp-set-type dmz-tenant1 router

  13. ovn-nbctl lsp-set-addresses dmz-tenant1 02:ac:10:ff:01:29

  14. ovn-nbctl lsp-set-options dmz-tenant1 router-port=tenant1-dmz

  15.  
  16. #为路由器tenant1创建一个连接到inside交换机的端口

  17. ovn-nbctl lrp-add tenant1 tenant1-inside 02:ac:10:ff:01:93 172.16.255.193/26

  18.  
  19. #为inside交换机创建用于连接到路由器tenant1的端口inside-tenant1

  20. ovn-nbctl lsp-add inside inside-tenant1

  21. ovn-nbctl lsp-set-type inside-tenant1 router

  22. ovn-nbctl lsp-set-addresses inside-tenant1 02:ac:10:ff:01:93

  23. ovn-nbctl lsp-set-options inside-tenant1 router-port=tenant1-inside

  24.  
  25. ovn-nbctl show

添加 DHCP

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

1.给定子网定义一组DHCP选项

2.创建逻辑交换机端口,给该端口定义MAC地址和IP地址

3.为该端口分配DHCP选项。

4.将端口安全设置为仅允许分配的地址

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

  1. ovn-nbctl lsp-add dmz dmz-vm1

  2. ovn-nbctl lsp-set-addresses dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130"

  3. ovn-nbctl lsp-set-port-security dmz-vm1 "02:ac:10:ff:01:30 172.16.255.130"

  4.  
  5. ovn-nbctl lsp-add dmz dmz-vm2

  6. ovn-nbctl lsp-set-addresses dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131"

  7. ovn-nbctl lsp-set-port-security dmz-vm2 "02:ac:10:ff:01:31 172.16.255.131"

  8.  
  9. ovn-nbctl lsp-add inside inside-vm3

  10. ovn-nbctl lsp-set-addresses inside-vm3 "02:ac:10:ff:01:94 172.16.255.194"

  11. ovn-nbctl lsp-set-port-security inside-vm3 "02:ac:10:ff:01:94 172.16.255.194"

  12.  
  13. ovn-nbctl lsp-add inside inside-vm4

  14. ovn-nbctl lsp-set-addresses inside-vm4 "02:ac:10:ff:01:95 172.16.255.195"

  15. ovn-nbctl lsp-set-port-security inside-vm4 "02:ac:10:ff:01:95 172.16.255.195"

  16.  
  17. ovn-nbctl show

您可能已经注意到,与上一个实验不同,现在通过一条命令就能定义mac和IP地址。 IP地址定义实现了我们的2个目的:
1.它通过允许OVN在本地应答其知道的IP / MAC的ARP请求来实现ARP抑制。
2.从哪个端口收到到DHCP请求,就会从哪个接口分配IP地址。通过这种方式来实现DHCP。

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

  1. dmzDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.128/26 \

  2. options="\"server_id\"=\"172.16.255.129\" \"server_mac\"=\"02:ac:10:ff:01:29\" \

  3. \"lease_time\"=\"3600\" \"router\"=\"172.16.255.129\"")"

  4. echo $dmzDhcp

  5.  
  6. insideDhcp="$(ovn-nbctl create DHCP_Options cidr=172.16.255.192/26 \

  7. options="\"server_id\"=\"172.16.255.193\" \"server_mac\"=\"02:ac:10:ff:01:93\" \

  8. \"lease_time\"=\"3600\" \"router\"=\"172.16.255.193\"")"

  9. echo $insideDhcp

  10.  
  11. ovn-nbctl dhcp-options-list

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

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

  1. ovn-nbctl lsp-set-dhcpv4-options dmz-vm1 $dmzDhcp

  2. ovn-nbctl lsp-get-dhcpv4-options dmz-vm1

  3.  
  4. ovn-nbctl lsp-set-dhcpv4-options dmz-vm2 $dmzDhcp

  5. ovn-nbctl lsp-get-dhcpv4-options dmz-vm2

  6.  
  7. ovn-nbctl lsp-set-dhcpv4-options inside-vm3 $insideDhcp

  8. ovn-nbctl lsp-get-dhcpv4-options inside-vm3

  9.  
  10. ovn-nbctl lsp-set-dhcpv4-options inside-vm4 $insideDhcp

  11. ovn-nbctl lsp-get-dhcpv4-options inside-vm4

配置虚拟机

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

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

ubuntu2:

  1. ip netns add vm1

  2. ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal

  3. ip link set vm1 address 02:ac:10:ff:01:30

  4. ip link set vm1 netns vm1

  5. ovs-vsctl set Interface vm1 external_ids:iface-id=dmz-vm1

  6. ip netns exec vm1 dhclient vm1

  7. ip netns exec vm1 ip addr show vm1

  8. ip netns exec vm1 ip route show

  9.  
  10. ip netns add vm3

  11. ovs-vsctl add-port br-int vm3 -- set interface vm3 type=internal

  12. ip link set vm3 address 02:ac:10:ff:01:94

  13. ip link set vm3 netns vm3

  14. ovs-vsctl set Interface vm3 external_ids:iface-id=inside-vm3

  15. ip netns exec vm3 dhclient vm3

  16. ip netns exec vm3 ip addr show vm3

  17. ip netns exec vm3 ip route show

  18. On ubuntu3:

  19. ip netns add vm2

  20. ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal

  21. ip link set vm2 address 02:ac:10:ff:01:31

  22. ip link set vm2 netns vm2

  23. ovs-vsctl set Interface vm2 external_ids:iface-id=dmz-vm2

  24. ip netns exec vm2 dhclient vm2

  25. ip netns exec vm2 ip addr show vm2

  26. ip netns exec vm2 ip route show

  27.  
  28. ip netns add vm4

  29. ovs-vsctl add-port br-int vm4 -- set interface vm4 type=internal

  30. ip link set vm4 address 02:ac:10:ff:01:95

  31. ip link set vm4 netns vm4

  32. ovs-vsctl set Interface vm4 external_ids:iface-id=inside-vm4

  33. ip netns exec vm4 dhclient vm4

  34. ip netns exec vm4 ip addr show vm4

  35. ip netns exec vm4 ip route show

测试网络连通性

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

  1. # ping vm1的默认网关

  2. root@ubuntu2:~# ip netns exec vm1 ping 172.16.255.129

  3. PING 172.16.255.129 (172.16.255.129) 56(84) bytes of data.

  4. 64 bytes from 172.16.255.129: icmp_seq=1 ttl=254 time=0.689 ms

  5. 64 bytes from 172.16.255.129: icmp_seq=2 ttl=254 time=0.393 ms

  6. 64 bytes from 172.16.255.129: icmp_seq=3 ttl=254 time=0.483 ms

  7.  
  8. # 从 overlay网络ping vm2(跨越整个 tenant1)

  9. root@ubuntu2:~# ip netns exec vm1 ping 172.16.255.131

  10. PING 172.16.255.131 (172.16.255.131) 56(84) bytes of data.

  11. 64 bytes from 172.16.255.131: icmp_seq=1 ttl=64 time=2.16 ms

  12. 64 bytes from 172.16.255.131: icmp_seq=2 ttl=64 time=0.573 ms

  13. 64 bytes from 172.16.255.131: icmp_seq=3 ttl=64 time=0.446 ms

  14.  
  15. # 经过 router ping通 vm3(跨越整个 overlay网络)

  16. root@ubuntu2:~# ip netns exec vm1 ping 172.16.255.194

  17. PING 172.16.255.194 (172.16.255.194) 56(84) bytes of data.

  18. 64 bytes from 172.16.255.194: icmp_seq=1 ttl=63 time=1.37 ms

  19. 64 bytes from 172.16.255.194: icmp_seq=2 ttl=63 time=0.077 ms

  20. 64 bytes from 172.16.255.194: icmp_seq=3 ttl=63 time=0.076 ms

  21.  
  22. #经过 router ping 通vm4(跨越整个 overlay网络)

  23. root@ubuntu2:~# ip netns exec vm1 ping 172.16.255.195

  24. PING 172.16.255.195 (172.16.255.195) 56(84) bytes of data.

  25. 64 bytes from 172.16.255.195: icmp_seq=1 ttl=63 time=1.79 ms

  26. 64 bytes from 172.16.255.195: icmp_seq=2 ttl=63 time=0.605 ms

  27. 64 bytes from 172.16.255.195: icmp_seq=3 ttl=63 time=0.503 ms

结语

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

原文:https://blog.csdn.net/zhengmx100/article/details/58137383?utm_source=blogxgwz0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDN控制器之OVN实验二:使用OVN配置路由器 的相关文章

  • SUMO中车辆类型的定义及路由文件的写法

    车辆类型的定义 在SUMO中 xff0c 通过vType标签来定义车辆的类型 xff0c 一般可以写成如下形式 xff1a span class token operator lt span vType id span class toke
  • 为什么c语言允许直接访问物理地址?

    C语言允许直接访问物理地址 xff0c 是因为它是一种面向底层的语言 xff0c 提供了底层的硬件操作和系统调用的能力 在C语言中 xff0c 可以通过指针变量直接访问内存地址 xff0c 从而对硬件进行底层控制和操作 在一些应用场景下 x
  • TortoiseGit 安装和使用

    TortoiseGit是一款适用于Windows系统的开源的git版本控制客户端 xff0c 其优点是使用图像化界面操作 xff0c 而不需要记住或使用Git命令 xff0c 从而增加开发效率 xff0c 对不熟悉命令的使用者比较友善 下面
  • 解放拖动屏幕的双手——用xrandr配置多屏显示

    操作系统 xff1a Arch Linux 桌面系统 xff1a Xfce 又是一次会议的结束 xff0c 待我回办公室把大屏幕接上 xff0c 准备继续干 等等 xff0c 这是怎么回事 xff1f 打开系统的Display设置一看 xf
  • 深入浅出BGP

    文章目录 深入浅出BGP说明一 BGP的产生1 1 动态路由的分类1 2 BGP概述 二 与IGP的区别三 BGP核心3 1 属性3 1 1 属性特点 3 2 选路规则3 3 对等体 深入浅出BGP 说明 此篇主要对BGP的产生 与IGP的
  • LVM跨主机迁移

    LVM跨主机迁移 虚拟机 实验环境 两台Centos 7 8虚拟机 xff0c IP xff1a 192 168 221 199 200 查看lv test中的数据 使用命令lsblk xff0c 确认逻辑卷vg下挂有两个分区均为sdb磁盘
  • CodeBlocks 20.03安装&汉语化&找不到编译器

    一 CodeBlocks下载 下载地址 xff1a https www codeblocks org downloads binaries 到如下界面选择下载codeblocks 20 03mingw setup exe xff0c 这个里
  • 【FreeRTOS】从0写简易RTOS实现任务切换

    1 RTOS引入 单片机性能越来越强 xff0c 很多Linux程序在单片机上也可以运行了 xff1a 这需要RTOS 我们要开发的单片机产品 xff0c 功能也越来越丰富 xff1a 这也需要RTOS 就个人技术发展来说 xff0c 单片
  • java中的抽象类与接口(面试常考,重要)!!

    目录 抽象类语法规则注意事项 重要 xff0c 全部掌握 抽象类的作用 接口语法规则注意事项提示类实现多个接口 接口使用实例 Comparable 接口与Comparator接口 xff09 Comparable接口Comparator接口
  • Tensorflow2.0学习(十) — 基础张量、微分操作及自定义层

    因为再后面一些分享的章节的内容很多是基于经典论文的复现了 xff0c 里面会牵扯到很多自定义的模型及其变换 而这些内容有些是我们的Keras API 无法完成的 例如Resnet的residual block 因此这一节课我们有必要去学习一
  • 数据加解密时Base64异常:Illegal base64 character 3a

    现象 用base64工具类对中文进行处理时出现异常 xff0c 在数据加解密场景中经常使用 java lang IllegalArgumentException Illegal base64 character 3a at java uti
  • HTML5学习资料

    xff08 一 xff09 HTML5的原型设计模板平台 http www zzfriend com xiazai moban http www ke01 com html5cmsmuban http www ui92 com down 2
  • centOS7安装图形化界面

    三步 1 yum groupinstall y 34 Server with GUI 34 这一步是下载图形化界面 2 reboot 重启一下 3 init 5 这一步是进入图形化界面模式 xff0c 如果配置文件里已经默认的是init 5
  • PHPExcel下载excel文件正常,打开报错:'break' not in the 'loop' or 'switch' context

    其实 xff0c thinkphp的报错已经很明显了 39 break 39 not in the 39 loop 39 or 39 switch 39 context错误位置FILE private var www backend Thi
  • ubuntu 系统出现 仓库 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu xenial Release“ 没有Release文件

    Ubuntu系统在执行sudo apt get update 后出现仓库 http ppa launchpad net fcitx team nightly ubuntu xenial Release 没有Release文件的错误 解决办法
  • Docker bridge网络模式搭建

    提示 xff1a 在 docker 中新建网络后 xff0c 容器绑定在新建网络上的容器可以用容器名ping其他的容器 xff0c 但是在默认网络上的容器是无法直接使用容器名ping通的 bridge网络搭建 1 安装brctl yum i
  • 【Python】python读取excel超链接

    前言 表格存在两种格式 xls 和 xlsx xff0c 所以python存在两种库分别读取这两种格式表格超链接 openpyl针对 xlsx格式 xff0c xlrd针对 xls文件 示例如下 xff1a 1 openpyl coding
  • 基于51单片机的12864液晶演示器驱动

    span class token macro property span class token directive keyword include span span class token string lt reg52 h gt sp
  • Ubuntu安装VNC4Server遇到的问题与解决方法

    在Ubuntu安装VNC4Server时 xff0c 报错 xff1a Package 39 vnc4server 39 has no installation candidate 这是由于没有找到apt get的source 可以按照以下
  • sumo中随机产生车流

    在sumo中绘制地图 xff0c 然后利用sumo中的randomTrips py工具产生随机的车流量 一 首先绘制路网 xff0c 本文绘制了一个九宫格路网 xff08 myroad net xml xff09 xff0c 如下图 xff

随机推荐

  • 计算机网络第一章概述总结知识点

    第1章 概述 本章最重要的内容 xff1a 互联网边缘部分和核心部分的作用 xff0c 什么是分组交换 xff1f 计算机网络的性能指标有哪些计算机网络分层次的体系结构是怎样的 xff1f 什么是协议和服务 xff1f 本章的重要概念 互联
  • pip安装git

    解决 xff1a Cannot find command git do you have git installed and in your PATH 和系统找不到指定的文件 while executing command git http
  • 卷积神经网络的特征图可视化秘籍——PyTorch实现

    卷积神经网络的特征图可视化秘籍 PyTorch实现 可视化的定义及步骤PyTorch实现以预训练好的VGG16为例进行可视化关键代码剖析如果是自行搭建的网络 xff0c 如何索引网络层 xff1f 继续使用序号索引不使用序号 xff0c 直
  • pip出现的问题

    正常使用示例 xff1a 安装numpy pip install numpy 临时加镜像源 pip install numpy i https pypi tuna tsinghua edu cn simple 镜像源 xff1a 清华 xf
  • 词权重 (term weight)方案总结

    目录 1 无监督 unsupervised 方法1 1 统计方法 xff08 TF TF IDF YAKE 1 2 图方法 TextRank SingleRank TopicRank PositionRank 2 有监督 supervise
  • Windows上安装Curl工具

    一 介绍 curl是利用URL语法在命令行方式下工作的开源文件传输工具 它被广泛应用在Unix 多种Linux发行版中 xff0c 并且有DOS和Win32 Win64下的移植版本 二 安装步骤 2 1 下载资源包 官网 xff1a htt
  • ESP8266 Arduino开发环境从零开始配置

    目录 1 安装Arduino IDE2 添加 ESP8266 支持3 添加依赖库4 完毕 1 安装Arduino IDE Arduino IDE 是由 Arduino 官方提供的支持 C 语言的集成开发环境 xff0c 主要是针对 Ardu
  • 使用HDFS的Java接口对文件基本操作

    使用HDFS的Java接口进行文件的读写 FileSystem对象 要从Hadoop文件系统中读取文件 xff0c 最简单的办法是使用java net URL对象打开数据流 xff0c 从中获取数据 不过这种方法一般要使用FsUrlStre
  • elastic学习笔记(一)

    elasticsearch安装 xff08 V7 10 0 xff09 踩坑笔记 一 elasticsearch在6 X版本后不允许使用root账户启动 创建其他账户 adduser es 创建密码 passwd es 二 生产环境安装完毕
  • 主机可以ping通虚拟机但无法访问虚拟机某一端口

    问题描述 主机可以ping通虚拟机 xff0c 但是服务器启动状态下访问 192 168 200 152 8888失败 背景 UFW防火墙已经开放 8888 端口 原因和解法 firewall这个防火墙的8888端口没有开放 xff0c 使
  • WSL安装ubuntu18.04+2016VCS+Verdi——记录安装过程错误

    前言 xff1a 安装过程花了一个星期 xff0c 最开始是wsl的图形化界面一直没搞出来 xff0c 等图形化界面安装好之后 xff0c 安装vcs和verdi的过程又是一波三折 xff08 这段可不看 xff0c 总结一下自己踩过的坑
  • 【stm32】ST-LINK Connection error解决方法之一

    ST LINK报错原因之一 xff1a 固件丢失 好久没有用开发板和stlink xff0c 今天发现下载报错 xff0c 明明电脑已经装了stlink驱动 猜测可能是stlink固件丢失 span class token number 1
  • 云服务器VNC安装教程

    文章目录 1 VNC Viewer 注册及安装2 云服务器安装配置2 1 ssh安装和配置2 2 Tightvncserver 安装2 2 安装 gnome 桌面2 3 远程连接端口开启2 4 Xstartup文件编辑2 5 云服务器端口配
  • 浅谈STP协议

    1 STP协议解决什么问题 xff1f 解决网络拓扑中冗余链路产生的环路问题 2 STP协议有什么优缺点 xff1f 解决树形接口的可靠性问题 xff0c 有主备线路 xff0c 当主链路出现故障后 xff0c 可以感知网络的变化 xff0
  • Linux下CMake学习笔记和在QT的应用

    一 cmake的介绍 CMak可以让我们通过编写简单的配置文件去生成本地的Makefile xff0c 这个配置文件是独立于运行平台和编译器的 xff0c 这样就不用亲自去编写Makefile了 xff0c 而且配置文件可以直接拿到其它平台
  • WinIO:一个底层的键盘事件模拟工具

    当我们需要程序模拟键盘事件时 xff0c 通常会这样写 xff1a C xff1a keybd event JAVA xff1a robot keyPress 但是在某些情况下 xff0c 这么写并不能实现需求 xff0c 例如用程序在密码
  • gcc: error: unrecognized command line option ‘-std=c++14’ 问题解决

    问题描述 xff1a 安装一些python包 实际场景为py3安装infomap 时报错 xff1a gcc error unrecognized command line option std 61 c 43 43 14 环境 cento
  • 无监督预训练 & 有监督预训练

    本文参考了几篇其他博客 xff0c 具体链接在对应部分有提供 无监督预训练 xff08 unsupervised pre training xff09 无监督预训练策略 xff0c 主要应用于 复杂任务 43 少量标记数据集 xff0c 即
  • VSCode 是什么

    VSCode 是什么 xff0c VS Code的全称是Visual Studio Code xff0c 但这全名实在是太长了 xff0c 很多用户喜欢叫它VS Code 说起VS Code xff0c 官方定义它是一个免费的 开源的跨平台
  • SDN控制器之OVN实验二:使用OVN配置路由器

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