当前位置: 首页 > news >正文

[原] 利用 OVS 建立 VxLAN 虚拟网络实验

OVS 配置 VxLAN

                 HOST A
------------------------------------------
|       zh-veth0(10.1.1.1) VM A          |
|       ---|----                         |
|          |                             |
|          |  |------------|             |
|  zh-veth1|--|  zh-br-int |             |
|             |------------|             |
-----------------| eth0 |-----------------
                    |(172.17.6.223)
                    |                                                 HOST B
                    |                               ------------------------------------------
                    |                               |       zh-veth0(10.1.1.2)   VM B        |
                    |                               |       ---|----                         |
                    |                               |          |                             |
                    |                               |          |  |------------|             |
                    |                               |  zh-veth1|--|  zh-br-int |             |
                    |                               |             |------------|             |
                    |                               -----------------| eth0 |-----------------
                    |                                                   |(172.17.6.249)
                    |---------------------------------------------------|

背景知识

网络地址空间: Linux network namespace(netns)

用于隔离同一台宿主机的不同网络配置,是Linux namespace的一个子系统.
root@ubuntu:~# ip netns add zh 将创建一个网络地址空间命名为zh.
网络地址空间在docker或者LXC 还有一些虚拟化软件里面被广泛使用.

OVS: Open Virtual Switch

用于在Linux上虚拟出交换机,用软件形式模拟交换机的工作,同时也支持openflow等控制协议.

VxLAN

有种overlay技术,本质为利用UDP封装二层协议,建立三层的隧道,此隧道转发二层协议。
利用VxLAN可以突破VLAN的4096个限制,实现同一个网断下不同租户的隔离.

实验

通过配置VxLAN, 使得vm A 与 vm B 能够互相通信

步骤
1. 建立虚拟交换机
2. 将eth0 挂载到虚拟交换机
3. 利用网络地址空间,模拟出VM网卡对
4. 为虚拟机配置IP
5. 建立HOST A与HOST B的VxLAN 隧道
步骤详细
1. 建立虚拟交换机
root@ubuntu:~# ovs-vsctl br-add zh-br-int
此处创建了一个名为zh-br-int的交换机,如上图所示

root@ubuntu:~# ovs-vsctl show
0979572b-2478-4f6c-9d48-82f9ec58da7c
        Port zh-br-int
            Interface zh-br-int
                type: internal
        Port "eth0"
            Interface "eth0"
    ovs_version: "1.4.6"
2. 将eth0挂载到虚拟交换机
root@ubuntu:~# ovs-vsctl add-port zh-br-int eth0 \
&& ifconfig eth0 0.0.0.0 && ip a add 172.17.6.223/16 brd + dev zh-br-int \
&& ip r add default via 172.17.0.1
 
将eth0挂载到交换机,以为着交换机直接与外部网络连接起来,这时候需要将原来的eth0的IP配置到虚拟交换机上,也就是 zh-br-int 这个接口,默认情况下,创建的交换机都会有一个与其相同命名的接口,用来对此交换机做配置,不然交换机是没有IP这个概念的.
除了配置IP外,还需要加上默认网关。
这里的命令需要一次性完成,不然挂载eth0到交换机会且配置eth0的过程会导致网络端口,除非你有两块网卡可以避免这种问题.

配置完后可以看到在网卡配置下面是这样的
root@ubuntu:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:5d:45:a7  
          inet6 addr: fe80::20c:29ff:fe5d:45a7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1043789006 errors:4 dropped:2648455 overruns:0 frame:0
          TX packets:4136534 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:79136937123 (79.1 GB)  TX bytes:1685730355 (1.6 GB)
          Interrupt:19 Base address:0x2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2029312 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2029312 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1075915373 (1.0 GB)  TX bytes:1075915373 (1.0 GB)

zh-br-int Link encap:Ethernet  HWaddr 00:0c:29:5d:45:a7  
          inet addr:172.17.6.223  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe5d:45a7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:18748892 errors:0 dropped:12476 overruns:0 frame:0
          TX packets:88498 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3315299018 (3.3 GB)  TX bytes:18437372 (18.4 MB)
3. 利用网络地址空间,模拟出VM网卡对
root@ubuntu:~# ip netns add zh
root@ubuntu:~# ip netns
zh

创建了网络地址空间,这里可以看做,zh 就是虚拟机的网络,进入 zh 配置就是进行虚拟机的配置.

root@ubuntu:~# ip link add zh-veth0 type veth peer name zh-veth1
root@ubuntu:~# ip link set veth0 netns zh

对应了图的两个接口,一个是 zh-veth0 是虚拟机的网络接口,一个 zh-veth1 的交换机的接口
这里将 zh-veth0 放入到了网络地址空间zh, 意味着在宿主机上是看不见这个网口的,他在虚拟机中与 zh-veth1 是可以看做一条网线接着的两个口.

