搭建基于Open vSwitch的VxLAN隧道实验
2015-05-21 14:48
218 查看
搭建基于Open vSwitch的VxLAN隧道实验
偶然左岸
• 14-12-19
• 3,620 人围观
VXLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多。Linux 内核的 upstream 中也刚刚加入 VXLAN 的实现。相比 GRE tunnel 它有着很好的扩展性,同时解决了很多其它问题。
从数量上讲,它把 12 bit 的 VLAN tag 扩展成了 24 bit。从实现上讲,它是 L2 over UDP,它利用了UDP 同时也是 IPv4 的单播和多播,可以跨 L3 边界,很巧妙地解决了 GRE tunnel 和 VLAN 存在的不足,让组网变得更加灵活。
Linux内核模块在支持Open vSwitch之后又加入了支持隧道的功能,但是某些内核版本的的Linux可能只支持Open vSwitch而不支持隧道技术。支持隧道技术的对应最低Linux内核版本如下:
本实验操作系统是在两台虚拟机中安装的基于3.13Linux内核版本的Ubuntu 14.04.1,满足VXLAN正常运行的条件。同时需要安装好Open vSwitch,本实验安装的是Open vSwitch 2.3.0版本,具体安装步骤详见《Open
vSwitch2.3.0版本安装部署及基本操作》。
本实验创建两台虚拟机并启动OpenvSwitch服务,最后创建VXLAN隧道并进行验证。实验中用到的网络拓扑如下:
注:因为实验本身就是在虚拟环境下操作,所以实验中br1桥上实际上并没有再下挂任何主机,实验中我们是分别给两台虚拟机的br1指定两个不同网段的ip,然后通过搭建VXLAN隧道让这两个不同网段的网桥能够实现通信。
启动好OVS服务后,我们先配置一下Host1。
在Host1上添加名为br0和br1的两个网桥:
在br0上添加一个端口,将eth0挂载到br0上。这样做的目的是方便我们在虚拟网桥上添加多个端口供我们使用,这样不必受限于eth0的有限端口。
此时我们将原先eth0分配的ip清除并指定给br0,让虚拟机网络能通过br0继续工作。
根据实际情况配置一下br0的网关。
给br1网桥分配一个ip。
给Host2的br1网桥分配一个和Host1中br1不同网段的ip。
从上面三组数据可以看出两个主机之间的br0是可以相互通信的,各自的br0和br1之间可以相互通信,但是一方的br0或br1和另一方的br1则不能通信,我们搭建隧道的目的就是让两台机器的br1能够实现通信。
1. 在Host1上设置VXLAN,远端ip设置为Host2能对外通信的br0的ip。
2. 在Host2上设置VXLAN,远端ip设置为Host1能对外通信的br0的ip。
两台机器的br1互ping可以实现正常通信:
同时通过抓包证明数据包的使用协议的确是VXLAN,具体见下图:
本实验搭建了基于Open vSwitch的VXLAN隧道,实现了不同网段内网机器的通信。实验是基于Open vSwitch的虚拟交换机进行实验的,有条件的朋友可以在真实环境中实验一下。
偶然左岸
• 14-12-19
• 3,620 人围观
1. VXLAN简介
VXLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多。Linux 内核的 upstream 中也刚刚加入 VXLAN 的实现。相比 GRE tunnel 它有着很好的扩展性,同时解决了很多其它问题。从数量上讲,它把 12 bit 的 VLAN tag 扩展成了 24 bit。从实现上讲,它是 L2 over UDP,它利用了UDP 同时也是 IPv4 的单播和多播,可以跨 L3 边界,很巧妙地解决了 GRE tunnel 和 VLAN 存在的不足,让组网变得更加灵活。
2. 实验环境
Linux内核模块在支持Open vSwitch之后又加入了支持隧道的功能,但是某些内核版本的的Linux可能只支持Open vSwitch而不支持隧道技术。支持隧道技术的对应最低Linux内核版本如下:本实验操作系统是在两台虚拟机中安装的基于3.13Linux内核版本的Ubuntu 14.04.1,满足VXLAN正常运行的条件。同时需要安装好Open vSwitch,本实验安装的是Open vSwitch 2.3.0版本,具体安装步骤详见《Open
vSwitch2.3.0版本安装部署及基本操作》。
3. 基于Open vSwitch的VxLAN隧道搭建
本实验创建两台虚拟机并启动OpenvSwitch服务,最后创建VXLAN隧道并进行验证。实验中用到的网络拓扑如下:注:因为实验本身就是在虚拟环境下操作,所以实验中br1桥上实际上并没有再下挂任何主机,实验中我们是分别给两台虚拟机的br1指定两个不同网段的ip,然后通过搭建VXLAN隧道让这两个不同网段的网桥能够实现通信。
3.1 配置Host1
启动好OVS服务后,我们先配置一下Host1。在Host1上添加名为br0和br1的两个网桥:
12 | # ovs-vsctl add-br br0# ovs-vsctl add-br br1 |
1 | # ovs-vsctl add-port br0 eth0 |
1 | # ifconfig eth0 0 up && ifconfig br0 192.168.146.131 |
1 | # route add default gw 192.168.146.2 br0 |
1 | # ifconfig br1 10.0.0.1 |
3.2 配置Host2
按Host1同样步骤来配置Host2。1 2 3 4 5 | # ovs-vsctl add-br br0 # ovs-vsctl add-br br1 # ovs-vsctl add-port br0 eth0 # ifconfig eth0 0 up && ifconfig br0 192.168.146.136 # route add default gw 192.168.146.2 br0 |
1 | # ifconfig br1 10.0.1.1 |
3.3 搭建VXLAN隧道
在搭建隧道之前我们先测试一下两台虚拟机Host1和Host2上的br0和br1两两之间是否能相互通信。1 2 3 4 5 | root@ubuntu:~# ping 192.168.146.136 ## Host1 ping Host2的br0 PING 192.168.146.136 (192.168.146.136) 56(84) bytes of data. 64 bytes from 192.168.146.136: icmp_seq=1 ttl=64 time=1.88 ms 64 bytes from 192.168.146.136: icmp_seq=2 ttl=64 time=0.703 ms …… |
12345 | root@ubuntu:~# ping 10.0.0.1 ## Host1 ping Host1的 br1PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.024 ms64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.058 ms…… |
1 2 3 4 5 | root@ubuntu:~# ping 10.0.0.1 ## Host1 ping Host2的br1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.024 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.058 ms …… |
1. 在Host1上设置VXLAN,远端ip设置为Host2能对外通信的br0的ip。
1 | # ovs-vsctl add-port br1 vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.146.136 |
2. 在Host2上设置VXLAN,远端ip设置为Host1能对外通信的br0的ip。
1 | # ovs-vsctl add-port br1 vx1 -- set interface vx1 type=vxlan options:remote_ip=192.168.146.131 |
3.4 验证VxLAN隧道
两台机器的br1互ping可以实现正常通信:1 2 3 4 5 6 7 8 9 10 11 | root@ubuntu:~# ping 10.0.1.1 PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data. 64 bytes from 10.0.1.1: icmp_seq=1 ttl=64 time=15.4 ms 64 bytes from 10.0.1.1: icmp_seq=2 ttl=64 time=0.715 ms …… root@ubuntu:~# ping 10.0.1.1 PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data. 64 bytes from 10.0.1.1: icmp_seq=1 ttl=64 time=15.4 ms 64 bytes from 10.0.1.1: icmp_seq=2 ttl=64 time=0.715 ms …… |
4. 结论
本实验搭建了基于Open vSwitch的VXLAN隧道,实现了不同网段内网机器的通信。实验是基于Open vSwitch的虚拟交换机进行实验的,有条件的朋友可以在真实环境中实验一下。
相关文章推荐
- 搭建基于Open vSwitch的VxLAN隧道实验
- 搭建基于Open vSwitch的VxLAN隧道实验
- 搭建基于Open vSwitch的GRE隧道实验
- 基于Open vSwitch搭建虚拟路由器
- 基于Open vSwitch搭建虚拟路由器
- 第三章:基于第二章的HIVE搭建实验
- 基于Eclipse的Perl的IDE软件EPIC出现Insecure dependency in open while running with -T switch错误!
- 基于LinuxOPENldap实验之账户管理
- 基于 Open vSwitch 的 OpenFlow 实践
- 第四章:基于第二章HBase集群搭建实验
- CentOS7上配置Open vSwitch和VXLAN实例
- 基于Open vSwitch的OpenFlow实践
- Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码。代码基于Python,需要用到的外部库有: Keras(搭建神经网络) S
- 基于 Open vSwitch 的 OpenFlow 实践
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库——安装配置OPEN-SSH,设置主机节点之间免密互访
- GRE and VXLAN with Open vSwitch
- 基于XV6操作系统实验平台建设和哈工大操作系统实验 的搭建实验环境
- 第五章:基于第四章spark集群搭建实验
- Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)