dae 基于 eBPF 的分流效率很高

88 天前
 tiscool

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1015263

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX