构建OVS网络
1. 配置虚拟机环境
(1)配置虚拟机交换机
1 创建一个名为br-xd的虚拟交换机。
# ovs-vsctl add-br br-xd |
2 查询虚拟交换机。
# ovs-vsctl show 5a1cd870-fc31-4820-a7f4-b75c19450582 Bridge br-xd Port br-xd Interface br-xd type: internal |
3 确认组件安装。
在使用虚拟交换机之前首先确认TAP所需要的组件的组件是否安装。
#yum -y localinstall tunctl-1.5-26.14.x86_64.rpm (tunctl包上传至root目录) |
4 创建TAP设备,创建前需要确认tun模块是否被加载。
# tunctl -b -u root -t tap1 # tunctl -b -u root -t tap2 |
5 设备连接到虚拟交换机。
# ovs-vsctl add-port br-xd tap1 # ovs-vsctl add-port br-xd tap2 |
6 查看是否添加成功。
# ovs-vsctl show 5a1cd870-fc31-4820-a7f4-b75c19450582 Bridge br-xd Port "tap1" Interface "tap1" Port "tap2" Interface "tap2" Port br-xd Interface br-xd type: internal |
7 启动TAP设备。
# ip link set up tap1 # ip link set up tap2 |
(2)启动虚拟机
1 启动OVS1。
启动虚拟机之前首先创建两个镜像文件,拷贝本任务所提供的cirros-0.3.3-x86_64-disk.img为ovs1.img。
# cp -p cirros-0.3.3-x86_64-disk.img ovs1.img # /usr/libexec/qemu-kvm -drive file=ovs1.img -m 1024 -vnc :100 -net nic,macaddr=32:a9:76:d9:46:2b,model=virtio -net tap,ifname=tap1,script=no,downscript=no -name OVS1 -daemonize |
2 启动OVS2。
启动虚拟机之前首先创建镜像文件,拷贝本任务所提供的cirros-0.3.3-x86_64-disk.img为ovs2.img。
# cp -p cirros-0.3.3-x86_64-disk.img ovs2.img # /usr/libexec/qemu-kvm -drive file=ovs2.img -m 1024 -vnc :101 -net nic,macaddr=32:a9:76:d9:46:3a,model=virtio -net tap,ifname=tap2,script=no,downscript=no -name OVS2 -daemonize |
2. 登陆虚拟主机配置地址
1 VNC登陆虚拟主机,查看虚拟机的VNC端口。
通过netstat -ntpl命令可以查询qemu-kvm对应的实例监听的端口。
# netstat -ntpl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1092/rpcbind tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 7173/qemu-kvm tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 7201/qemu-kvm |
2 VNC登陆虚拟机。
通过查询虚拟机的VNC端口可以知道,OVS1虚拟机的端口为6000,OVS2的端口为6001,利用VNC Viewer登陆虚拟机。
登陆OVS1虚拟机,配置服务器地址为192.168.1.131:6000,如图4-10所示。配置完成后登陆主机,如图4-11所示。
图4-10 OVS1 VNC Viewer配置
图4-11 登陆OVS1虚拟机
登陆OVS2虚拟机,配置服务器地址为192.168.1.131:6001,如图4-12所示。配置完成后登陆主机,如图4-13所示。
图4-12 OVS2 VNC Viewer配置
图4-13 登陆OVS1 虚拟机
3 修改IP地址。
在OVS1上修改eth0的IP地址为10.0.1.2/24。
$sudo ifconfig eth0 10.0.1.2 netmask 255.255.255.0 |
在OVS2上修改eth0的IP地址为10.0.1.3/24。
# sudo ifconfig eth0 10.0.1.3 netmask 255.255.255.0 |
修改完成后检查两个节点之间的连通性。
# ping 10.0.1.3 -c 4 -I 10.0.1.2 PING 10.0.1.20 (10.0.1.20) from 10.0.2:56(84) bytes of data. 64 bytes from 10.0.1. 3: icmp_seq=1 ttl=255 time=1.04 ms 64 bytes from 10.0.1. 3: icmp_seq=2 ttl=255 time=1.13 ms 64 bytes from 10.0.1. 3: icmp_seq=3 ttl=255 time=0.438 ms 64 bytes from 10.0.1. 3: icmp_seq=4 ttl=255 time=0.134 ms --- 10.0.1. 3ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 0.134/0.687/1.138/0.417 ms |
3. OVS交换机操作
1 查询网桥信息。
在宿主机上查看Port信息, 确认虚拟机对应的Port ID。
# ovs-ofctl show br-xd OFPT_FEATURES_REPLY (xid=0x2): dpid:00005e440f43e144 n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst 1(tap1): addr:16:40:8d:ed:76:32 config: 0 state: 0 current: 10MB-FD COPPER speed: 10 Mbps now, 0 Mbps max 2(tap2): addr:8a:37:2f:e4:9b:b2 config: 0 state: LINK_DOWN current: 10MB-FD COPPER speed: 10 Mbps now, 0 Mbps max LOCAL(br-xd): addr:5e:44:0f:43:e1:44 config: PORT_DOWN state: LINK_DOWN speed: 0 Mbps now, 0 Mbps max OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0 |
2 查看流表信息。
# ovs-ofctl dump-flows br-xd NXST_FLOW reply (xid=0x4): cookie=0x0, duration=124323.206s, table=0, n_packets=3129, n_bytes=201115, idle_age=1, hard_age=65534, priority=0 actions=NORMAL |
3 检查OVS流表端口。
# ovs-ofctl dump-ports br-xd OFPST_PORT reply (xid=0x2): 3 ports port 10: rx pkts=6172, bytes=590184, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=6171, bytes=590086, drop=12, errs=0, coll=0 port 8: rx pkts=8576, bytes=759677, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=7278, bytes=684136, drop=18, errs=0, coll=0 port LOCAL: rx pkts=139, bytes=14672, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=687, bytes=48528, drop=0, errs=0, coll=0 |
4 流表删除操作。
由流表端口可以看出port8和port10为OVS1和OVS2两台KVM虚拟机的端口,从流表信息还可以看出由一条流表对应的规则actions为NORMAL,就是按普通交换机处理数据包。这里添加一条流,将来自OVS1对应Port的数据包全部丢弃,完成后再次检查OVS的数据流表信息。
# ovs-ofctl add-flow br-xd "priority=10,in_port=8,actions=drop" # ovs-ofctl dump-flows br-xd NXST_FLOW reply (xid=0x4): cookie=0x0, duration=175718.172s, table=0, n_packets=17735, n_bytes=1576239, idle_age=0, hard_age=65534, priority=0 actions=NORMAL cookie=0x0, duration=202.882s, table=0, n_packets=229, n_bytes=11410, idle_age=0, priority=10,in_port=8 actions=drop |
这时再次尝试检查两个节点之间的连通性。
# ping 10.0.1.3 -c 4 -I 10.0.1.2 PING 10.0.1. 3 (10.0.1.20) from 10.0. 2:56(84) bytes of data. --- 10.0.1. 3ping statistics --- 4 packets transmitted, 0 received, 100% packet loss |
5 恢复流表操作。
删除添加的流。
# ovs-ofctl del-flows br-xd in_port=8 |
删除完成后再次检查节点之间的连通性。
# ping 10.0.1.3 -c 4 -I 10.0.1.2 PING 10.0.1.20 (10.0.1.20) from 10.0.2:56(84) bytes of data. 64 bytes from 10.0.1. 3: icmp_seq=1 ttl=255 time=1.04 ms 64 bytes from 10.0.1. 3: icmp_seq=2 ttl=255 time=1.13 ms 64 bytes from 10.0.1. 3: icmp_seq=3 ttl=255 time=0.438 ms 64 bytes from 10.0.1. 3: icmp_seq=4 ttl=255 time=0.134 ms --- 10.0.1. 3ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 0.134/0.687/1.138/0.417 ms |