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

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

  •  
  •   yyysuo · 209 天前 · 7633 次点击
    这是一个创建于 209 天前的主题,其中的信息可能已经有所发展或是发生改变。
    步骤:
    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  
       209 天前
    1. 刷个 openwrt
    2. 添加订阅
    3. 主路由下发 openwrt 的 ip 作为网关和 dns

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

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

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

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

    目前在 Ubuntu 和 OpenWrt-23.05 ( MT7981 )上部署成功,但是 OpenWrt 启动加载 eBPF 到内核的速度比较慢
    yyysuo
        25
    yyysuo  
    OP
       209 天前
    @SenLief #21 被谁抢了?我的 xdr 5480 ,在 dhcp 中可以直接写网关和 dns 啊,你局域网里面还有其它设备启用了 dhcp ?
    SenLief
        26
    SenLief  
       209 天前 via iPhone
    @yyysuo 正常应该是由旁路由下发 ip 和网关的,但是现在都是由 5480 下发的。
    yyysuo
        27
    yyysuo  
    OP
       209 天前
    @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
       209 天前
    @SenLief #26 晕,为什么要让旁路由下发呢,主路由下发就行啊。
    jdjingdian
        29
    jdjingdian  
       209 天前
    @yyysuo 你的操作太复杂了(我小白 哈哈哈
    之前也想研究 mosdns ,但感觉头大

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

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

    不过这样弄 DNS 肯定不是很干净就是了,以后慢慢研究改进
    yyysuo
        30
    yyysuo  
    OP
       208 天前
    @jdjingdian #29 你这才是大佬好吧,你搞的这一套,哪一个我都玩不转。
    SenLief
        31
    SenLief  
       208 天前 via iPhone
    @yyysuo 主路由下发的网关不是旁路由的,还需要自己手动改。
    mohumohu
        32
    mohumohu  
       208 天前
    @yyysuo 不需要改主路由网关,真正国内直连啊,你既然在意直连性能为啥不直接直连呢,节点挂了甚至旁路由电源拔了都不会影响正常上网。
    mohumohu
        33
    mohumohu  
       208 天前
    @SenLief 不需要改主路由网关,旁路由电源拔了不影响上网。
    dude4
        34
    dude4  
       208 天前
    在用 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  
       208 天前
    看了一下介绍,貌似这个轮子还是和 openclash 实现的不一样,是内核级别的,等子弹再飞一会儿, 如果好用可以试试。
    JensenQian
        36
    JensenQian  
       208 天前 via Android
    有点牛,不过旁路由好麻烦
    mohumohu
        37
    mohumohu  
       208 天前
    @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  
       208 天前 via iPhone
    @mohumohu 那就需要为每一台设备单独设置网关了。
    mohumohu
        39
    mohumohu  
       208 天前
    @SenLief 不需要啊,主路由加一条 FAKEIP 的静态路由就可以了,只有分配到 FAKEIP 的域名才会走旁路。
    SenLief
        40
    SenLief  
       208 天前 via iPhone
    @mohumohu 你用主路由做分流了,tp 没有这个功能我说嘛。
    mohumohu
        41
    mohumohu  
       208 天前
    @SenLief 没有静态路由还能算《路由器》吗?
    十几年前的 tplink 还真的有这个功能
    不说别的,光猫也有啊
    mohumohu
        42
    mohumohu  
       208 天前
    不过好在新出的 tp 能刷机,特别是联发科的
    n18255447846
        43
    n18255447846  
       208 天前
    核心技术点是 eBPF 吗,有无佬哥说说。。

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

    不行还可以用光猫拨号,或者关闭主路由的 DHCP ,用自己的 DHCP 。
    SenLief
        51
    SenLief  
       208 天前
    @mohumohu 这个好像没什么意义吧,他还是要全部过旁路由的。比较理想的还是主路由 dns 分流,直连直接出,代理走旁路由。
    mohumohu
        52
    mohumohu  
       208 天前
    @SenLief 效果就是你说的比较理想的这样的,主路由设置指定 DNS 和静态路由,DNS 只有需要分流的域名才解析为 FAKEIP ,FAKEIP 静态路由到旁路由,实际国内流量不需要经过旁路由。
    GeekGao
        53
    GeekGao  
       208 天前
    感觉对于“旁路科学”没啥意义,kernel 转发那点延迟和吞吐 在中国电信的 QoS 策略下显得苍白。
    SenLief
        54
    SenLief  
       208 天前 via iPhone
    @mohumohu dns 分流由谁负责?
    mohumohu
        55
    mohumohu  
       208 天前
    yyysuo
        56
    yyysuo  
    OP
       208 天前
    @dude4 #34 op 如何关闭 v6 的 dns 通告?我目前填的是 br-lan 的 fe80 ,如果一个都不填,默认下发的 dns 好像是 br-lan 的公网 ipv6 地址。
    ambition117
        57
    ambition117  
       208 天前
    真的要性能的话,搞个支持 ospf 的三层交换机,线速转发国内、国外的流量到不同网关...
    dude4
        58
    dude4  
       207 天前
    @yyysuo 网络-接口-你的 lan 接口-编辑-DHCP 服务器-IPV6 设置
    取消“本地 IPV6 DNS 服务器”的钩,然后这个选项上面的“通告 IPV6 DNS 服务器”留空,重启 odhcpd 和 dnsmasq 即可。
    这样 windows 和安卓试了只显示 V4 DNS ,V6 DNS 是空白,但不影响 AAAA 解析
    yyysuo
        59
    yyysuo  
    OP
       207 天前
    @dude4 #58 能把/etc/config/dhcp 的 config dhcp 'lan'部分粘一下吗,我的 openwrt 版本没有本地 IPV6 DNS 服务器这个勾,我知道有些版本是有的。
    qwvy2g
        60
    qwvy2g  
       207 天前
    有没有一种不需要修改内网网关的透明网关?有的说法是透明网桥。已经测试过在同一个网段内用 iptables 命令劫持是无效的,仔细分析后发现这些设备直接是二层的。openwrt 上的 oc 上倒是很容易能实现,可是想在 openwrt 上的其他软件上也实现类似功能。
    dude4
        61
    dude4  
       207 天前
    @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
       206 天前
    @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
       206 天前
    @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  
       206 天前
    @yyysuo 你 mosdns 可以让他 netflix 的域名不返回 IPv6 结果吧,我觉得可能是 IPv6 的问题。也可能是没有分流到对应域名,你可以开个全局抓一下域名。udpxy 或者 msd_lite 我感觉应该没什么关系,可能是你主路由负载比较高。
    dude4
        65
    dude4  
       205 天前
    @yyysuo 你的源码是什么?官方还是 lean 的? lean 的源码基于 openwrt lede ,和官方有些不一样,界面也自己魔改了很多。
    yyysuo
        66
    yyysuo  
    OP
       204 天前 via iPhone
    @dude4 lean 的源码,用 fe80 也不是不能用,并且我发现如果 ipv6 的 dns 没有的话,ipv6 的测试就过不了 。 看了各位大佬的回复,也试了一下 fakeip 网关,体验也不错,实现了真正的透明网关 。
    步骤也非常简单,就是装个 debian+clash fakeip ,主路由上装 mosdns ,国内直连 国外丢给 clash dns 解析成 fakeip ,主路由上做静态路由,fakeip 丢给 debian 的 clash 处理即可,需要特殊处理的是电报和奈飞,把他们的 ip 段也添加到静态路由丢给 clash 处理
    willwon1
        67
    willwon1  
       201 天前
    家里放个手机 手机上开个小火箭 我觉得做旁路由也没啥问题 还稳定
    Karmylr
        68
    Karmylr  
       169 天前
    @dude4 lean 的就是官方 openwrt 的 18.06 分支改的
    teadi
        69
    teadi  
       44 天前
    有个问题,我原本是 copilot 》 openclash 》 us 。
    现在装了大鹅是 copilot 》大鹅》就直连了。
    所以是需要在大鹅里写一遍 copilot 走代理?
    bluaze
        70
    bluaze  
       18 天前
    @yyysuo #63 netflix 如果是 app 的话,有可能是 netflix 使用了自己的 dns ,绕过了系统 dns 配置,从而获得了真实 ip
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6518 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:28 · PVG 10:28 · LAX 19:28 · JFK 22:28
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com