定位一个 ovs windows 2012 dhcpv6 无法获取 ip 的问题

2023年 9月 21日 50.1k 0

1. 开启安全组时

windows 2012 无法拿到 kube-ovn 分配的 ipv6 地址,只能拿到一个假的 fe80 开头的 ipv6 地址

image.png

2. 关闭安全组后

image.png

3. 再次开启安全组后

image.png

最终原因是: windows 2012 没有使用基于 mac 生成 local ipv6 地址,而是直接使用了一个镜像中残留的 local ipv6 地址, 然后安全组就丢包了。kube-ovn 的 ovs 的 table 9 可以看到该 acl 对应的限制规则的流表有计数。

关于查流表

  • 首先基于 ovs-vsctl list interface | grep 查到 inport id

  • 基于inport id 查找 table 0, 可以直接看到所有的包都会转到 table 8

  • 在 table0 到之后的 table 中,同一个包的处理都会带上同样的 metadata

    在后续的过滤中,可以基于 matadata,直接逐跳 table 过滤

        
    ovs-ofctl dump-flows br-int | grep "table=8" | grep -v " n_packets=0" | grep "metadata=0x14"
        
    

    在每一跳 table,可以直接过滤掉 n_packets=0 的规则。

    acl 的过滤首先应该考虑 mac 是否是正确的,其次应该看 协议和端口,最后看原 ip 地址,目标地址。

    根据这些条件也可以加快检索流表的速度。

    在定位过程中,我们在 28 表发现,dhcp 相关的规则,windows 在开启 acl 的时候,这个表是没有匹配到的,也就是说,在前面的表中已经发生了丢包。
    
    ``` bash
    

    root@csy-wx-pm-os01-eis-node04:/kube-ovn# ovs-ofctl dump-flows br-int | grep userdata | grep -i 00:00:00:0c:f2:4b | grep udp6
    cookie=0xe5ebee5e, duration=6802.293s, table=28, n_packets=2, n_bytes=348, idle_age=6356, priority=100,udp6,reg14=0x9b,metadata=0x14,dl_src=00:00:00:0c:f2:4b,ipv6_dst=ff02::1:2,tp_src=546,tp_dst=547 actions=controller(userdata=00.00.00.05.00.00.00.00.00.01.de.10.00.00.00.63.00.05.00.10.24.09.8c.20.18.33.20.00.00.00.00.00.0a.fb.af.44.00.02.00.06.00.00.00.68.53.ee,pause),resubmit(,29)
    root@csy-wx-pm-os01-eis-node04:/kube-ovn#
    root@csy-wx-pm-os01-eis-node04:/kube-ovn#
    root@csy-wx-pm-os01-eis-node04:/kube-ovn#
    root@csy-wx-pm-os01-eis-node04:/kube-ovn#
    root@csy-wx-pm-os01-eis-node04:/kube-ovn#
    root@csy-wx-pm-os01-eis-node04:/kube-ovn# ovs-ofctl dump-flows br-int | grep userdata | grep -i 00:00:00:0c:f2:4b | grep udp6
    cookie=0xe5ebee5e, duration=6813.111s, table=28, n_packets=3, n_bytes=543, idle_age=3, priority=100,udp6,reg14=0x9b,metadata=0x14,dl_src=00:00:00:0c:f2:4b,ipv6_dst=ff02::1:2,tp_src=546,tp_dst=547 actions=controller(userdata=00.00.00.05.00.00.00.00.00.01.de.10.00.00.00.63.00.05.00.10.24.09.8c.20.18.33.20.00.00.00.00.00.0a.fb.af.44.00.02.00.06.00.00.00.68.53.ee,pause),resubmit(,29)
    root@csy-wx-pm-os01-eis-node04:/kube-ovn#

    以证明 没有 acl 的时候,这个 n_packets=3 有增加,有 acl 的时候没有增加

        
        
        
        
        关于 ovs 的 dhcp, 这个包是在宿主机上抓到的。 对于 dhcp 请求的包,以及 ping 网关的包,这种包是不会经过 br-int 的,而是在端口发出请求包时,经过 acl,最后触发 dhcp 的处理流表,然后直接响应回复包。
        
        
    ``` bash
        
        
     tcpdump -i any '(udp port 546 or port 547)' -netvvx
    
    
    
    正常的
    
    root@csy-wx-pm-os01-eis-node04:/kube-ovn# tcpdump -i any '(udp port 546 or port 547)' -netvvx
    tcpdump: data link type LINUX_SLL2
    tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
    
    
    b6f81882_net1_h M   ifindex 1862 00:00:00:0c:f2:4b ethertype IPv6 (0x86dd), length 159: (flowlabel 0xd9345, hlim 1, next-header UDP (17) payload length: 99) fe80::9c68:9453:3623:20d9.546 > ff02::1:2.547: [bad udp cksum 0x85b3 -> 0x10ee!] dhcp6 solicit (xid=7417d1 (elapsed-time 0) (client-ID hwaddr/time type 1 time 748103127 0000000cf24b) (IA_NA IAID:218103808 T1:0 T2:0) (Client-FQDN) (vendor-class) (option-request vendor-specific-info DNS-server DNS-search-list Client-FQDN))
    	0x0000:  600d 9345 0063 1101 fe80 0000 0000 0000
    	0x0010:  9c68 9453 3623 20d9 ff02 0000 0000 0000
    	0x0020:  0000 0000 0001 0002 0222 0223 0063 85b3
    	0x0030:  0174 17d1 0008 0002 0000 0001 000e 0001
    	0x0040:  0001 2c97 25d7 0000 000c f24b 0003 000c
    	0x0050:  0d00 0000 0000 0000 0000 0000 0027 000d
    	0x0060:  000b 6863 632d 7769 6e32 3031 3900 1000
    	0x0070:  0e00 0001 3700 084d 5346 5420 352e 3000
    	0x0080:  0600 0800 1100 1700 1800 27
    b6f81882_net1_h Out ifindex 1862 00:00:00:68:53:ee ethertype IPv6 (0x86dd), length 148: (flowlabel 0xd9345, hlim 1, next-header UDP (17) payload length: 88) fe80::200:ff:fe68:53ee.547 > fe80::9c68:9453:3623:20d9.546: [udp sum ok] dhcp6 advertise (xid=7417d1 (client-ID hwaddr/time type 1 time 748103127 0000000cf24b) (IA_NA IAID:218103808 T1:4294967295 T2:4294967295 (IA_ADDR 2409:8c20:1833:2000::afb:af44 pltime:4294967295 vltime:4294967295)) (server-ID hwaddr type 1 0000006853ee))
    	0x0000:  600d 9345 0058 1101 fe80 0000 0000 0000
    	0x0010:  0200 00ff fe68 53ee fe80 0000 0000 0000
    	0x0020:  9c68 9453 3623 20d9 0223 0222 0058 bd81
    	0x0030:  0274 17d1 0001 000e 0001 0001 2c97 25d7
    	0x0040:  0000 000c f24b 0003 0028 0d00 0000 ffff
    	0x0050:  ffff ffff ffff 0005 0018 2409 8c20 1833
    	0x0060:  2000 0000 0000 0afb af44 ffff ffff ffff
    	0x0070:  ffff 0002 000a 0003 0001 0000 0068 53ee
        
        
        
        
        
    
        ```
        
        
        
            ### 开启 acl 不正常的情况下,就只有 acl 请求包,这个请求包经过对比流表的命中计数( watch 观察)发现确实是被丢包了
        
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论