root@ubuntu:~# ovs-vsctl add-port br-int zh-veth1
root@ubuntu:~# ifconfig zh-veth1
zh-veth1  Link encap:Ethernet  HWaddr c6:c6:9b:7f:bb:73  
          inet6 addr: fe80::c4c6:9bff:fe7f:bb73/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:79 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9775120 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6669 (6.6 KB)  TX bytes:1585140114 (1.5 GB)

这样就在本地虚拟交换机与VM之间建立了一条连接

root@ubuntu:~# ip netns exec zh ip link set zh-veth0 up

将VM中的zh-veth0置为UP

root@ubuntu:~# ip netns exec zh ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
13: zh-veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 5a:bb:cb:54:6c:2f brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.1/24 scope global zh-veth0
       valid_lft forever preferred_lft forever
    inet6 fe80::58bb:cbff:fe54:6c2f/64 scope link 
       valid_lft forever preferred_lft forever
4. 为虚拟机配置IP
root@ubuntu:~# ip netns exec zh ip addr add 10.1.1.1/24 dev zh-veth0
root@ubuntu:~# ip link set zh-veth1 up
命令 ip netns exec zh 这一串代表了进入zh 进行网络操作,可以看做是配置虚拟机 zh 的网路
这里给 VM A 配置 IP 地址为 10.1.1.1/24 , 这个地址不同于本地网路的 172.17.0.0/16 地址段,是一个完全私有的地址段,这也就是虚拟网络的虚拟局域网概念
5. 建立HOST A与HOST B的VxLAN 隧道
root@ubuntu:~# ovs-vsctl add-port zh-br-int zh-vxlan0 -- set interface zh-vxlan0 type=vxlan options:remote_ip=172.17.6.249

HOST B 上面的配置与 HOST A相同,只不过VM 的IP需要配置为对端的,并且VxLAN隧道的remote_ip也不一样.

结果

我们在 VM B 上面启动一个 HTTP Server

root@ubuntu:~# ip netns exec zh python -m SimpleHTTPServer

在 VM A 上利用 curl 访问

root@ubuntu:~# ip netns exec zh curl 10.1.1.2:8000

在 VM B 上看到日志
10.1.1.1 - - [24/Sep/2015 18:06:10] "GET / HTTP/1.1" 200 -
10.1.1.1 - - [24/Sep/2015 18:08:29] "GET / HTTP/1.1" 200 -
10.1.1.1 - - [24/Sep/2015 18:08:34] "GET / HTTP/1.1" 200 -
10.1.1.1 - - [25/Sep/2015 15:03:06] "GET / HTTP/1.1" 200 -

转载于:https://www.cnblogs.com/Bozh/p/4838304.html

相关文章:

  • Swift - 几种使用数组的数据存储模型
  • Good Luck in CET-4 Everybody!(博弈)
  • Learning Joomla! 3 Extension Development-Third Edition_翻译
  • JavaBean 基础概念、使用实例及代码分析
  • iOS—静态方法(类方法)和实例方法
  • [HDOJ4911]Inversion
  • MySQL的Auto-Failover功能
  • (转)菜鸟学数据库(三)——存储过程
  • Swift - 禁用UIWebView和WKWebView的下拉拖动效果
  • ubuntu上hadoop 单节点伪分布式安装测试
  • 开发npm模块经验总结
  • Fiddler
  • 菜鸟的it之路-起航
  • 10分钟掌握XML、JSON及其解析
  • WIN32编程经验总结
  • flask接收请求并推入栈
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript设计模式与开发实践系列之策略模式
  • ng6--错误信息小结(持续更新)
  • React16时代,该用什么姿势写 React ?
  • Selenium实战教程系列(二)---元素定位
  • SQLServer之创建数据库快照
  • webpack4 一点通
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 前端技术周刊 2019-01-14:客户端存储
  • 新版博客前端前瞻
  • 新书推荐|Windows黑客编程技术详解
  • 译自由幺半群
  • 怎么将电脑中的声音录制成WAV格式
  • Linux权限管理(week1_day5)--技术流ken
  • 阿里云移动端播放器高级功能介绍
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (1)虚拟机的安装与使用,linux系统安装
  • (2022 CVPR) Unbiased Teacher v2
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***监测系统的构建(chkrootkit )
  • ./configure,make,make install的作用
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net(C#)中String.Format如何使用
  • .NET程序员迈向卓越的必由之路
  • .NET处理HTTP请求
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @Autowired @Resource @Qualifier的区别
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20180129]bash显示path环境变量.txt
  • [Angular] 笔记 20:NgContent
  • [BZOJ1178][Apio2009]CONVENTION会议中心