Cloudflare рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реЗрдХреЛ рдЫ xdpcap, XDP рдЙрдкрдкреНрд░рдгрд╛рд▓реАрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЯреНрд░рд╛рдлрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ

рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдпрд░ рдХрдореНрдкрдиреА рдкреНрд░рд╕реНрддреБрдд рдЦреБрд▓рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ xdpcap, рдЬрд╕ рднрд┐рддреНрд░ tcpdump рдЬрд╕реНрддреИ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрдпрд╛рдХреЗрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд┐рдХрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдЫ, рдЙрдкрдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЖрдзрд╛рд░ рдорд╛ рдирд┐рд░реНрдорд┐рдд XDP (рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдбрд╛рдЯрд╛ рдкрде)ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб Go рд░ рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд BSD рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрддред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрдирд┐ рддрдпрд╛рд░ рдЧреЛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд╣рд░реВрдмрд╛рдЯ eBPF рдЯреНрд░рд╛рдлрд┐рдХ рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВрд▓рд╛рдИ рдмрд╛рдзреНрдп рдкрд╛рд░реНрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпред

xdpcap рдЙрдкрдпреЛрдЧрд┐рддрд╛ tcpdump/libpcap рдлрд┐рд▓реНрдЯрд░рд┐рдЩ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд╕рдБрдЧ рдорд┐рд▓реНрджреЛ рдЫ рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдорд╛рди рд╣рд╛рд░реНрдбрд╡реЗрдпрд░рдорд╛ рдЯреНрд░рд╛рдлрд┐рдХрдХреЛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред Xdpcap рд▓рд╛рдИ рдирд┐рдпрдорд┐рдд tcpdump рд▓рд╛рдЧреВ рдирд╣реБрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдбрд┐рдмрдЧ рдЧрд░реНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕реНрддреИ рдлрд┐рд▓реНрдЯрд░рд┐рдЩ, DoS рд╕реБрд░рдХреНрд╖рд╛, рд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ XDP рдЙрдкрдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд┐рдЩ рдкреНрд░рдгрд╛рд▓реА, рдЬрд╕рд▓реЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдиреЗрдЯрд╡рд░реНрдХрд┐рдЩ рд╕реНрдЯреНрдпрд╛рдХ (tcpdump) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреБ рдЕрдШрд┐ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдЫред XDP рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд▓реЗ рдЫреЛрдбреЗрдХреЛ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВ рджреЗрдЦреНрджреИрди)ред

рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди eBPF рд░ XDP рдЙрдкрдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкреНрд░рдпреЛрдЧ рдХреЛ рдорд╛рдзреНрдпрдо рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫред eBPF рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓рдорд╛ рдирд┐рд░реНрдорд┐рдд рдмрд╛рдЗрдЯрдХреЛрдб рджреЛрднрд╛рд╖реЗ рд╣реЛ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░реНрдиреЗ рд╡рд╛ рдЦрд╛рд░реЗрдЬ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдпрд╣рд░реВрдХреЛ рд╕рд╛рде рдЖрдЧрдорди/рдмрд╣рд╛рдЙрдиреЗ рдкреНрдпрд╛рдХреЗрдЯрд╣рд░реВрдХреЛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╣реНрдпрд╛рдиреНрдбрд▓рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред JIT рдХрдореНрдкрд╛рдЗрд▓рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, eBPF рдмрд╛рдЗрдЯрдХреЛрдбрд▓рд╛рдИ рдлреНрд▓рд╛рдИрдорд╛ рдореЗрд╕рд┐рди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдиреНрдЫ рд░ рдиреЗрдЯрд┐рдн рдХреЛрдбрдХреЛ рдкреНрд░рджрд░реНрд╢рдирдХреЛ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫред XDP (Express Data Path) рдЙрдкрдкреНрд░рдгрд╛рд▓реАрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдбреНрд░рд╛рдЗрднрд░ рд╕реНрддрд░рдорд╛ BPF рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреЗ рдХреНрд╖рдорддрд╛рдХреЛ рд╕рд╛рде eBPF рд▓рд╛рдИ рдкреВрд░рдХ рдмрдирд╛рдЙрдБрдЫ, DMA рдкреНрдпрд╛рдХреЗрдЯ рдмрдлрд░рдорд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдБрдЪрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рд░ skbuff рдмрдлрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдЯреНрдпрд╛рдХ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рд╣реБрдиреБ рдЕрдШрд┐ рдЪрд░рдгрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред

tcpdump рдЬрд╕реНрддреИ, xdpcap рдЙрдкрдпреЛрдЧрд┐рддрд╛рд▓реЗ рдорд╛рдирдХ libpcap рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рдЯреНрд░рд╛рдлрд┐рдХ рдлрд┐рд▓реНрдЯрд░рд┐рдЩ рдирд┐рдпрдорд╣рд░реВрд▓рд╛рдИ рдХреНрд▓рд╛рд╕рд┐рдХ BPF рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (cBPF) рдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрдореНрдкрд╛рдЗрд▓рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ eBPF рджрд┐рдирдЪрд░реНрдпрд╛рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫред cbpfc, LLVM/Clang рд╡рд┐рдХрд╛рд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред рдЖрдЙрдЯрдкреБрдЯрдорд╛, рдЯреНрд░рд╛рдлрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдорд╛рдирдХ pcap рдврд╛рдБрдЪрд╛рдорд╛ рдмрдЪрдд рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ tcpdump рд░ рдЕрдиреНрдп рдЕрд╡рд╕реНрдерд┐рдд рдЯреНрд░рд╛рдлрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╣рд░реВрдорд╛ рдкрдЫрд┐рдХреЛ рдЕрдзреНрдпрдпрдирдХреЛ рд▓рд╛рдЧрд┐ xdpcap рдорд╛ рддрдпрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЯреНрд░рд╛рдлрд┐рдХ рдбрдореНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, DNS рдЯреНрд░рд╛рдлрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреНрдпрд╛рдкреНрдЪрд░ рдЧрд░реНрди, "tcpdump ip and udp port 53" рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рддрдкрд╛рдИрдВрд▓реЗ "xdpcap /path/to/hook capture.pcap 'ip рд░ udp port 53тА▓" рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдХреНрдпрд╛рдкреНрдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред .pcap рдлрд╛рдЗрд▓, рдЙрджрд╛рд╣рд░рдг "tcpdump -r" рдЖрджреЗрд╢ рд╡рд╛ Wireshark рдорд╛ред

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди