OpenStack网络实战系列一:通过Openvswitch实践了解交换机的基本概念和操作

在OpenStack网络指导手册-基本网络概念这篇博文中,我翻译了网络的一些基本概念,没有做过实践的同学可能觉得依然很抽象。在本博文中我会试图通过对openvswitch虚拟机交换机的实践让大家对交换机的基本概念有更深入的理解。

本博文的内容包含以下内容

  • 交换机的基本概念回顾
  • 实验环境介绍
  • 实验一:测试同一交换机上两个端口的网络连通性
  • 实验二:测试同一交换机上两个不同vlan tag网络端口不能通信说明vlan隔离
  • 实验三:测试两个交换机上的相同vlan tag的网络端口连通性演示trunk口的功能
本实验会用到openvswitch的基本操作和网络命名空间的知识,关于这两部分的操作请参考本文列出的参考资料。

交换机基本概念回顾

  • VLAN:VLAN是一种虚拟网络技术,它可以将一台物理交换机划分成多个逻辑交换机,使得每个逻辑交换机同独立的物理交换机一样。
  • VLAN ID:VLAN网络的ID标识。
  • Access口:access口是一个只能让一个当前绑定LAN通过的接口。每个access口都有自己的VLAN tag。
  • Trunk 口:trunk口是一个能让多条LAN通过的接口。

实验环境

查看操作系统信息

$ lsb_release -a
No LSB modules are available.
Distributor ID:            Ubuntu
Description:   Ubuntu 14.04.4 LTS
Release:          14.04
Codename:    trusty

查看openvswitch版本

$ ovs-vsctl -V
ovs-vsctl (Open vSwitch) 2.0.2
Compiled Dec  9 2015 14:08:08

实验一:两个网络节点在同一交换机上互相通信

本实验将创建一台交换机,并在交换机上创建两个网络端口p1和pp2,将p1和p2分别加入到网络命名空间ns1和ns2,并配置p1的IP地址为192.168.1.101,p2的IP地址为192.168.1.102。

本实验的目的是测试同一台交换机上两个网络端口的连通性。

OpenStack网络实战系列一:通过Openvswitch实践了解交换机的基本概念和操作_第1张图片

图 0‑1 一台交换机连接两个节点

1.       首先我用如下命令创建一台交换机switch1

sudo ovs-vsctl add-br switch1

2.       在交换机switch1上创建两个网络接口P1和P2

在Switch1上创建接口p1,并设置其类型为“internal”(允许配置IP地址)。

$ sudo ovs-vsctl add-port switch1 p1
$ sudo ovs-vsctl set Interface p1 type=internal

在Switch1上创建接口p2

$ sudo ovs-vsctl add-port switch1 p2
$ sudo ovs-vsctl set Interface p2 type=internal

3.       将p1加入命名空间ns1,将p2加入命名空间ns2,并分别配置IP地址

创建命名空间ns1

$ sudo ip netns add ns1

将p1加入到ns1

$ sudo ip link set p1 netns ns1

配置p1的IP地址为192.168.1.101

$ sudo ip netns exec ns1 ip addr add 192.168.1.101/24 dev p1
$ sudo ip netns exec ns1 ifconfig p1 up

创建命名空间ns2

$ sudo ip netns add ns2

将p2加入到ns2

$ sudo ip link set p2 netns ns2

配置p2的IP地址为192.168.1.102

$ sudo ip netns exec ns2 ip addr add 192.168.1.102/24 dev p2
$ sudo ip netns exec ns2 ifconfig p2 up

4.       从p1 ping p2,检查网络是否连通

$ sudo ip netns exec ns1 ping 192.168.1.102
PING 192.168.1.102 (192.168.1.102) 56(84) bytes of data.
64 bytes from 192.168.1.102: icmp_seq=1 ttl=64 time=0.446 ms
64 bytes from 192.168.1.102: icmp_seq=2 ttl=64 time=0.056 ms
64 bytes from 192.168.1.102: icmp_seq=3 ttl=64 time=0.057 ms

