请教 Clash 透明代理问题, iPhone 的哔哩哔哩、微博 app 无法联网,但是网页正常 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AllenHua
V2EX    问与答

请教 Clash 透明代理问题, iPhone 的哔哩哔哩、微博 app 无法联网,但是网页正常

  •  
  •   AllenHua 2021-11-06 21:13:06 +08:00 14326 次点击
    这是一个创建于 1439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    和这个 issue 类似,但是我没找到原因在哪,求助攻。

    clash 透明代理跑在局域网 n1 这台设备上。

    • iPhone 的哔哩哔哩、微博 app 无法联网,但是网页正常
    • 桌面平台设备访问 bilibili 、weibo web 也正常
    • 安卓设备访问 share 微博客户端也 ok (没有安装微博官方 app 就没测试了)

    clash config.yaml 配置

    redir-port: 7892 mixed-port: 7890 # Transparent proxy server port for Linux (TProxy TCP and TProxy UDP) #tproxy-port: 7893 allow-lan: true mode: rule # 设置输出日志的等级 (默认为 info) # silent / info / warning / error / debug log-level: silent external-controller: 0.0.0.0:9090 secret: "" external-ui: dashboard # hosts 设置,只有当 DNS 模式为 redir-host 时生效 hosts: # '*.clash.dev': 127.0.0.1 # '.dev': 127.0.0.1 # 'alpha.clash.dev': '::1' dns: enable: true # 启用自定义 DNS ipv6: false # default is false listen: 0.0.0.0:53 enhanced-mode: fake-ip #DNS 模式,这里推荐使用 fake-ip ,因为后续的 iptables 规则是根据 fake-ip 做的 fake-ip-range: 198.18.0.1/16 # if you don't know what it is, don't change it default-nameserver: - 180.76.76.76 - 119.29.29.29 - 223.5.5.5 nameserver: - https://doh.pub/dns-query - https://dns.alidns.com/dns-query 

    其中 fallback 相关的配置已经注释掉了

     fallback: - 101.6.6.6:5353 fallback-filter: geoip: true ipcidr: - 240.0.0.0/4 

    clash debug 级别的日志

    [TCP] dial 全球直连 (match GeoIP/CN) to 202.113.3.108:43388 error: dial tcp4 202.113.3.108:43388: i/o timeout [TCP] dial 全球直连 (match GeoIP/CN) to 101.229.42.233:51413 error: dial tcp4 101.229.42.233:51413: connect: connection refused find process name Process error: no such process 

    感觉还是 dns 的问题,可以看本文开头那个 issue

    已经查了一些资料

    第 1 条附言    2021-11-07 08:24:42 +08:00

    标题中的问题解决了,早上醒来观察了一下微博自带设置和系统中微博 app 的设置,最终发现“本地网络” 没有给权限,打开后就正常了,微博 app 和 哔哩哔哩 app正常联网了。

    20211107082024.png

    由于平时使用 app 大部分都是只给最小权限,这里忽略了……

    然后还有一点感想,人在清醒的时候更容易发现 bug 啊(去年有一次在公司午睡后起来也是立马解决了 bug)。大家都要多注意休息。

    38 条回复    2024-12-20 11:00:28 +08:00
    bigbyto
        1
    bigbyto  
       2021-11-06 21:43:16 +08:00 via iPhone   1
    我感觉 clash 的 fakeip 不好用。我的透明代理 dns 方案是 dnsmasq+dnscrypt-proxy ,前者分流国内域名,后者设置 socks5 代理用 google 的 doh 解决污染问题。
    AllenHua
        2
    AllenHua  
    OP
       2021-11-06 21:49:26 +08:00
    @bigbyto #1 可以分享一下吗

    我也搜到了很多说法,clash 这种方案做透明代理都不太适合
    love4taylor
        3
    love4taylor  
    PRO
       2021-11-06 21:59:06 +08:00   1
    fakeip 的话等等支持持久化的版本发布吧

    https://github.com/Dreamacro/clash/pull/1662
    yanyumihuang
        4
    yanyumihuang  
       2021-11-06 22:12:31 +08:00 via Android
    你是 openclash ,还是 clash 的 tun 模式。前者不懂,后者用 iptables 将 dns 指向 clash 监听的端口
    yanyumihuang
        5
    yanyumihuang  
       2021-11-06 22:14:18 +08:00 via Android
    另外用不到 v6 就把 ipv6 关了,设备会优先使用 ipv6 ,这样会出现问题
    bigbyto
        6
    bigbyto  
       2021-11-06 22:15:36 +08:00 via iPhone
    @AllenHua clash 可以做透明代理,不过别用它的 fakeip ,你可以参考我那个 dns 方案,我家里正在用的,很稳定。
    AllenHua
        7
    AllenHua  
    OP
       2021-11-06 22:15:48 +08:00
    @yanyumihuang #4 运行在 armbian 上,是 clash core 。

    iptables 应该没什么问题

    ```
    iptables -t nat -N clash
    iptables -t nat -N clash_dns

    iptables -t nat -A PREROUTING -p tcp --dport 53 -d 198.18.0.0/24 -j clash_dns
    iptables -t nat -A PREROUTING -p udp --dport 53 -d 198.18.0.0/24 -j clash_dns
    iptables -t nat -A PREROUTING -p tcp -j clash

    iptables -t nat -A clash_dns -p udp --dport 53 -d 198.18.0.0/24 -j DNAT --to-destination 10.10.10.4:53
    iptables -t nat -A clash_dns -p tcp --dport 53 -d 198.18.0.0/24 -j DNAT --to-destination 10.10.10.4:53

    iptables -t nat -A clash -d 1.0.0.0/8 -j ACCEPT
    iptables -t nat -A clash -d 10.0.0.0/8 -j ACCEPT
    iptables -t nat -A clash -d 100.64.0.0/10 -j ACCEPT
    iptables -t nat -A clash -d 127.0.0.0/8 -j ACCEPT
    iptables -t nat -A clash -d 169.254.0.0/16 -j ACCEPT
    iptables -t nat -A clash -d 172.16.0.0/12 -j ACCEPT
    iptables -t nat -A clash -d 192.168.0.0/16 -j ACCEPT
    iptables -t nat -A clash -d 224.0.0.0/4 -j ACCEPT
    iptables -t nat -A clash -d 240.0.0.0/4 -j ACCEPT
    iptables -t nat -A clash -d 192.168.1.2/32 -j ACCEPT

    iptables -t nat -A clash -p tcp --dport 22 -d 10.10.10.4/32 -j ACCEPT

    iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892
    ```

    注:n1 的 ip 是 10.10.10.4
    AllenHua
        8
    AllenHua  
    OP
       2021-11-06 22:17:18 +08:00
    @yanyumihuang #5 是的 我的 ipv6 已经全部关掉了。主路由是个 x86 openwrt


    @bigbyto #6 所以有什么教程可以分享的吗 刚搜了一下 dnscrypt-proxy 部署的记录文章都很少
    hronro
        9
    hronro  
       2021-11-06 23:13:12 +08:00
    @bigbyto #1 我之前也是没用 clash 内置的 DNS ,但后来发现如果这样 clash 很多域名匹配的规则就无法生效了,因为 clash 拿不到域名的信息。请问你是如何解决这个问题的?
    bigbyto
        10
    bigbyto  
       2021-11-06 23:19:16 +08:00 via iPhone
    @hronro 我的方案主要就是用 dnscrypt-proxy 解决 dns 污染。家里有点事在处理,晚点详细说下。
    bigbyto
        11
    bigbyto  
       2021-11-06 23:20:16 +08:00 via iPhone
    @AllenHua 官方文档挺详细的,有空我整理一下我的配置
    AllenHua
        12
    AllenHua  
    OP
       2021-11-06 23:36:28 +08:00
    @bigbyto #11 很期待你的分享。我刚参考了一下这个 https://github.com/XXpE3/clash_raspberrypi/blob/master/dnscrypt-proxy.md 但是提示 `[FATAL] Unsupported key in configuration file: [fallback_resolver]` 我明明用了更新的版本。注释了这一行再运行发现提示 `[FATAL] No servers configured` 官方指导性的 toml config file 800+ lines ,的确有些头疼啊。我还原了 iptables 暂时先用着 clash 内置 dns 了
    Kinnice
        13
    Kinnice  
       2021-11-07 00:05:13 +08:00 via Android
    最好不要使用 fakeip
    xenme
        14
    xenme  
       2021-11-07 06:56:05 +08:00 via iPhone
    dns 加 ip 分流,clash 只做透明代理比较稳定
    yanyumihuang
        15
    yanyumihuang  
       2021-11-07 08:32:28 +08:00
    @AllenHua 昨晚睡了,我使用的 clash 的 tun 版本,fake ip 模式,这是目前我在用的 iptables ,只要 dns 和网关指定为相应 IP ,就能透明上网。没关 ipV6 时,因为抢答,手机总是不能透明代理,关了 ipv6 ,发现国内 app 巨慢,加上下面的 iptablles 就 OK 了。这个还解决了 Android 微信视频别人听不到你讲话的问题。因为我用的是 tun 版本,所以不需要最后将所有流量转向 7892 端口,直接就能处理了
    sudo iptables -t nat -N clash
    sudo iptables -t nat -N clash_dns

    sudo iptables -t nat -A PREROUTING -j clash_dns
    sudo iptables -t nat -A PREROUTING -j clash

    sudo iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.2.2

    sudo iptables -t nat -A clash_dns -p udp --dport 53 -j DNAT --to-destination 192.168.2.2:53
    sudo iptables -t nat -A clash_dns -p tcp --dport 53 -j DNAT --to-destination 192.168.2.2:53
    sudo iptables -t nat -A clash -d 0.0.0.0/8 -j RETURN
    sudo iptables -t nat -A clash -d 10.0.0.0/8 -j RETURN
    sudo iptables -t nat -A clash -d 127.0.0.0/8 -j RETURN
    sudo iptables -t nat -A clash -d 169.254.0.0/16 -j RETURN
    sudo iptables -t nat -A clash -d 172.16.0.0/12 -j RETURN
    sudo iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN
    sudo iptables -t nat -A clash -d 224.0.0.0/4 -j RETURN
    sudo iptables -t nat -A clash -d 240.0.0.0/4 -j RETURN
    AllenHua
        16
    AllenHua  
    OP
       2021-11-07 08:32:40 +08:00
    另外我还有几个问题

    1. Chrome 和 Alook 没有给 “本地网络” 的权限但是可以正常使用代理。我是给 wifi 手动设置代理的,代理 ip 就是 n1 的 ip 10.10.10.4 ,为什么 Chrome 和 Alook 不需要这个权限呢?


    Firefox 和 Edge 没有这个设置。

    2. Transparent proxy 可以代理哪些协议? 看 https://lancellc.gitbook.io/clash/clash-config-file/an-example-configuration-file

    ```
    # Transparent proxy server port for Linux and macOS (Redirect TCP and TProxy UDP)
    # redir-port: 7892
    # Transparent proxy server port for Linux (TProxy TCP and TProxy UDP)
    # tproxy-port: 7893
    ```

    为什么看到的透明代理教程都是说设置好了,将局域网客户端的 default gateway 和 dns 都指向透明代理设备的 IP 然后就可以无感翻强了。不太明白这里的实践,这是怎么实现的?我为什么不行,还是需要设置系统代理,或者手动对浏览器、终端设置代理才可以帆樯。telegram 倒是可以“无感翻强”……

    求解
    AllenHua
        17
    AllenHua  
    OP
       2021-11-07 08:34:53 +08:00
    @yanyumihuang #15 谢谢分享,我回头用用 tun ,这个是在 clash premium 里?听说没有开源(不像基础 clash core 开源)
    yanyumihuang
        18
    yanyumihuang  
       2021-11-07 08:43:30 +08:00
    @AllenHua 嗯,和开源的版本是共用代码,然后另外增加了一些功能。搞透明代理建议用 tun ,简单方便,用 root 模式跑起来后,执行上面我发的 iptables 后将设备的 dns 和网关设置为运行 clash 的设备的 IP 就好。tun 版本有个缺点,ip 直连类无法处理。比如 telegram 需要手动设置代理外。想解决这个问题,就再加上一个 iptables
    sudo iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892
    即可
    hronro
        19
    hronro  
       2021-11-07 12:33:41 +08:00
    @AllenHua #16
    「将局域网客户端的 default gateway 和 dns 都指向透明代理设备的 IP 然后就可以无感翻强了。不太明白这里的实践,这是怎么实现的?」
    把你路由器上 DHCP server 的配置里面的 gateway 和 DNS 改成你想要的 IP 就行了。
    AllenHua
        20
    AllenHua  
    OP
       2021-11-07 12:51:09 +08:00
    @hronro #19 我的确是这样做的 可以看这个 t/813612
    这样「无感帆樯」只有 telegram 可以做到,chrome terminal 依然要 set proxy

    比如 terminal

    ```
    export http_proxy=http://10.10.10.4:7890
    export https_proxy=http://10.10.10.4:7890
    ```

    比如 chrome 的 switchy omega 里配置一个 profile 使用 10.10.10.4 的 socks 、http(s) 代理

    终端和浏览器这样配置之后才可以帆樯。我想象的无感是局域网设备不需要做任何配置的。如果我理解的有误,还请指正。

    ```
    # Transparent proxy server port for Linux and macOS (Redirect TCP and TProxy UDP)
    redir-port: 7892
    ```

    7892 这个端口 不只能 Redirect TCP and TProxy UDP 么
    eggt
        21
    eggt  
       2021-11-07 14:58:37 +08:00 via iPhone
    楼主,我倒是想请教下局域网 N1 上跑 clash 的问题,我是 N1 armbian 上运行 docker ,docker 运行 openwrt ,目前部署上去了,但用不了,能加个蟑小龙请教一下吗? bWN5ZGlhCg==
    AllenHua
        22
    AllenHua  
    OP
       2021-11-07 15:22:09 +08:00 via iPhone
    @eggt #21 晚上吧
    bigbyto
        23
    bigbyto  
       2021-11-07 15:32:03 +08:00
    @AllenHua dnscrypt-proxy 只需要指定 server_names 即可,我的配置是:

    server_names = ['scaleway-fr', 'google', 'yandex', 'cloudflare']

    如果这几个网站没法访问,还可以配置 http_proxy 或 socks5 proxy 。

    proxy = 'socks5://127.0.0.1:7890'
    http_proxy = 'http://127.0.0.1:7891'

    一般情况不需要指定,cloudflare 的 doh 应该是可用的,查询结果会被 dnscrypt-proxy 缓存起来,这个的配置就是这样。搭配 dnsmasq 的话有两种用法:

    1. 使用 dnscrypt-proxy 作为 dnsmasq 的上游
    dnsmsaq 需要去 github 找一份国内域名的列表,这份列表使用国内的 dns 解析,可以用阿里的 223.5.5.5 。关于这些的配置网上有很多,这样就可以实现国内域名用国内 dns 解析,其他域名使用 dnscrypt-proxy 解析。

    需要注意的是,用了这个方法,如果你配置了 http_proxy 或者 socks5 来代理 doh 解析时,记得要在 dnsmsaq 中指定你的 fq 服务器域名使用一个国内或者其他可以用的 dns 服务来解析,不然会因为你的域名不在 dnsmasq 不在白名单内,跑到 dnscrypt-proxy 解析,造成无法解析你的 server 的情况。

    2. dnsmasq 配置被墙的域名列表,配置 dnscrypt-proxy 解析
    这种方案就是跟上面反过来,需要自己去整理被墙的域名列表。
    m1nm13
        24
    m1nm13  
       2021-11-07 16:51:00 +08:00
    在 MIPS 和 ARM 版的 Openclash 上疯狂翻车,我已经不信任这两个版本了,现在只用 clash for windows , X86 的 Openclash 没试过,不评论。

    一般就是 DNSMASQ 有问题,但是懒得弄。和 CLASH 本身可能并没有关系,大概率和 OPENWRT 水土不服。各种 ADGUARD ,smartDNS 之类的 DNS 服务嵌套一下,DNS 很容易就崩溃在莫名奇妙的地方。

    N1 做旁路由我也遇到过奇葩的,不能有 br-lan 的问题,不然通过 WIFI 连接的话,反复 DNS 超时。但是不用 br-lan,只用 ETH0 ,又有很多服务是硬绑定 bridge 的,删了 br-lan 就反复崩溃报错。只能说,开源有好的一面,也有不好的一面
    AllenHua
        25
    AllenHua  
    OP
       2021-11-07 17:25:13 +08:00
    @bigbyto #23 非常感谢分享了。不过我也有发现 https://github.com/wolf-joe/ts-dns 这个 dns 转发器似乎部署在本地也很不错呢。
    eggt
        26
    eggt  
       2021-11-07 17:53:46 +08:00 via iPhone
    @AllenHua 好的,多谢老哥了
    AllenHua
        27
    AllenHua  
    OP
       2021-11-07 18:48:03 +08:00 via iPhone
    @m1nm13 #24 我这使用过几次 openclash 也是各种问题,虽然界面看起来像是很多功能,非常强大。但是诸如 ruby 依赖、clash 守护程序未运行我遇到过好几次。很可能与 openwrt 固件相关,大家用的都是不同的人编译的(或是用户自己编译的)。

    可以尝试 clash core + dashboard ,也一样很好用。
    2218675712
        28
    2218675712  
       2021-11-07 20:59:41 +08:00
    对的,这周末白折腾两天,还是退回到老毛子
    AllenHua
        29
    AllenHua  
    OP
       2021-11-10 09:40:52 +08:00
    @2218675712 #28 openclash 对各个依赖的“依赖”太强烈了,稍有不适就无法运行,clash core 目前用下来感觉很省心
    adrianzhang
        30
    adrianzhang  
       2022-01-12 18:45:27 +08:00
    @hronro
    @bigbyto 同问一下
    没用 clash 内置的 DNS ,但后来发现如果这样 clash 很多域名匹配的规则就无法生效了,因为 clash 拿不到域名的信息。请问你是如何解决这个问题的?
    bigbyto
        31
    bigbyto  
       2022-01-12 19:54:33 +08:00 via iPhone   1
    @adrianzhang 你是指被 dns 污染的域名无法解析?对于被 dns 污染的域名,需要使用 dns 代理。我是用 dnscrypt-proxy 代理被污染的域名同时缓存 dns 应答。针对国内域名做分流走阿里 doh 。
    adrianzhang
        32
    adrianzhang  
       2022-01-12 20:40:24 +08:00
    @bigbyto 我的情况是这样的,局域网里有无污染 DNS 服务器,Clash 配置里 dns false ,rules 里配置不同域名走不同的 proxy 条目不生效。直接用 socks5 传给 Clash 域名也匹配不到域名相关的 proxy 。
    hronro
        33
    hronro  
       2022-01-12 20:45:41 +08:00   1
    @adrianzhang #30
    这个问题我已经解决了。
    把 Clash 的上游 DNS 设置为你无污染 DNS 服务器,然后局域网内其他设备使用 Clash 的 DNS 即可。
    bigbyto
        34
    bigbyto  
       2022-01-12 21:40:21 +08:00   1
    @adrianzhang 意思是你的分流还是基于 clash 吗?我的分流是 dnsmasq 做的,dnscrypt-proxy 作为 dnsmasq 的上游。dnsmasq 有人维护了国内的地址,直接走 223.5.5.5 或者内网的国内 doh ,白名单外走 dnscrypt-proxy 。这个规则可以应付绝大多数情况。
    adrianzhang
        35
    adrianzhang  
       2022-01-13 00:57:24 +08:00
    @hronro 就是说,Clash 配置里要 dns enable ,那 fake ip 什么的怎么弄?

    @bigbyto 我也是 dnsmasq 做的,单独一个机器跑 dnsmasq 。
    hronro
        36
    hronro  
       2022-01-13 10:37:43 +08:00 via iPhone   1
    @adrianzhang #35 我没用 fake ip ,用的 redir-host
    adrianzhang
        37
    adrianzhang  
       2022-01-13 10:49:05 +08:00
    @hronro 好的,非常感谢!
    gumgum291
        38
    gumgum291  
       300 天前
    牛逼,困扰了我好久
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5798 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:20 PVG 14:20 LAX 23:20 JFK 02:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86