dae 基于 eBPF 的分流效率很高 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
tiscool

dae 基于 eBPF 的分流效率很高

  •  
  •   tiscool Feb 10, 2024 6750 views
    This topic created in 807 days ago, the information mentioned may be changed or developed.

    dae 基于 eBPF 的分流效率很高,直连的效率轻轻松松千兆,只是现在配置和订阅还有点原始,需要手动设置。Clash 或者 Singbox 后续不知道会不会跟进,集成 dae ,跑在内核态

    8 replies    2024-02-15 14:55:51 +08:00
    iamyangyiok
        1
    iamyangyiok  
       Feb 12, 2024 via Android
    本来想体验下的 无赖我核心只有 5.4 要 5.14 才行
    mohumohu
        2
    mohumohu  
       Feb 12, 2024
    其实我不太理解强调直连性能的痛点在哪,既然对内核有要求的话,那么移动端安卓/iOS 不说,Windows 也不用,那么作为透明路由的话,现在大多数插件都是策略路由 ipset 的,本来就是直连不经过程序分流的,直连性能都是 100%。
    tiscool
        3
    tiscool  
    OP
       Feb 12, 2024
    @mohumohu 一切都是关于效率 这边有篇文章讲的很好 历史上网络很慢,包都是顺序处理去匹配 chain 的规则集的,整个 iptables 的规则很难做到灵活的增量管理 而且 ipset 本身也不是为分流/路由设计的 https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables/
    mohumohu
        4
    mohumohu  
       Feb 12, 2024
    @tiscool 你这个文章也没有指出 ipset 存在什么问题,只是强调 iptables 规则数量过多需要遍历。实际上你要分流并不需要太多的 iptables/nft 规则,ipset 本来就是可以动态增删的,文章强调增删规则是因为他说的场景是对多个容器进行 nat 而不是分流,iptables 增量管理实际上可以通过定义不同的 chain 来做,这一点 nft 或许也更灵活,跑题了,实际上他文章说的跟你用的场景基本上没有交叉。对于 Linux 的策略路由来说,ipset 的确是主流的解决方案。
    简单来说,你的路由器用上 eBPF 了吗? iptables/nft 我想应该目前没有能被替代的 eBPF 程序/防火墙,甚至硬路由有对应的硬件加速,就连商业的 RouterOS 的语法也是 iptables like 的。
    tiscool
        5
    tiscool  
    OP
       Feb 12, 2024
    @mohumohu 现状如你所说 的确还是 iptables or ipset 但是现在 nft 底层 hook 已经有在往 eBPF 切换了。简单说现在能做的,并不妨碍有其他方式(更好 or not )的解决问题。毕竟 eBPF 比较新,但是潜力是巨大的。硬路由不在这个话题的讨论范围了,毕竟没有那个硬的路由 Chipset 需要考虑如果高效的分流 geoip 和 geosite 数据集。。。我的需求是前置一个 Linux 网关,分流出可以直连的请求,直接交给主路由(硬),无法直连的请求在转给节点去出站。这个网关现在看 dae 是做的性能最高的,如果有其他方案,虚心请教,请赐予我知识。
    mohumohu
        6
    mohumohu  
       Feb 12, 2024
    @tiscool 几种直连性能 100%的方案,取决于你的网络拓扑:
    1 、在主路由本机上弄,使用 DNS 程序(如 mosdns 或者 smartdns )的 ipset 插件功能,把解析成非 CN IP 的域名(或者其他规则或者手动加入的 CIDR )的解析结果加入 ipset ,然后把这个 ipset 策略路由扔去代理程序。这样的话只有被判定需要代理的 IP 的 ipset 走代理,默认就是直连。缺点就是对主路由器的性能有影响,all in one 稳定性打折扣。这应该是目前 openwrt 里面那些插件的常用方案之一。
    2 、主路由和网关分开弄,然后利用 OSPF 之类的协议分流,可以实现直连并且无法直连的请求走网关,网关炸了也不影响正常上网还能回退。缺点就是操作配置维护比较复杂,比较依赖 IP 库,并且对 BT 等 P2P 应用有影响,不像方案 1 那样可以灵活用域名清单/IP 来控制。这个搜一下 OSPF 分流应该有很多现成教程。
    3 、主路由和网关分开弄,然后网关使用 fakeip ,DNS 程序把需要分流的域名(比如可以判定非 CN 域名或者手动配置的规则)解析成 fakeip ,然后主路由添加一条 fakeip 的静态路由即可,比较灵活稳定,配置也很清晰,直连的时候完全不经过网关,网关炸了也是不影响正常上网,缺点就是纯 IP 直连的应用需要手动额外添加一些静态路由来分流,因为没有解析成 fakeip 的机会。这种应用比较少,比如 telegram 。这个可以搜一下 paopaogateway 参考拓扑教程。
    tiscool
        7
    tiscool  
    OP
       Feb 15, 2024
    @mohumohu 首先,十分感谢你的长篇答复。的确是有很多新思路。
    1. 第一个方案应该是现在 Openwrt 里的主流了,的确性能有影响。LInux 也有类似的 Tproxy 实现。
    2. 这个应该最理想的方案,但是对网络知识要求比较高,我看还有用 BGP 收全表来搞的方案,的确是最 clean 的方案,但是门槛好高。
    3. FakeIP 有个比较大的缺点,就是 DNS 全部解析成 FakeIP 了,有时候 ping 一些网址的时候,直接给 FakeIP ,调试有些麻烦。
    mohumohu
        8
    mohumohu  
       Feb 15, 2024
    @tiscool 就是通过 DNS 分流的,不全部 FAKEIP ,仅把需要分流的域名解析成 FAKEIP 。本来你 socks 代理一般也就是仅代理 TCP/UDP 协议,走代理也 ping 不了。
    About     Help     Advertise     Blog     API     FAQ     Solana     3204 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 14:08 PVG 22:08 LAX 07:08 JFK 10:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86