5.       从p2 ping p1检查网络是否连通

$ sudo ip netns exec ns2 ping 192.168.1.101
PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.348 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.054 ms

OK,本次实验完毕!实验结果证明交换机switch1上的两个网络端口之间是连通的。

实验二:在同一交换机上,两个隶属于不同VLAN的网络节点不能通信

OpenStack网络实战系列一:通过Openvswitch实践了解交换机的基本概念和操作_第2张图片

本实验将在实验一的基础上为端口p1和端口p2打上VLAN tag。其中p1的tag=101,p2的tag=102。从而证明即使在同一交换机上,不同vlan id的网络端口之间是无法通信的。

1.       设置p1的tag=101,设置p2的tag=102

将端口p1的vlan id设为101

$ sudo ovs-vsctl set Port p1 tag=101

将端口p2的vlan id设为102

$ sudo ovs-vsctl set Port p2 tag=102

2.       检查p1是否能够ping通p2

$ sudo ip netns exec ns2 ping 192.168.1.101
PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
--- 192.168.1.101 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms

实验结果证明,交换机switch1上的两个不同vlan tag的端口p1与p2无法通信。

实验三:两个连接到不同交换机上,但属于同一VLAN的网络节点可以互相通信

OpenStack网络实战系列一:通过Openvswitch实践了解交换机的基本概念和操作_第3张图片

在本实验中,我会再创建一台交换机switch2,在switch2上创建端口p3,并将其加入到网络命名空间ns3,赋予IP地址192.168.1.103。p3口的vlan tag设置为101。

此外,还需要为两个交换机分别创建trunk口:trunk_br1和trunk_br2,并且允许vlan tag为101和102的VLAN通过。

如果没有问题,本实验的预期结果是p1和p3可以相互ping通。

1.    创建虚拟交换vswitch2,并在其上创建端口p3

$ sudo ovs-vsctl add-br switch2
$ sudo ovs-vsctl add-port switch2 p3

2.    分别为switch1和switch2配置trunk口,并允许101和102的VLAN通过

$ sudo ovs-vsctl add-port switch1 trunk_br1
$ sudo ovs-vsctl add-port switch2 trunk_br2
$ sudo ovs-vsctl set Port trunk_br1 trunks=101,102
$ sudo ovs-vsctl set Port trunk_br2 trunks=101,102
$ sudo ovs-vsctl set interface trunk_br1 type=patch
$ sudo ovs-vsctl set interface trunk_br1 options:peer=trunk_br2
$ sudo ovs-vsctl set interface trunk_br2 type=patch
$sudo ovs-vsctl set interface trunk_br2 options:peer=trunk_br1

3.    创建命名空间ns3,并将p3加入到ns3中,设置p3的vlan tag=101设置IP地址为192.168.103。

$ sudo ip netns add ns3
$ sudo ovs-vsctl set Interface p3 type=internal
$ sudo ip link set p3 netns ns3
$ sudo ip netns exec ns3 ip addr add 192.168.1.103/24 dev p3
$ sudo ip netns exec ns3 ifconfig p3 up
$ sudo ovs-vsctl set Port p3 tag=101

4.    测试p3是否可以ping通p1

$ sudo ip netns exec ns3 ping 192.168.1.101
PING 192.168.1.101 (192.168.1.101) 56(84) bytes of data.
64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.646 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from 192.168.1.101: icmp_seq=3 ttl=64 time=0.049 ms

OK!实验结果证明p3可以ping通p1。

本博文只介绍了openvswitch的创建网桥、端口和划分vlan的基本操作,更多关于openvswitch的命令请参见参考资料部分的《openvswitch完全使用手册》

参考资料

openvswitch完全使用手册:http://blog.csdn.net/tantexian/article/details/46707175

openvswitch交换机互联:http://blog.scottlowe.org/2012/11/27/connecting-ovs-bridges-with-patch-ports/

Linux网络命名空间的基本操作:http://blog.csdn.net/dog250/article/details/26147357

 

你可能感兴趣的:(云计算,OpenStack,Linux技术)