在OpenStack网络指导手册-基本网络概念这篇博文中,我翻译了网络的一些基本概念,没有做过实践的同学可能觉得依然很抽象。在本博文中我会试图通过对openvswitch虚拟机交换机的实践让大家对交换机的基本概念有更深入的理解。
本博文的内容包含以下内容
查看操作系统信息
$ 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。
本实验的目的是测试同一台交换机上两个网络端口的连通性。
图 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上的两个网络端口之间是连通的。
本实验将在实验一的基础上为端口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无法通信。
在本实验中,我会再创建一台交换机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