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

软路由代理问题, tg 无法代理问题

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

    相对小众网络配置

    用的 vyos 系统,内部有 3 个容器,adguardhome mosdns clash

    adguardhome 用来缓存 dns 请求,日志查询功能,上级是 mosdns

    mosdns 用来做 dns 分流,国内域名直接指向阿里、腾讯 dns ,国外域名指向 clash dns

    clash ,使用 fake ip ,没有任何规则,容器启用了 tun

    vyos 配置了一条路由 针对 fake ip 段的路由至 clash 容器 IP

    按网上的教程,只要把 tg 的 ip 段路由到 clash 就可以代理,但是无法成功。

    可能会出现问题的地方

    1 ,clash 规则未指定 ip 规则,tg 的流量进来没有捕获,但是我使用 clash 全局模式也未成功

    2 ,clash 使用 fake ip 模式后,无法针对 ip 代理

    3 ,tg 的 ip 段路由设置错误

    请问怎么测试解决这个问题。可付费咨询,4 杯奶茶

    25 条回复    2024-07-24 17:54:39 +08:00
    yyzh
        1
    yyzh  
       229 天前
    TG 内部写死 IP 的.跟微信一样就算 DNS 挂了也能用.所以别折腾 DNS 了.
    Kinnice
        2
    Kinnice  
       229 天前
    clash 容器内增加 tg 的 ip route 到 198.18.1.1(clash tun 网口的地址) [不是在 clash config 里面加规则]
    Kinnice
        3
    Kinnice  
       229 天前
    可以在 clash 容器内 ip route get 149.154.160.0 看看是不是走的 198.18.1.1
    Kinnice
        4
    Kinnice  
       229 天前
    正常应该这样
    149.154.160.0 via 198.18.0.2 dev utun table 1970566510 src 198.18.0.1 uid 0
    cache
    Goooooos
        5
    Goooooos  
       229 天前
    geoip,telegram,proxy,no-resolve
    Goooooos
        6
    Goooooos  
       229 天前
    yikyo
        7
    yikyo  
    OP
       229 天前
    @Kinnice 谢谢,我尝试一下看看,感觉有戏。容器挂载了系统的 tun,可以在系统层面解决吗,

    按您的建议,是由 vyos 将 tg 路由指向 clash, clash 内部再将路由指向 tun 吗
    Kinnice
        8
    Kinnice  
       229 天前
    @yikyo #7 是的,或许你可以直接直接使用 auto-route: true
    eaststarpen
        9
    eaststarpen  
       229 天前
    # Telegram CIDR
    "-p tcp -d 91.105.192.0/23"
    "-p udp -d 91.105.192.0/23"
    "-p tcp -d 91.108.4.0/22"
    "-p udp -d 91.108.4.0/22"
    "-p tcp -d 91.108.8.0/21"
    "-p udp -d 91.108.8.0/21"
    "-p tcp -d 91.108.16.0/21"
    "-p udp -d 91.108.16.0/21"
    "-p tcp -d 91.108.56.0/22"
    "-p udp -d 91.108.56.0/22"
    "-p tcp -d 95.161.64.0/20"
    "-p udp -d 95.161.64.0/20"
    "-p tcp -d 149.154.160.0/20"
    "-p udp -d 149.154.160.0/20"
    "-p tcp -d 185.76.151.0/24"
    "-p udp -d 185.76.151.0/24"


    我用的 singbox 方案和你差不多, 上面是 telegram 的 ip 段
    zbatman
        10
    zbatman  
       229 天前
    问题 1 未指定 IP 规则都会走 Match 了
    问题 2 TG 是纯 ip 连接,不牵扯 fake-ip 、fake-dns
    问题 3 不知道你的 TG IP 段数据来源是啥,参考 https://github.com/Loyalsoldier/clash-rules
    zbatman
        11
    zbatman  
       229 天前
    @eaststarpen 方便发下配置文件吗,之前一直想用 sing-box 实现这个流程
    SenLief
        12
    SenLief  
       229 天前
    tg 用 ip 的,直接用不要解析。
    JimmyChan1506
        13
    JimmyChan1506  
       229 天前
    自建递归 DNS 服务. 省心, 不用折腾这么多事
    PaoPaoDNS + PaoPaoGateWay 了解一下
    yikyo
        14
    yikyo  
    OP
       229 天前
    @Kinnice 感谢老哥,成功了,auto-route 不知道什么情况,用了就不能翻墙。留个 WX ,我转你奶茶钱

    就是现在感觉有点丑陋,需要在宿主跟容器都设置路由。
    Kinnice
        15
    Kinnice  
       229 天前
    @yikyo #14 base64: aWtrLXd4
    Goooooos
        16
    Goooooos  
       229 天前
    @JimmyChan1506 telegram 应该有内建 httpdns ,要把他的服务 ip 加到分流规则,自建 dns 解决不了
    eaststarpen
        17
    eaststarpen  
       229 天前   ❤️ 1
    @zbatman

    ```
    # sing-box version
    sing-box version v1.5.2

    Environment: go1.21.1 linux/mipsle
    Tags: with_clash_api,with_dhcp,with_ech,with_quic,with_utls,with_wireguard
    CGO: disabled
    ```

    配置脚本 https://pastecode.dev/s/53jrbcqi
    最后的 路由表操作 有针对我设备的判断逻辑,你的设备可能不一样。(可以不用管或删去判断逻辑)

    删除 iptables 链 https://pastecode.dev/s/1hn9igce
    没有操作路由表, 调试用

    SingBox 配置文件 https://pastecode.dev/s/qbia00le
    DNS 模块加上一个 dns_direct 是 outbounds 中可能有的 Server 是域名, 需要 Sing-Box 内部解析

    MosDNS 分流, 将需要代理的域名 DNS 请求转发到 SingBox, SingBox 返回 FakeDNS 段 ip.
    zbatman
        18
    zbatman  
       229 天前
    @eaststarpen OK ,谢谢你,我研究下
    sereinfy
        19
    sereinfy  
       228 天前
    解决了是吧,那给路过的看下
    你用的教程是不是在开发者选项里面添加代码的那个,
    就是这个 geoip2ipset.sh 是的话可以往下看了
    其实是代码缺两个变量

    这个方案会阻断所以纯 ip 连接,所以顺便解决了 bt 流量国外的问题。
    顺便也把 tg 挡外面了
    yikyo
        20
    yikyo  
    OP
       228 天前
    @sereinfy 啊,没看懂你那个,我这个大概原因是路由问题,自己将 tg 的 ip 段指向 clash 容器后,容器未处理,在容器内部再设置路由之后就可以了,可能用 clash 配置中的 auto-route 更适合,但是我没成功

    后续看到一个帖子,https://v2ex.com/t/1017263 中的 17 楼,也是用类似的方式处理
    sereinfy
        21
    sereinfy  
       228 天前
    你用的不是开发者选项里面添加代码这个吗,这个是用 ipset 的方式,随着 lclash 启动一个脚本,把 tg 的所以 ip 段,添加到 ipset 然后转发给 7892 端口、很灵活。不需要重复写很多条规则。我不知道容器方式的适不适用。google 搜索 基于 DNS 的内网透明代理分流方案。看下这篇文章。其实我还是觉得这样还是麻烦,不过目前是最佳
    sereinfy
        22
    sereinfy  
       228 天前
    我原本想找更简单的方式,不过 tun 模式下 要复杂了。
    yikyo
        23
    yikyo  
    OP
       228 天前
    @sereinfy 开发者选项是指什么,我系统是 vyos ,三个容器,还是比较简单的,没有额外的配置,clash 也不需要规则。
    如果不需要代理 tg ,没有这些乱七八糟的事,而且我觉得 auto-route 应该可以用,是我哪里没弄好,有时间我再折腾一下。
    JimmyChan1506
        24
    JimmyChan1506  
       208 天前
    @Goooooos telegram 使用的是 ip, 的确需要把它们加到主路由中的静态路由表中, 但不觉得会是个问题
    edgeedge
        25
    edgeedge  
       129 天前
    你的拓朴是这样的吗?:
    网关 ==》 clash 旁路由==》拨号网关==》因特网

    对于 clash 即便做了策略,也无法代理 telegram 的问题,
    1 让 clash 暴露一个 http 代理接口,在 telegram 软件面板填写使用代理,确保这样 TG 是可被代理的
    2 对于透明代理,为什么不行,我猜测,你的网关、clash 旁路由、拨号网关,使用的 ip 地址都是同一段的。对于相同网段的多个相连的网关,现代操作系统,会自动“优化”路由,直接把数据发送到最后一个网关,也就是 拨号网关,这会导致跳过 clash 所在的透明网关。
    解决方法,就是 clash 旁路由网关 和 拨号网关,使用不同的 ip 地址。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2453 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:45 · PVG 12:45 · LAX 20:45 · JFK 23:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.