创建名称空间r0,创建一对网卡,把名称空间r0和虚拟交换机连接起来,并提供dhcp服务;配置yum源,更新iproute,默认6没有netns
vim /etc/yum.repos.d/rdo-release.repo
[openstack-kilo]
name=OpenStack Kilo Repository
baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/
skip_if_unavailable=0
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-kilo
yum install iproute
ip link add sif0 type veth peer name rif0
ip netns add r0
ip netns exec r0 dnsmasq -F 10.0.4.200,10.0.4.220,86400 -i rif0
激活sif0网卡,并添加至br-in桥上
ip link set sif0 up
ovs-vsctl add-port br-in sif0
把rif0添加至名称空间r0内,并激活rif0和本地回环接口lo,配置rif0地址
ip link set rif0 netns r0
ip netns exec r0 ip link set rif0 up
ip netns exec r0 ip link set lo up
ip netns exec r0 ip addr add 10.0.4.254/24 dev rif0
if [ -n "$1" ]; then
ip link set $1 up
sleep 1
ovs-vsctl add-port $bridge $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo "Error: no port specified."
exit 2
fi
if-down内容如下:
#!/bin/bash
#
bridge=br-in
if [ -n "$1" ]; then
ip link set $1 down
sleep 1
ovs-vsctl del-port $bridge $1
[ $? -eq 0 ] && exit 0 }} exit 1
else
echo "Error: no port specified."
exit 2
fi
执行上面这条命令如果报错:ovs-vsctl: Error detected while setting up 'gre0'. See ovs-vswitchd log for details.,就忽略它,实际上已经添加成功了
接着在激活gre0,并设置隧道相关配置
ip link set gre0 up
ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.77.1
主机2上也执行相同的操作,remote_ip设置为主机3上eth1的地址,即192.168.77.2
ovs-vsctl add-port br-in gre0
ip link set gre0 up
ovs-vsctl set interface gre0 type=gre options:remote_ip=192.168.77.2
但这里我们要求vm1不能和vm2通信,vm3不能和vm4通信,所以我们还需要设置vif0.0和vif1.0端口上tag标签,给他们家标签,vm1和vm3设置同一个标签,vm2和vm4设置成同一个标签(分别在两台机器上操作)
ovs-vsctl set port vif0.0 tag=10
ovs-vsctl set port vif1.0 tag=10
目的3实现操作:
这里我们是让主机2和主机4通过隧道实现通信的,我们把主机2和主机3相关的隧道功能配置删除,重新配置,这里直接删除桥br-in上面的端口gre0,并移除tag所赋的值,分别在两台主机上(主机2和主机3)操作
ovs-vsctl del-port br-in gre0
ovs-vsctl remove port vif0.0 tag 10
ovs-vsctl remove port vif1.0 tag 20
在创建虚拟路由,通过网络名称空间,这台主机是centos7,默认带netns功能,升级操作就省略了,如果你是6版本,按照上面的操作进行升级
ip netns add r0
创建一对网卡,用来连接虚拟交换机和虚拟路由
ip link add sin0 type veth peer name rin0
在桥br-in设备上添加端口sin0,在网络名称空间r0添加rin0
ovs-vsctl add-port br-in sin0
ip link set sin0 up
ip link set rin0 netns r0
ip netns exec r0 ip link set rin0 up
ip netns exec r0 ip addr add 10.0.4.100/24 dev rin0
然后再添加一对网卡,用来连接虚拟路由器和物理桥设备br-ex,并激活这对网卡,配置rex0的ip地址
ip link add rex0 type veth peer name sex0
ip link set sex0 up
brctl addif br-ex sex0
ip link set rex0 netns r0
ip netns exec r0 ip link set rex0 up
ip netns exec r0 ip addr add 172.31.225.248/24 dev rex0