V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
tiscool
V2EX  ›  OpenWrt

dae 基于 eBPF 的分流效率很高

  •  
  •   tiscool · 285 天前 · 3567 次点击
    这是一个创建于 285 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    8 条回复    2024-02-15 14:55:51 +08:00
    iamyangyiok
        1
    iamyangyiok  
       284 天前 via Android
    本来想体验下的 无赖我核心只有 5.4 要 5.14 才行
    mohumohu
        2
    mohumohu  
       284 天前
    其实我不太理解强调直连性能的痛点在哪,既然对内核有要求的话,那么移动端安卓/iOS 不说,Windows 也不用,那么作为透明路由的话,现在大多数插件都是策略路由 ipset 的,本来就是直连不经过程序分流的,直连性能都是 100%。
    tiscool
        3
    tiscool  
    OP
       284 天前
    @mohumohu 一切都是关于效率 这边有篇文章讲的很好 历史上网络很慢,包都是顺序处理去匹配 chain 的规则集的,整个 iptables 的规则很难做到灵活的增量管理 而且 ipset 本身也不是为分流/路由设计的 https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables/
    mohumohu
        4
    mohumohu  
       284 天前
    @tiscool 你这个文章也没有指出 ipset 存在什么问题,只是强调 iptables 规则数量过多需要遍历。实际上你要分流并不需要太多的 iptables/nft 规则,ipset 本来就是可以动态增删的,文章强调增删规则是因为他说的场景是对多个容器进行 nat 而不是分流,iptables 增量管理实际上可以通过定义不同的 chain 来做,这一点 nft 或许也更灵活,跑题了,实际上他文章说的跟你用的场景基本上没有交叉。对于 Linux 的策略路由来说,ipset 的确是主流的解决方案。
    简单来说,你的路由器用上 eBPF 了吗? iptables/nft 我想应该目前没有能被替代的 eBPF 程序/防火墙,甚至硬路由有对应的硬件加速,就连商业的 RouterOS 的语法也是 iptables like 的。
    tiscool
        5
    tiscool  
    OP
       284 天前
    @mohumohu 现状如你所说 的确还是 iptables or ipset 但是现在 nft 底层 hook 已经有在往 eBPF 切换了。简单说现在能做的,并不妨碍有其他方式(更好 or not )的解决问题。毕竟 eBPF 比较新,但是潜力是巨大的。硬路由不在这个话题的讨论范围了,毕竟没有那个硬的路由 Chipset 需要考虑如果高效的分流 geoip 和 geosite 数据集。。。我的需求是前置一个 Linux 网关,分流出可以直连的请求,直接交给主路由(硬),无法直连的请求在转给节点去出站。这个网关现在看 dae 是做的性能最高的,如果有其他方案,虚心请教,请赐予我知识。
    mohumohu
        6
    mohumohu  
       283 天前
    @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
       281 天前
    @mohumohu 首先,十分感谢你的长篇答复。的确是有很多新思路。
    1. 第一个方案应该是现在 Openwrt 里的主流了,的确性能有影响。LInux 也有类似的 Tproxy 实现。
    2. 这个应该最理想的方案,但是对网络知识要求比较高,我看还有用 BGP 收全表来搞的方案,的确是最 clean 的方案,但是门槛好高。
    3. FakeIP 有个比较大的缺点,就是 DNS 全部解析成 FakeIP 了,有时候 ping 一些网址的时候,直接给 FakeIP ,调试有些麻烦。
    mohumohu
        8
    mohumohu  
       281 天前
    @tiscool 就是通过 DNS 分流的,不全部 FAKEIP ,仅把需要分流的域名解析成 FAKEIP 。本来你 socks 代理一般也就是仅代理 TCP/UDP 协议,走代理也 ping 不了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:52 · PVG 19:52 · LAX 03:52 · JFK 06:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.