无法使用 XDP 丢弃传出流量
Cannot drop outgoing traffic using XDP
我正在学习 XDP。在旅途中,我遇到了一个我无法理解的案例。当我发现没有任何变化时,我正在对某些 UDP 数据包尝试一些奇特的东西。所以我试着用一个最小的例子来重现这个问题。这是最小的例子:
#include <linux/bpf.h>
#include <linux/in.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/udp.h>
#define SEC(NAME) __attribute__((section(NAME), used))
SEC("obfuscator_main")
int dropper(struct xdp_md *ctx) {
return XDP_DROP;
}
char _license[] SEC("license") = "GPL";
(不要介意“混淆器”这个名字,它是其余代码的遗留物)。
我编译并加载这个:
clang -Wall -O2 -target bpf -c obfuscate.c -o obfuscate.o
sudo ip link set dev enp3s0 xdp obj obfuscate.o sec obfuscator_main
我确认我的计算机的传入流量已完全中断。但是,数据包仍然可以出去。我 ping 我 运行 tcpdump 的远程服务器,它看到了 ICMP 请求。但是我在本地电脑上没有任何反应。
为什么它不能对传出数据包做任何事情?
在挖掘 Google 搜索时,我在 GitHub 上遇到了这个问题:https://github.com/iptraf-ng/iptraf-ng/pull/33
... since XDP doesn't handle outgoing traffic.
事实证明,XDP 不处理传出数据包。我不知道为什么我花了这么长时间才发现这个。原来是我误会了。
我正在学习 XDP。在旅途中,我遇到了一个我无法理解的案例。当我发现没有任何变化时,我正在对某些 UDP 数据包尝试一些奇特的东西。所以我试着用一个最小的例子来重现这个问题。这是最小的例子:
#include <linux/bpf.h>
#include <linux/in.h>
#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/udp.h>
#define SEC(NAME) __attribute__((section(NAME), used))
SEC("obfuscator_main")
int dropper(struct xdp_md *ctx) {
return XDP_DROP;
}
char _license[] SEC("license") = "GPL";
(不要介意“混淆器”这个名字,它是其余代码的遗留物)。
我编译并加载这个:
clang -Wall -O2 -target bpf -c obfuscate.c -o obfuscate.o
sudo ip link set dev enp3s0 xdp obj obfuscate.o sec obfuscator_main
我确认我的计算机的传入流量已完全中断。但是,数据包仍然可以出去。我 ping 我 运行 tcpdump 的远程服务器,它看到了 ICMP 请求。但是我在本地电脑上没有任何反应。
为什么它不能对传出数据包做任何事情?
在挖掘 Google 搜索时,我在 GitHub 上遇到了这个问题:https://github.com/iptraf-ng/iptraf-ng/pull/33
... since XDP doesn't handle outgoing traffic.
事实证明,XDP 不处理传出数据包。我不知道为什么我花了这么长时间才发现这个。原来是我误会了。