是否有希望在haproxy调用ipt2socks时,尝试用eBPF取代ipt2socks来减少上下文切换带来的巨量开销? #3842
afrojewelz
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
是否有希望在haproxy调用ipt2socks时,尝试用eBPF取代ipt2socks来减少上下文切换带来的巨量开销?
这应该是还没实现的转发加速功能,让启用了ebpf的openwrt能够利用上这些性能优势,降低单核心上的负载压力,为小规模芯片降低负载。
我没能考虑的问题可能很多,新增功能可能增加测试压力,前置的脚本可以先准备好如果ebpf没有ready可以failback到现有的逻辑。
这样未来在过滤之前还能考虑除了Geoview预判以外还能增加ASN预判,进一步压低passwall需要的资源且在高性能设备上能利用上新内核带来的加成属性
tc 是 Linux 流量控制工具,可以附加 eBPF 程序实现流量重定向:
sh
加载 eBPF 程序到网络接口
tc qdisc add dev eth0 clsact
tc filter add dev eth0 ingress bpf da obj my_ebpf_redirect.o
其中 my_ebpf_redirect.o 是一个编译后的 eBPF 程序,实现类似 ipt2socks 的流量转发逻辑。
方法 3:使用 XDP (eXpress Data Path)
XDP 比 tc 更高效,适合高性能转发:
sh
加载 XDP 程序
ip link set dev eth0 xdp obj my_xdp_redirect.o
XDP 程序可以直接修改或重定向数据包,避免进入内核网络栈。让filter持续保留在用户栈
eBPF 实现 SOCKS5 代理(替代 ipt2socks)
如果想完全替代 ipt2socks,可以用 eBPF + 用户态 SOCKS5 服务器:
eBPF 部分:拦截流量并发送到用户态程序(如 socks5 服务器)。
用户态部分:处理 SOCKS5 协议(如 dante、3proxy 或自定义实现)。
示例(使用 AF_XDP 高效收发数据包):
c
// eBPF 程序(XDP 或 tc 挂钩)
SEC("xdp")
int xdp_redirect_socks(struct xdp_md *ctx) {
// 检查目标端口,如果是 SOCKS5 流量,重定向到用户态
bpf_redirect_map(&xsks_map, ctx->rx_queue_index, XDP_PASS);
return XDP_REDIRECT;
}
用户态程序通过 AF_XDP socket 接收数据并实现 SOCKS5 代理逻辑。
Beta Was this translation helpful? Give feedback.
All reactions