您现在的位置是:首页 >技术教程 >构建OVS网络网站首页技术教程

构建OVS网络

傻傻的心动 2023-06-26 16:00:02
简介构建OVS网络

构建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

启动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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。