Linux bridge方式虚拟机ping过程解析

本文详细解析了在LinuxBridge方式下虚拟机间的网络通信过程,包括虚拟机ping过程中的mac表项查找及变化、网络拓扑搭建等关键技术点。

Linuxbridge方式虚拟机ping过程解析

1、 拓扑、环境


在三台服务器上分别创建三台虚拟机,三台虚拟机满足:

1)  在同一个租户的一个内网中;

2)  都绑定外网ip,即floatingip;

3)   分别在三台计算节点上。

2、 虚拟机、bridge表项查找过程

表项查找过程为:

2.1登陆一台虚拟机(vm1),找到绑定内网ip网卡(eth0)对应的mac地址;

登陆虚拟机,使用ip addr命令

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

      valid_lft forever preferred_lft forever

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

3: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether fa:16:3e:6a:eb:ec brd ff:ff:ff:ff:ff:ff

   inet 10.0.1.10 /24 brd 10.0.1.255 scope global eth0

      valid_lft forever preferred_lft forever

   inet6 fe80::20c:29ff:fe64:ee9/64 scope link

      valid_lft forever preferred_lft forever

2.2登陆所有计算节点/网络节点,查找vm1所在的计算节点和dhcp;

在所有网络节点上使用linux命令查找:

grep -nr ' fa:16:3e:6a:eb:ec '/var/lib/neutron/dhcp/

在所有计算节点上使用linux命令查找:

grep -nr ' fa:16:3e:6a:eb:ec ' /var/lib/nova/instances/

找到后查看dhcp 下面的host文件:

[root@10-10-1-33 ~]# cat/var/lib/neutron/dhcp/72e4e728-98e7-48ff-8d4c-976c5bc4be6c/host

fa:16:3e:32:d3:b3,host-10-0-1-9.openstacklocal,10.0.1.9

fa:16:3e:3b:2b:90,host-10-0-1-4.openstacklocal.,10.0.1.4

fa:16:3e:3d:77:50,host-10-0-1-1.openstacklocal.,10.0.1.1

fa:16:3e:41:62:3c,host-10-0-1-5.openstacklocal.,10.0.1.5

fa:16:3e:4b:54:33,host-10-0-1-8.openstacklocal,10.0.1.8

fa:16:3e:56:0e:c7,host-10-0-1-6.openstacklocal.,10.0.1.6

fa:16:3e:86:34:8f,host-10-0-1-2.openstacklocal.,10.0.1.2

fa:16:3e:c9:c5:ea,host-10-0-1-3.openstacklocal.,10.0.1.3

fa:16:3e:6a:eb:ec,host-10-0-1-10.openstacklocal,10.0.1.10

fa:16:3e:34:11:b2,host-10-0-1-11.openstacklocal,10.0.1.11

fa:16:3e:db:64:dd,host-10-0-1-12.openstacklocal,10.0.1.12

查看dhcp netns的网卡信息:

[root@10-10-1-33 test]# ip netns execqdhcp-72e4e728-98e7-48ff-8d4c-976c5bc4be6c ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

      valid_lft forever preferred_lft forever

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: ns-f6cd140c-24:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether fa:16:3e:86:34:8f brd ff:ff:ff:ff:ff:ff

   inet 10.0.1.2/24 brd 10.0.1.255 scopeglobal ns-f6cd140c-24

      valid_lft forever preferred_lft forever

   inet 169.254.169.254/16 brd 169.254.255.255 scope global ns-f6cd140c-24

      valid_lft forever preferred_lft forever

   inet6 fe80::f816:3eff:fe86:348f/64 scope link

      valid_lft forever preferred_lft forever

2.3根据nova libvirt配置找到vm1对应的tap设备、计算节点linuxbridge、vxlan;

在2.2找到虚拟机所在的计算节点上查看libvirt.xml配置文件

[root@10-10-1-33 ~]# cat/var/lib/nova/instances/66d40651-fbc6-4a7f-af64-bda6fa9b65c5/libvirt.xml

<domain type="kvm">

  ……

 <devices>          

   <interface type="bridge">

     <mac address="fa:16:3e:6a:eb:ec"/>        //mac地址

     <model type="virtio"/>

     <source bridge="brq72e4e728-98"/>        //虚拟机绑定的网桥

     <target dev="tap4d744f00-61"/>           //虚拟机上的tap设备

   </interface>

   ……

 </devices>

</domain>

查看linux bridge信息:

[root@10-10-1-33 ~]# brctl show                            

bridge name    bridgeid          STP enabled    interfaces             

brq250835de-97             8000.5acdf3088b88       no            eth2.303         

                                                           tap11dc1a7e-30                               

                                                           tap53efabcb-5a                               

                                                           tap73a4a085-2a                               

                                                           tapa366e2c4-d9                               

                                                           tapba7441cc-25                               

                                                           tapcbed9baa-26                               

brq72e4e728-98             8000.0a2cbb058421      no            tap08962bcf-5e   

                                                           tap10b45a78-e5                               

                                                           tap4d744f00-61                               

                                                           tapf6cd140c-24                               

                                                           vxlan-11                           

