V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yyysuo
V2EX  ›  宽带症候群

V2 上关于 dae(大鹅)(ebpf)的讨论还是比较少啊,完美的旁路科学方案了吧?

  •  
  •   yyysuo · 193 天前 · 7304 次点击
    这是一个创建于 193 天前的主题,其中的信息可能已经有所发展或是发生改变。
    步骤:
    1:装个 debian
    2:装个大鹅
    3:添加节点或者订阅,启用大鹅,debian 成为透明旁路网关
    4:主路由下发大鹅的 ip 作为网关和 dns

    大鹅电报群: https://t.me/daeuniverse https://t.me/MetaKernel

    跑分: https://docs.google.com/spreadsheets/d/1UaWU6nNho7edBNjNqC8dfGXLlW0-cm84MM7sH6Gp7UE/edit?pli=1#gid=1965963111

    安装命令: https://github.com/daeuniverse/daed/blob/main/docs/getting-started.md

    github: https://github.com/daeuniverse/daed/releases
    70 条回复    2024-04-25 22:00:08 +08:00
    Fish1024
        1
    Fish1024  
       193 天前
    1. 刷个 openwrt
    2. 添加订阅
    3. 主路由下发 openwrt 的 ip 作为网关和 dns

    比这个大鹅简单吧?
    SkywalkerJi
        2
    SkywalkerJi  
       193 天前 via Android
    和 openwrt 比有什么优势?
    yyysuo
        3
    yyysuo  
    OP
       193 天前
    @SkywalkerJi ebpf ,据说对国内的速度影响最小,约等于直连,应该跟 openwrt 比,这是旁路,原来的主路由可以不动,把主路由上的科学关了就好。
    yyysuo
        4
    yyysuo  
    OP
       193 天前
    不应该跟 openwrt 比。
    sarices
        5
    sarices  
       193 天前
    如何使用现有 clash 分流规则?
    yyysuo
        6
    yyysuo  
    OP
       193 天前
    @sarices 默认 geosite 分流吧,可以自己写分流规则,也可以再装一个 debian ,裸跑 clash ,clash 开个 ss 服务端,供大鹅使用,套娃。
    https://github.com/daeuniverse/dae/discussions/81
    icetea12138
        7
    icetea12138  
       193 天前
    这种方案客户端还是要手动改网关才行吧?
    yyysuo
        8
    yyysuo  
    OP
       193 天前
    @icetea12138 openwrt 可以直接下发大鹅机的 ip 为网关和 dns 。
    设置 DHCP 的附加选项,例如设定 "6,192.168.2.1,192.168.2.2" 表示通告不同的 DNS 服务器给客户端。
    tty228
        9
    tty228  
       193 天前
    OpenWrt 也可以装 dae 啊
    Archeb
        10
    Archeb  
       193 天前
    确实是一个很先进的解决方案。

    但它主要解决的是性能问题,而这一点在其主要受众的网络环境中不明显或者有更多更简单的 workaround 。对已经有现存方案的环境来说,去改用 dae 的动力不大;但如果是新部署的环境的话,我会愿意试用一下它。
    OLOrz
        11
    OLOrz  
       193 天前
    还是感觉走 bgp 或者 ospf 按路由分流比较好
    expy
        12
    expy  
       193 天前
    a90405
        13
    a90405  
       192 天前
    看了下性能测试,直连的 IP 压根就不应该进代理程序,用 nftables 直接绕过。
    a90405
        14
    a90405  
       192 天前
    @yyysuo 旁路,影响更小了,旁路拓扑,下载流量几乎不经过旁路,直连性能优势更是无从谈起。
    a90405
        15
    a90405  
       192 天前
    旁路还有一个很大的死穴,就是 ipv6 的网关问题很麻烦。
    Donahue
        16
    Donahue  
       192 天前
    只有直连状态下性能有很大提升,proxy 模式提升很小,还是 openwrt+openclash 省事
    jsq2627
        17
    jsq2627  
       192 天前 via iPhone
    感觉侵入性有点大

    像 openclash 等本身也支持用 nftable 直接把大陆 ip 绕过,直连流量一样不经过代理程序。
    mohumohu
        18
    mohumohu  
       192 天前
    静态路由+FAKEIP ,国内直连根本就不经过旁路。https://github.com/kkkgo/PaoPaoGateWay
    ShuWei
        19
    ShuWei  
       192 天前
    eBPF 确实有其优势,避免了部分不必要的流量复制成本,但如果不是大流量场景,节约的那点性能其实没多少意义,侵入系统更底层,很担心作者的代码水平啊,clash Premium core 其实也增加了对 eBPF 的支持
    yyysuo
        20
    yyysuo  
    OP
       192 天前
    @mohumohu 这个跟 openclash 这种方案的优势在哪里,我觉得没啥区别呢,更复杂一些。
    SenLief
        21
    SenLief  
       192 天前 via iPhone
    你们的主路由能下发旁路由的 ip 和网关吗?我的 tp 不行,开 dhcp 就抢了。
    SenLief
        22
    SenLief  
       192 天前 via iPhone
    @mohumohu 你这个其实没什么区别的,旁路由主要是主设备可以是任意的设备,你这个只不过是把功能拆开了。
    SenLief
        23
    SenLief  
       192 天前 via iPhone
    @a90405 是的,我一直没有配置好,现在 ipv6 无法使用。
    jdjingdian
        24
    jdjingdian  
       192 天前
    我也在做 eBPF 相关的东西,这个玩意感觉研究的人确实少。

    dae 用 eBPF 一个很重要的点应该还是性能上的提升吧(针对直连的性能),非直连的,他的实现方案是通过 xdp 再把数据扔回来,再从用户态走代理出去。

    目前在 Ubuntu 和 OpenWrt-23.05 ( MT7981 )上部署成功,但是 OpenWrt 启动加载 eBPF 到内核的速度比较慢
    yyysuo
        25
    yyysuo  
    OP
       192 天前
    @SenLief #21 被谁抢了?我的 xdr 5480 ,在 dhcp 中可以直接写网关和 dns 啊,你局域网里面还有其它设备启用了 dhcp ?
    SenLief
        26
    SenLief  
       192 天前 via iPhone
    @yyysuo 正常应该是由旁路由下发 ip 和网关的,但是现在都是由 5480 下发的。
    yyysuo
        27
    yyysuo  
    OP
       192 天前
    @jdjingdian 我主路由 op ,搞一个大鹅 vm ,搞了一个 clash vm ,都是 debian ,clash 开不加密的 ss 的服务端给大鹅 vm 使用。主路由下发大鹅 ip 为网关。在 op 上开 mosdns ,mosdns 国内直接丢给 223.5.5.5 ,国外扔给 clash 的 7874 解析,返回 fakeip ,然后大鹅网关根据 fakeip 来分流,fakeip 丢给 clash ,其它直连。
    yyysuo
        28
    yyysuo  
    OP
       192 天前
    @SenLief #26 晕,为什么要让旁路由下发呢,主路由下发就行啊。
    jdjingdian
        29
    jdjingdian  
       192 天前
    @yyysuo 你的操作太复杂了(我小白 哈哈哈
    之前也想研究 mosdns ,但感觉头大

    我目前是这样设计的
    主路由:RouterOS 旁路由:OpenWrt + dae

    openwrt 通过 ospf 把非中国的路由表同步到 routerOS ,非中国路由表走 openWrt ,中国路由表直接出去
    RouterOS 和 OpenWrt 通过 VRRP 共享一个 ip ,openwrt 为主,DNS 指向这个共享 IP

    不过这样弄 DNS 肯定不是很干净就是了,以后慢慢研究改进
    yyysuo
        30
    yyysuo  
    OP
       192 天前
    @jdjingdian #29 你这才是大佬好吧,你搞的这一套,哪一个我都玩不转。
    SenLief
        31
    SenLief  
       192 天前 via iPhone
    @yyysuo 主路由下发的网关不是旁路由的,还需要自己手动改。
    mohumohu
        32
    mohumohu  
       192 天前
    @yyysuo 不需要改主路由网关,真正国内直连啊,你既然在意直连性能为啥不直接直连呢,节点挂了甚至旁路由电源拔了都不会影响正常上网。
    mohumohu
        33
    mohumohu  
       192 天前
    @SenLief 不需要改主路由网关,旁路由电源拔了不影响上网。
    dude4
        34
    dude4  
       192 天前
    在用 openclash+fake ip 旁路由,跑在树莓派上,开了 IPV6 ,目前已解决的问题:
    1.IPV6 DNS ,需要在主路由(也是 openwrt )关掉 V6 DNS 通告,这样只通告 V4 DNS ,可以解决部分网站 V6 优先的问题,譬如 engadget ,这样做是因为目前好像 openwrt 用的 ODHCPD 无法单独设置 V6 DNS ,或者没找到好方法
    2. 主路由用 dhcp opition+mac 方式给需要的设备通告网关和 V4 DNS ,客户端设备上设置使用设备 mac 码就可以固定分配局域网 IP 和网关,不需要梯子的设备就直连,这样就各取所需了。主路由梯子还是不适合复杂使用的情况,当然我不玩游戏,可能需求不同。

    感觉和这个实现的差不多,这个是又另外造了个轮子?
    dude4
        35
    dude4  
       192 天前
    看了一下介绍,貌似这个轮子还是和 openclash 实现的不一样,是内核级别的,等子弹再飞一会儿, 如果好用可以试试。
    JensenQian
        36
    JensenQian  
       192 天前 via Android
    有点牛,不过旁路由好麻烦
    mohumohu
        37
    mohumohu  
       192 天前
    @dude4 我看了下文档描述是这样的:
    ```
    域名通过劫持 DNS 请求,将 DNS 请求的域名与所查 IP 进行关联来得到。尽管这种方式有一些问题:

    可能会出现误判。例如需要分流到国内和国外的两个网站拥有同一个 IP ,且在短时间内同时被访问,或浏览器有 DNS 缓存。
    用户的 DNS 请求必须通过 dae 。例如将 dae 设为 DNS ,或在 dae 作为网关的情况下使用公共 DNS 。
    但相比其他方案,这种方案已经是较优解了。例如 Fake IP 方案存在无法通过 IP 分流且存在严重的缓存污染问题,而域名嗅探方案存在只能嗅探 TLS/HTTP 等流量的问题。实际上,通过 SNI 嗅探来进行分流确实是更优选择,但由于 eBPF 对程序复杂度的限制,以及对循环的支持不友好,我们无法在内核空间实现域名嗅探。
    ```
    我觉得这个文档说的不完全对,FAKEIP 方案就能域名和 IP 唯一对应没有误判,通过指定静态路由也是可以进行 IP 分流的,缓存污染问题也可以通过添加嗅探解决。
    SenLief
        38
    SenLief  
       192 天前 via iPhone
    @mohumohu 那就需要为每一台设备单独设置网关了。
    mohumohu
        39
    mohumohu  
       192 天前
    @SenLief 不需要啊,主路由加一条 FAKEIP 的静态路由就可以了,只有分配到 FAKEIP 的域名才会走旁路。
    SenLief
        40
    SenLief  
       192 天前 via iPhone
    @mohumohu 你用主路由做分流了,tp 没有这个功能我说嘛。
    mohumohu
        41
    mohumohu  
       192 天前
    @SenLief 没有静态路由还能算《路由器》吗😄
    十几年前的 tplink 还真的有这个功能
    不说别的,光猫也有啊
    mohumohu
        42
    mohumohu  
       192 天前
    不过好在新出的 tp 能刷机,特别是联发科的
    n18255447846
        43
    n18255447846  
       192 天前
    核心技术点是 eBPF 吗,有无佬哥说说。。

    旁路由就 dhcp 下发网关,不过还要配 iptables 转发流量到代理程序还是有点复杂的
    SenLief
        44
    SenLief  
       192 天前
    @mohumohu 不是,主路由没有分流的功能,你如何知道域名给旁路由呢?
    liulongquan
        45
    liulongquan  
       192 天前
    IPV6 能解决吗
    一般旁路由 IPV6 是死穴但是 IPV6 又是刚需的
    a90405
        46
    a90405  
       192 天前
    @n18255447846 这玩意运行在 netfilter 之前,用不到 iptables nftables
    mohumohu
        47
    mohumohu  
       192 天前
    @SenLief 主路由可以设置 DNS 啊,然后 DNS 可以分流
    bao3
        48
    bao3  
       192 天前
    “dhcp 下发网关” “ 设备指定网关” ,这已经不能算是透明网关了,这算是半透明网关了。
    简单来说,能在网关上搞的东西,就别用旁路由,不止是上面说的 ipv6 的问题,还有可能旁路由引起梯子瞬断。
    SenLief
        49
    SenLief  
       192 天前
    @mohumohu 硬路由很多不支持 dns 分流的,5480 就不支持的。
    mohumohu
        50
    mohumohu  
       192 天前
    @SenLief 路由器不会连 DNS 都不能自定义吧
    https://zhuanlan.zhihu.com/p/474982943

    不行还可以用光猫拨号,或者关闭主路由的 DHCP ,用自己的 DHCP 。
    SenLief
        51
    SenLief  
       192 天前
    @mohumohu 这个好像没什么意义吧,他还是要全部过旁路由的。比较理想的还是主路由 dns 分流,直连直接出,代理走旁路由。
    mohumohu
        52
    mohumohu  
       191 天前
    @SenLief 效果就是你说的比较理想的这样的,主路由设置指定 DNS 和静态路由,DNS 只有需要分流的域名才解析为 FAKEIP ,FAKEIP 静态路由到旁路由,实际国内流量不需要经过旁路由。
    GeekGao
        53
    GeekGao  
       191 天前
    感觉对于“旁路科学”没啥意义,kernel 转发那点延迟和吞吐 在中国电信的 QoS 策略下显得苍白。
    SenLief
        54
    SenLief  
       191 天前 via iPhone
    @mohumohu dns 分流由谁负责?
    mohumohu
        55
    mohumohu  
       191 天前
    yyysuo
        56
    yyysuo  
    OP
       191 天前
    @dude4 #34 op 如何关闭 v6 的 dns 通告?我目前填的是 br-lan 的 fe80 ,如果一个都不填,默认下发的 dns 好像是 br-lan 的公网 ipv6 地址。
    ambition117
        57
    ambition117  
       191 天前
    真的要性能的话,搞个支持 ospf 的三层交换机,线速转发国内、国外的流量到不同网关...
    dude4
        58
    dude4  
       191 天前
    @yyysuo 网络-接口-你的 lan 接口-编辑-DHCP 服务器-IPV6 设置
    取消“本地 IPV6 DNS 服务器”的钩,然后这个选项上面的“通告 IPV6 DNS 服务器”留空,重启 odhcpd 和 dnsmasq 即可。
    这样 windows 和安卓试了只显示 V4 DNS ,V6 DNS 是空白,但不影响 AAAA 解析
    yyysuo
        59
    yyysuo  
    OP
       191 天前
    @dude4 #58 能把/etc/config/dhcp 的 config dhcp 'lan'部分粘一下吗,我的 openwrt 版本没有本地 IPV6 DNS 服务器这个勾,我知道有些版本是有的。
    qwvy2g
        60
    qwvy2g  
       191 天前
    有没有一种不需要修改内网网关的透明网关?有的说法是透明网桥。已经测试过在同一个网段内用 iptables 命令劫持是无效的,仔细分析后发现这些设备直接是二层的。openwrt 上的 oc 上倒是很容易能实现,可是想在 openwrt 上的其他软件上也实现类似功能。
    dude4
        61
    dude4  
       190 天前
    @yyysuo

    `
    config dhcp 'lan'
    option interface 'lan'
    option leasetime '24h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    list ra_flags 'managed-config'
    option start '100'
    option limit '150'
    option dns_service '0'
    `
    yyysuo
        62
    yyysuo  
    OP
       190 天前
    @dude4 #61 感谢,我是有状态+无状态,没有取消按钮,不知道怎么改配置文件才能不下发 ipv6 的 dns
    config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    option ra_slaac '1'
    list ra_flags 'managed-config'
    list ra_flags 'other-config'
    option force '1'
    option ra_management '1'
    option ra_default '1'
    list dns 'fe80::20c:29ff:fe8b:e868'
    list dhcp_option '6,10.10.10.1'
    list dhcp_option '3,10.10.10.2'
    yyysuo
        63
    yyysuo  
    OP
       190 天前
    @mohumohu #55 大佬,我自己主路由 op ,旁路装了个 debian 跑 clash ,主路由上用 mosdns 分流了 dns ,国内直接走公网了,国外部分扔给 clash 的 dns ,返回 fakeip ,然后主路由添加路由表让 fakeip 走 clash vm 。现在遇到 2 个问题,一个是 netflix 提示代理了,我怀疑是 ipv6 或者 netflix 有直连的 ip 的问题,看了一下 netflix 的 ip 段,好多,静态路由加得太多了;另外一个是 udpxy 或者 msd_lite 竟然换台卡顿了,是跃点的原因吗?
    mohumohu
        64
    mohumohu  
       190 天前
    @yyysuo 你 mosdns 可以让他 netflix 的域名不返回 IPv6 结果吧,我觉得可能是 IPv6 的问题。也可能是没有分流到对应域名,你可以开个全局抓一下域名。udpxy 或者 msd_lite 我感觉应该没什么关系,可能是你主路由负载比较高。
    dude4
        65
    dude4  
       188 天前
    @yyysuo 你的源码是什么?官方还是 lean 的? lean 的源码基于 openwrt lede ,和官方有些不一样,界面也自己魔改了很多。
    yyysuo
        66
    yyysuo  
    OP
       187 天前 via iPhone
    @dude4 lean 的源码,用 fe80 也不是不能用,并且我发现如果 ipv6 的 dns 没有的话,ipv6 的测试就过不了 。 看了各位大佬的回复,也试了一下 fakeip 网关,体验也不错,实现了真正的透明网关 。
    步骤也非常简单,就是装个 debian+clash fakeip ,主路由上装 mosdns ,国内直连 国外丢给 clash dns 解析成 fakeip ,主路由上做静态路由,fakeip 丢给 debian 的 clash 处理即可,需要特殊处理的是电报和奈飞,把他们的 ip 段也添加到静态路由丢给 clash 处理
    willwon1
        67
    willwon1  
       185 天前
    家里放个手机 手机上开个小火箭 我觉得做旁路由也没啥问题 还稳定
    Karmylr
        68
    Karmylr  
       152 天前
    @dude4 lean 的就是官方 openwrt 的 18.06 分支改的
    teadi
        69
    teadi  
       27 天前
    有个问题,我原本是 copilot 》 openclash 》 us 。
    现在装了大鹅是 copilot 》大鹅》就直连了。
    所以是需要在大鹅里写一遍 copilot 走代理?
    bluaze
        70
    bluaze  
       1 天前
    @yyysuo #63 netflix 如果是 app 的话,有可能是 netflix 使用了自己的 dns ,绕过了系统 dns 配置,从而获得了真实 ip
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2753 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:25 · PVG 19:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.