TGTGInsighttelegram intelligenceLIVE / telegram public index
← Welcome to the Black Parade
Welcome to the Black Parade avatar

TGINSIGHT POST

Post #403

@TheB1ackParade

Welcome to the Black Parade

Views203Post view count
PostedSep 2509/25/2023, 03:07 PM
Post content

Post content

现在查的这个 bug 是 cilium 开启加密后从 A 版本降级到 B 版本会短暂断流。我用了几小时才注意到问题的关键,没想到在我最开始的 tracing log 里就有这个关键了: 11:09:12.676 ffff9e1f127f8f00 xfrm4_remove_tunnel_encap mark=0x20d00 if=8(cilium_vxlan) proto=0x8 netns=4026531992 len=196 IPv4=10.201.8.67>10.201.5.29 IPSecESP=spi:3,seq:99426 11:09:12.676 ffff9e1f127f8f00 xfrm_rcv_cb mark=0x20d00 if=8(cilium_vxlan) proto=0x8 netns=4026531992 len=196 IPv4=10.201.8.67>10.201.5.29 IPSecESP=spi:3,seq:99425 正确的内核行为应该是在 xfrm4_remove_tunnel_encap 之后 skb 被解密,但是这里日志依然显示 ESP 加密的 skb。这不合理,如果解密失败内核应该直接扔掉 skb 的。 我都已经开始翻看内核了,最后才发现这个魔鬼细节:第一行的 ESP seq 是 99426,而第二行的 seq 是 99425,这是两个不同的头! 也就是说内核正确顺利地解密了 skb,只不过内部又是一层 ESP!所以直接原因就找到了,skb 在源头处被错误地加密了两次。 真的非常细,明明就在眼皮底下,却从没注意到。这简直太好玩了!