2.4查找vm1连接的router、外网linux bridge、外网出接口、tap设备

在所有网络节点上查看ip netns,然后查看每个netns,找到router:

[root@10-10-1-33 ~]# ip netns execqrouter-5ccadf1b-cb5d-44d0-a2f8-c9a7b54cabe4 ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu65536 qdisc noqueue state UNKNOWN

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

   inet 127.0.0.1/8 scope host lo

      valid_lft forever preferred_lft forever

   inet6 ::1/128 scope host

      valid_lft forever preferred_lft forever

2: qr-58a0b2b4-10: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000

   link/ether fa:16:3e:ed:2a:9b brd ff:ff:ff:ff:ff:ff

   inet 10.0.0.1/24 brd 10.0.0.255 scope global qr-58a0b2b4-10

      valid_lft forever preferred_lft forever

   inet6 fe80::f816:3eff:feed:2a9b/64 scope link

      valid_lft forever preferred_lft forever

3: qr-08962bcf-5e:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether fa:16:3e:3d:77:50 brd ff:ff:ff:ff:ff:ff

   inet 10.0.1.1/24 brd 10.0.1.255 scopeglobal qr-08962bcf-5e   连接vm所在内网的端口ip

      valid_lft forever preferred_lft forever

   inet6 fe80::f816:3eff:fe3d:7750/64 scope link

      valid_lft forever preferred_lft forever

4: qg-73a4a085-2a:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether fa:16:3e:74:16:da brd ff:ff:ff:ff:ff:ff

   inet 192.168.3.25/24 brd 192.168.3.255 scope global qg-73a4a085-2a

      valid_lft forever preferred_lft forever

   inet 192.168.3.34/32 brd 192.168.3.34scope global qg-73a4a085-2a   floatingip1

      valid_lft forever preferred_lft forever

   inet 192.168.3.33/32 brd 192.168.3.33scope global qg-73a4a085-2a   floatingip2

      valid_lft forever preferred_lft forever

   inet 192.168.3.35/32 brd 192.168.3.35scope global qg-73a4a085-2a   floatingip3

      valid_lft forever preferred_lft forever

   inet6 fe80::f816:3eff:fe74:16da/64 scope link

      valid_lft forever preferred_lft forever

5: qr-18f43b67-46:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen1000

   link/ether fa:16:3e:88:40:e3 brd ff:ff:ff:ff:ff:ff

   inet 10.0.88.1/24 brd 10.0.88.255 scope global qr-18f43b67-46

      valid_lft forever preferred_lft forever

   inet6 fe80::f816:3eff:fe88:40e3/64 scope link

      valid_lft forever preferred_lft forever

2.5根据dhcp中的host文件获取vm2、vm3的mac地址、对应的计算节点、tap设备、计算节点linux bridge、vxlan;

根据dhcp中的host文件获取vm2、vm3的mac地址(也可以用步骤1获取),查找vm2、vm3对应的计算节点、tap设备、计算节点linux bridge、vxlan。即重复上面的2.2、2.3、2.4。

 

根据以上获取的信息可以画出1中的拓扑图。

3、 Ping过程bridge上mac表项变化情况

三台计算节点上连接虚拟机的网桥名字都是brq72e4e728-98。初始状态三个网桥上的mac地址为:

[root@10-10-1-33 ~]#  brctlshowmacs brq72e4e728-98 

port no    mac addr         is local?   ageing timer          

  3  0a:2c:bb:05:84:21  yes             0.00                 

  3  0a:2c:bb:05:84:21  yes             0.00                 

  2  d6:1c:c7:6c:a5:68   yes             0.00                 

  2  d6:1c:c7:6c:a5:68   yes             0.00                 

  1  f2:f5:5a:67:04:f5    yes             0.00                 

  1  f2:f5:5a:67:04:f5    yes             0.00                 

  4  fa:16:3e:41:62:3c   no            244.04                 

  1  fa:16:3e:4b:54:33   no              5.08                 

  2  fa:16:3e:86:34:8f    no              5.08                 

  4  fe:16:3e:41:62:3c   yes             0.00                 

  4  fe:16:3e:41:62:3c   yes             0.00                 

  5  fe:16:3e:6a:eb:ec    yes              0.00                  vm1-mac

  5  fe:16:3e:6a:eb:ec    yes             0.00                 

 

[root@10-10-1-34 ~]# brctl showmacs brq72e4e728-98  

    port no     mac addr         islocal?   ageing timer         

      2   7a:2d:61:cc:e0:a6   yes             0.00                 

      2   7a:2d:61:cc:e0:a6   yes             0.00                

      4   fa:16:3e:4b:54:33   no             29.62                

      2   fa:16:3e:86:34:8f    no             29.62                

      5   fe:16:3e:34:11:b2   yes              0.00                 vm2-mac

      5   fe:16:3e:34:11:b2   yes             0.00                

      1   fe:16:3e:3b:2b:90   yes             0.00                

      1   fe:16:3e:3b:2b:90   yes             0.00                

      4   fe:16:3e:4b:54:33   yes             0.00                

      4   fe:16:3e:4b:54:33   yes             0.00                 

      3   fe:16:3e:56:0e:c7   yes             0.00                

      3   fe:16:3e:56:0e:c7   yes             0.00                

 

[root@10-10-1-37 ~]#  brctlshowmacs brq72e4e728-98 

 port no  mac addr         islocal?   ageing timer         

   2 f2:15:8c:33:ed:22   yes             0.00                

   2 f2:15:8c:33:ed:22   yes             0.00                

   2 fa:16:3e:4b:54:33   no            161.63                

   1 fe:16:3e:c9:c5:ea    yes             0.00                

   1 fe:16:3e:c9:c5:ea    yes             0.00                

   3 fe:16:3e:db:64:dd   yes              0.00                 vm3-mac

   3 fe:16:3e:db:64:dd   yes             0.00                

然后在vm2上ping vm1,在ping的过程中查看三个网桥上的mac地址:

[root@10-10-1-33 ~]#  brctlshowmacs brq72e4e728-98 

port no    mac addr         is local?   ageing timer          

  3  0a:2c:bb:05:84:21  yes             0.00                 

  3  0a:2c:bb:05:84:21  yes             0.00                 

  2  d6:1c:c7:6c:a5:68   yes             0.00                 

  2  d6:1c:c7:6c:a5:68   yes             0.00                 

  1  f2:f5:5a:67:04:f5    yes             0.00                 

  1  f2:f5:5a:67:04:f5    yes             0.00                 

  1  fa:16:3e:32:d3:b3   no              0.41                 

  1  fa:16:3e:34:11:b2   no               0.81                 

  1  fa:16:3e:4b:54:33   no             25.14                 

  5  fa:16:3e:6a:eb:ec    no               0.81                  

  2  fa:16:3e:86:34:8f    no              0.72                 

  4  fe:16:3e:41:62:3c   yes             0.00                 

  4  fe:16:3e:41:62:3c   yes             0.00                 

  5  fe:16:3e:6a:eb:ec    yes             0.00                 

  5  fe:16:3e:6a:eb:ec    yes             0.00                                                                       

                                                    

[root@10-10-1-34 ~]# brctl showmacs brq72e4e728-98

 port no  mac addr         islocal?   ageing timer        

   2 7a:2d:61:cc:e0:a6   yes             0.00               

   2 7a:2d:61:cc:e0:a6   yes             0.00               

   6 fa:16:3e:32:d3:b3   no              0.40               

   5 fa:16:3e:34:11:b2   no               0.09               

   2 fa:16:3e:3d:77:50   no              0.40               

   4 fa:16:3e:4b:54:33   no             23.62               

   2 fa:16:3e:6a:eb:ec    no               0.09               

   2 fa:16:3e:86:34:8f    no              4.02               

   6 fe:16:3e:32:d3:b3   yes             0.00               

   6 fe:16:3e:32:d3:b3   yes             0.00               

   5 fe:16:3e:34:11:b2   yes             0.00               

   5 fe:16:3e:34:11:b2   yes             0.00               

   1 fe:16:3e:3b:2b:90   yes             0.00               

   1 fe:16:3e:3b:2b:90   yes             0.00               

   4 fe:16:3e:4b:54:33   yes             0.00               

   4 fe:16:3e:4b:54:33   yes              0.00               

   3 fe:16:3e:56:0e:c7   yes             0.00               

   3 fe:16:3e:56:0e:c7   yes             0.00               

[root@10-10-1-37 ~]#  brctlshowmacs brq72e4e728-98  

port no    mac addr         is local?   ageing timer          

  2  f2:15:8c:33:ed:22   yes             0.00                 

  2  f2:15:8c:33:ed:22   yes             0.00                 

  2  fa:16:3e:4b:54:33   no            185.08                 

  1  fe:16:3e:c9:c5:ea    yes             0.00                 

  1  fe:16:3e:c9:c5:ea    yes             0.00                 

  3  fe:16:3e:db:64:dd   yes             0.00                 

  3  fe:16:3e:db:64:dd   yes             0.00                 

                                                    

这个过程可以看出:虽然三个网桥名字相同,但上面的mac地址不同,接口也不同,不是同一个网桥,只是名字相同,表示是同一个租户的同一个网络而已。

4、 抓包分析

Ping的过程中在三个网桥和router netns中进行抓包。

在vm2连接的网桥上:

在router上:

在vm1连接的网桥上:

在vm3连接的网桥上没有收到相关的数据包。

对抓取的数据包进行分析:

1)  vm2不知道vm1的mac地址,发送了arp广播请求给网关(router)、vm1,vm1进行arp相应,然后vm2将ping request数据包发给了网关(router);

2)  router将ping request数据包发给vm1;

3)  vm1没有vm2的mac地址,发送arp广播请求,vm2给与回应;vm1发送ping reply给vm2;

4)  vm2收到ping reply数据包。对于后续的ping request数据包则直接发给vm1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值