三、使用open vswitch构建虚拟网络
1、构建物理机和物理机相互连接的网络
在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:
执行以下命令:
1
2
3
4
5
|
#ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
#ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
#ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中
|
2、构建虚拟机与虚拟机相连的网络
在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:
执行以下命令:
# ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
如果使用vbox或virt-manager把bridge设置为br0即可,如果使用cli kvm则先创建两个文件,用于虚拟网卡的添加于删除。假设这两个文件分别为/etc/ovs-ifup和/etc/ovs-ifdown,则向这两个文件中写入以下内容
/etc/ovs-ifup
--------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
|
#!/bin/sh
switch=
'br0'
/sbin/ifconfig
$1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1
|
--------------------------------------------------------------------
/etc/ovs-ifdown
--------------------------------------------------------------------
1
2
3
4
5
6
7
8
9
|
#!/bin/sh
switch=
'br0'
/sbin/ifconfig
$1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
|
--------------------------------------------------------------------
使用以下命令建立虚拟机
1
2
3
4
5
6
7
8
9
10
11
|
kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net \
tap,script=
/etc/ovs-ifup
,downscript=
/etc/ovs-ifdown-drive
\
file
=
/path/to/disk-image
,boot=on
kvm -m 512 -net nic,macaddr=11:22:33:44:55:66-net \
tap,script=
/etc/ovs-ifup
,downscript=
/etc/ovs-ifdown-drive
\
file
=
/path/to/disk-image
,boot=on
|
3、构建虚拟机与物理机相连的网络
在装有open vswitch的主机上有一个物理网卡eth0,一台主机通过网线和eth0相连,在open vswitch的主机上还装有一台虚拟机,把此虚拟机和连接到eth0的主机挂接到同一个网桥上,实现两者之间的通信,构建结果图如下:
执行命令:
1
2
3
4
5
6
7
8
9
|
# ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
# ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
# kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net \
tap,script=
/etc/ovs-ifup
,downscript=
/etc/ovs-ifdown-drive
\
file
=
/path/to/disk-image
,boot=on
//ovs-ifup
和ovs-ifdown和上一节中相同
|
4、构建网桥和网桥相连的网络
以上操作都是将多个主机(物理机或虚拟机)连接到同一个网桥上,实现它们之间的通信,但是要构建复杂的网络,就需要多个网桥,在装有open vswitch的主机上建立两个网桥,实现它们之间的连接,构建结果如下:
执行命令:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
ovs-vsctl add-br br0
//
添加一个名为br0的网桥
ovs-vsctl add-br br1
//
添加一个名为br1的网桥
ovs-vsctl add-port br0 patch-to-br1
//
为br0添加一个虚拟端口
ovs-vsctl
set
interface patch-to-br1
type
=patch
// 把patch-to-br1的类型设置为patch
ovs-vsctl
set
interface patch-to-br1 options:peer=patch-to-br0
// 把对端网桥和此网桥连接的端口名称设置为patch-to-br0
ovs-vsctl add-port br1 patch-to-br0
//
为br1添加一个虚拟端口
ovs-vsctl
set
interface patch-to-br0
type
=patch
//
把patch-to-br0的类型设置为patch
ovs-vsctl
set
interface patch-to-br0 options:peer=patch-to-br1
//
把对端网桥和此网桥连接的端口名称设置为patch-to-br1
|
ovs-vsctl set interface patch-to-br0type=patch 和ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1是对ovs-database的操作,有有兴趣的同学可以参考ovs-vswitchd.conf.db.5
5、在不同的主机之间构建网桥之间的连接
在两台机器上分别安装上open vswitch并创建网桥,分别为两个网桥添加物理网卡,然后通过网线连接两个网桥,实现两个网桥之间的互通。构建结果图如下:
执行命令:
host1
----------------------------------------------------------
1
2
3
|
#ovs-vsctl add-br br0 //添加名为br0的网桥
#ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
|
host2
----------------------------------------------------------
1
2
3
|
#ovs-vsctl add-br br0 //添加名为br0的网桥
#ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
|
然后使用网线把host1的eth0和host2的eth0相连即可。
使用上边五种方法的组合就可以构建出各种复杂的网络,为各种实验提供网络的支持。