V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
exiaduck
V2EX  ›  Cloudflare

cloudflare warp 客户端的 proxy 模式无法上网

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

    我在不同的系统上都试过 warp 的 proxy 模式,都是无法上网。 本地 win/mac/linux , 国外 vps 上都试过,proxy 模式都不通外网。

    以 macos 为例,warp 全局模式上网是正常,但是转为 proxy 模式,连接 cf 网络能成功,socks 端口在本机 40000 ,使用浏览器插件 SwitchyOmega 走 socks5 连接这个端口,无法上网; warp+ 还是团队账号都一样的情况。

    在终端输入 system_profiler SPNetworkDataType | grep "SOCKS Proxy", 显示: SOCKS Proxy Enabled: Yes SOCKS Proxy Port: 40000 SOCKS Proxy Server: 127.0.0.1 SOCKS Proxy Enabled: No SOCKS Proxy Port: 1081 SOCKS Proxy Server: 127.0.0.1 SOCKS Proxy Enabled: No SOCKS Proxy Port: 1081 SOCKS Proxy Server: 127.0.0.1

    根据这个输出,说明 warp 的 socks5 服务是正常开启了的; 然后终端 curl --proxy socks5://127.0.0.1:40000 https://www.cloudflare.com/cdn-cgi/trace/, 获得输出信息 warp=plus ,说明 warp 是开启了且连接到了 cf 网络的。

    再尝试 curl --proxy socks5://127.0.0.1:40000 其他网站,例如 google.com bing.com 返回了一些奇怪的东西,但看起来不是正常主页的 html ; ifconfig.me ip.sb 这些会返回 ip 地址;

    翻了很久 google 都没找到类似的情况,cf 官方也是说 proxy 模式用 socks 工具连接就 ok ,没提及有什么其他的设置。 大家用 proxy mode 都正常吗?

    29 条回复    2024-03-15 15:13:18 +08:00
    hymzhek
        1
    hymzhek  
       310 天前
    看看 curl -v --proxy socks5://127.0.0.1:40000 https://1.1.1.1 呢
    hymzhek
        2
    hymzhek  
       310 天前
    因为它不给你解析 dns
    exiaduck
        3
    exiaduck  
    OP
       310 天前
    @hymzhek curl 1.1.1.1 倒是看起来是个正常的访问。

    curl -v --proxy socks5://127.0.0.1:40000 https://1.1.1.1

    * Trying 127.0.0.1:40000...
    * SOCKS5 connect to IPv4 1.1.1.1:443 (locally resolved)
    * SOCKS5 request granted.
    * Connected to (nil) (127.0.0.1) port 40000 (#0)
    * ALPN: offers h2
    * ALPN: offers http/1.1
    * CAfile: /etc/ssl/cert.pem
    * CApath: none
    * (304) (OUT), TLS handshake, Client hello (1):
    * (304) (IN), TLS handshake, Server hello (2):
    * (304) (IN), TLS handshake, Unknown (8):
    * (304) (IN), TLS handshake, Certificate (11):
    * (304) (IN), TLS handshake, CERT verify (15):
    * (304) (IN), TLS handshake, Finished (20):
    * (304) (OUT), TLS handshake, Finished (20):
    * SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256
    * ALPN: server accepted h2
    。。。。

    请教一下,要怎么解决这个 dns 的问题?
    Andim
        4
    Andim  
       310 天前
    windows 上可以, 不过我是本地 DNS


    hymzhek
        5
    hymzhek  
       310 天前
    因为它在设置的时候 提示了 仅加密发送到本地代理的流量。不处理 DNS 流量。
    iamwho
        6
    iamwho  
       310 天前
    用 firefox ,开启 DOH 就可以了,代理设置关闭代理 DNS via socks5

    但是 chrome 设置 DOH 之后用 SwitchyOmega 也不行
    exiaduck
        7
    exiaduck  
    OP
       310 天前
    @iamwho 感谢提供信息!
    刚刚测试了,确实 firefox 浏览器本身设置 doh + foxyproxy 插件禁止 dns 经过 socks5 ,就能通网,就是卡卡的,性能不如直接 mode=warp 模式;但是,这个做法貌似不能跨设备分享,比如在一台 win 上 mode=proxy ,即使用工具将 40000 暴露到局域网 2333 ,其他用 firefox 去访问 2333 依然不通。

    看来还是原生客户端 warp 模式体验最好,客户端应该在 wg 协议基础上还有别的优化机制。
    exiaduck
        8
    exiaduck  
    OP
       310 天前
    @hymzhek 感谢提供信息! DNS 还是不太会处理,一脸懵逼。
    XIU2
        9
    XIU2  
       310 天前   ❤️ 6
    不用费劲了,该问题前段时间我试用 Warp 时也遇到了,顺便研究了下,结论如下:

    该问题在于 Warp 的 Proxy 模式( SOCKS5 代理),会接受 DNS 解析请求,但并不是远程 DNS 解析,而是在本地解析,当然用的不是你本地的 DNS ,而是 Cloudflare 的 1.1.1.1 DoH 。

    而问题就出在这里了,Cloudflare 的 DNS 在国内很多地区都是被干扰的,因此导致 Warp 在解析域名 DNS 环节卡住,Warp 会一直重试 IPv4 DoH ,重试次数多了,就会尝试改为 IPv6 DoH (而因为 IPv6 可能干扰没那么普遍、严重,因此一些人可能会遇到浏览器一直加载加载,过段时间就突然加载出来的情况,实际上就是 IPv6 DoH 解析成功了)。


    这时候你会想到:“那为什么我用 curl 可以正常访问呢?”

    这其实是因为 Curl 的 SOCKS5 代理方式分为两种:

    curl --socks5 127.0.0.1:40000 xxxxx
    curl --socks5-hostname 127.0.0.1:40000 xxxxx

    前者是先本地 DNS 解析域名获得 IP 后,再去通过 SOCKS5 代理访问该 IP (也就是该网站)。
    后者是全程走 SOCKS5 代理,即把 DNS 解析环节交给 SOCKS5 代理处理,然后访问网站。

    因此你使用前者来走 Warp 代理时,其实是本地 DNS 解析域名后,再通过代理访问网站,所以可以正常访问。
    你使用后者时,则是 Warp 来 DNS 解析域名,然后超时并不断循环尝试。。。


    总之,对于 Warp 官方客户端的该问题,我没什么好的解决方法(总不能专门整个代理让 Warp 的 DNS 走吧,这岂不是多此一举?)。
    但是你可以用 wgcf 等工具生成一个 WireGuard 配置文件,然后自选一个 Warp 的节点 IP+端口 填进去,再去装个 WireProxy (一个把 WireGuard 转为 SOCKS5 代理的命令行工具)来使用该配置文件(配置文件里有个 dns 项,这个是远程 DNS ,即指定 Warp 服务器上用这个 DNS 去解析域名),这样的话就完美解决该问题了。

    还有其他问题你也可以问我。
    XIU2
        10
    XIU2  
       310 天前   ❤️ 3
    上述结论,是我当初不断尝试,并通过系统自带的 资源监视器、Wireshark 抓包来查看 浏览器、Warp 、Curl 进程访问了哪些 IP 地址,也是在这里面看到 Warp 在不断尝试 1.1.1.1 1.0.0.1 来 DNS 解析域名,如果一直失败就会换成 IPv6 的再去尝试),有兴趣你也可以自己看看,不过我这个研究是好几个月前的了,或许已经过时。

    另外,Warp 的 Warp+ 模式其实就是让所有流量都走远程服务器,包括 DNS 解析流量也是在远程服务器上进行的,所以才不会出现 Warp 的 Proxy 模式的该问题。

    另外,wgcf 等工具生成的 WireGuard 配置文件也可以用于其他设备,比如 Android 直接装 WireGuard 官方客户端,然后导入这个配置文件就能直接用 Warp 节点了。
    exiaduck
        11
    exiaduck  
    OP
       310 天前
    @XIU2 大神解析非常清晰,廓然开朗了,十分感谢!🙏

    wireproxy 我有用在服务器上,只是对原理不太明白;虽然现在 warp+等于无限免费送,24*7 挂着也不心疼,但这样被滥用会不会很快又回到解放前,昨晚想着 warp 全局有时不太方便,就想着进一步研究一下。

    wgcf 提取配置然后用 wireguard 的方式也很棒,但相比 warp 客户端,对端 ip 还是偶尔要手动换,虽然 warp 也不见得次次都分到合适的对端,但他点点开关就 ok 的麻瓜方式也不错。

    刚刚还看了一眼团队账户相关的,cloudflare tunnel 这个组网好像有点厉害,设置合适直接将 wg 或者 tailscale 组网能力都集成起来了,还有群控、分流等等也很厉害。
    IDAEngine
        12
    IDAEngine  
       310 天前
    @exiaduck 有境外 VPS ,直接转发 warp socks 代理就行了
    Dxer
        13
    Dxer  
       310 天前
    wireguard 试试,PC 和移动端都是用 wireguard
    exiaduck
        14
    exiaduck  
    OP
       310 天前
    @IDAEngine 海外 vps 套 warp 主要只是用来解锁一些限制网站,能连到海外服务器了本身就已经解决魔法问题了。。。

    关注的重点是本地 warp 客户端的设置,现在随便白嫖 warp+流量,设置 warp 比管理自建节点简单,作为备用和分流用是很爽的;本地 mode=warp 在应用层跟其他常用代理工具会冲突的,所以同一台机器上套娃分流好像不太好搞(菜+懒);两台机器就比较容易,一台 mode=warp 全局,分一个端口出来给其他机器的代理工具接就很好分流。
    exiaduck
        15
    exiaduck  
    OP
       310 天前
    @Dxer 提取配置接 wg 没毛病的,我关注的重点是本地分流玩法。
    IDAEngine
        16
    IDAEngine  
       310 天前
    @exiaduck 国内直连 wrap 并不稳定,速度也比较慢,还是中转一下比较舒服
    exiaduck
        17
    exiaduck  
    OP
       310 天前
    @IDAEngine #16 南方的电信用户裸连 warp 体验非常好! 现在 warp+的体验分流 80%需求问题不大,如果自己管理 chatgpt 这类应用的连接的话还是需要有海外节点的,两者互补。
    IDAEngine
        18
    IDAEngine  
       310 天前
    @exiaduck 我这里 裸连容易被 Reset ,我都是转发
    exiaduck
        19
    exiaduck  
    OP
       304 天前
    跟进一下这个 case:

    国内网络下,本地使用 warp 客户端的 proxy 模式的简易优雅办法是:
    1. 物理网卡的 DNS 服务指向本机 ip:127.0.0.1
    2. Firefox 使用 foxyproxy 插件,创建 socks5 出口,指向 warp 的端口,默认 127.0.0.1:40000 ;重点:“通过 socks5 代理发送 dns 请求”的选项关闭。chrome 系的 switchomega 没有这个功能。
    3. firefox 隐私与安全 - 安全 dns - 选择增强保护 - 选 cloudflare 或者其他 doh/dot
    3. v2ray 或者 sing-box 带有 dns 处理模块:sing-box 为例,创建一个监听本机 53 端口的入站点,开启流量嗅探,协议选 direct ,创建一个 sock5 指向 warp 的端口为出站点,随便设置一个 tag ,开启 udp_over_tcp
    4. singbox 路由添加匹配 dns 协议,由 dns 规则处理 dns 请求。
    "route": {
    "rules": [
    {
    "protocol": "dns",
    "outbound": "dns-out"
    }
    ]
    }

    5. 设置 singbox 的 dns 处理模块,参考以下:
    "dns": {
    "disable_cache": true,
    "rules": [
    {
    "geosite": "cn",
    "server": "local"
    }
    ],
    "servers": [
    {
    "tag": "cf",
    "address": "tls://1.1.1.1",
    "detour": "warp" #warp 出站点的 tag
    },
    {
    "tag": "local",
    "address": "1.12.12.12",
    "address_resolver":"dns-local",
    "detour": "direct"
    }
    ]
    }


    大致的原理就是,在本地先将请求解析成 ip 再传给 warp ,warp 前端就认为不需要 dns 解析了,然后就通过后端隧道发出去了。浏览器的话,第 2 步就是不让 warp 前端做 dns 解析的关键,暂时只有 ff 的插件能比较简单的解决。

    v2ray 或者 singbox 虽然能处理 dns ,但是一般来说代理工具内部处理 dns 只是做路由匹配,用来决定浏览器的请求包应该发去哪个节点,而不会将 https 请求包的地址从域名形式替换成 ip 形式,所以无法单纯用一层代理套娃来解决。ff 插件拆分出 dns 请求和 https 请求,浏览器就会自己先发出 dns 请求,用代理工具捕获解析好返回 ip 给浏览器,浏览器知道目的地 ip 了,将 https 的域名替换成 ip ,最后再发给 warp 。

    其他的办法是,代理软件的透明代理模式或者 tun 模式可以捕获 warp 前端发送的 dns 请求,这样浏览器就无需插件了,但同样要设置好代理工具的 dns 模块规则; 透明代理要改 iptables ,如无必要最好还是选择 tun 模式,但我不确定 tun 模式会不会有回环的问题。

    总结:
    1. warp 的 proxy 模式性能很拉胯,大概最多能看个 1080p ;
    2. 原生 wg 可以用 sing-box 做完美分流,或者用 sing-box 实现的轻量级 wg 也可以有接近原生 wg 的性能;
    3. dns 分流做好了才能安全冲浪,大家要重视哦,借助 cf 实现起来很简单。peace 。
    eoo
        20
    eoo  
       290 天前
    @XIU2 大佬 可以给个联系方式吗? 我用的是 v2rayaA
    zidekuls
        21
    zidekuls  
       274 天前
    @exiaduck 请问 mode=warp 模式的跨设备分享是如何做到的呢?
    exiaduck
        22
    exiaduck  
    OP
       274 天前
    @zidekuls 用 v2ray 或者 sing-box 做一层桥接即可,我推荐使用 sing-box ;之前回复提到的方法可以优化,只需要注意在 sing-box 配置 warp 出站的 socks 协议为 socks4 版本即可,其他系统 dns 什么的都不需要再修改了; v2ray 或者 sing-box 的 gui 一般都会默认本地开启一个 socks5 服务器,其他设备或者浏览器用 socks5 协议连接即可。

    直接使用 sing-box 内核的话,配置文件参考如下:
    {
    "log":{
    "disabled":false,
    "level":"info",
    "timestamp":true
    },
    "dns":{
    "independent_cache":true,
    "servers":[
    {
    "tag":"cf",
    "address":"tls://1.1.1.1/dns-query",
    "detour":"warp"
    },
    {
    "tag":"local",
    "address":"tls://223.5.5.5",
    "detour":"direct"
    },
    {
    "tag":"rcode",
    "address":"rcode://success"
    }
    ],
    "rules":[
    {
    "geosite":"cn",
    "server":"local"
    }
    ]
    },
    "inbounds":[
    {
    "type":"mixed",
    "tag":"mixed-in",
    "listen":"::",
    "listen_port":2080,
    "sniff":true
    }
    ],
    "outbounds":[
    {
    "type":"direct",
    "tag":"direct"
    },
    {
    "tag":"warp",
    "type":"socks",
    "version":"4",
    "server":"127.0.0.1",
    "server_port":40000
    },
    {
    "type":"block",
    "tag":"block"
    },
    {
    "type":"dns",
    "tag":"dns-out"
    }
    ],
    "route":{
    "final":"direct",
    "auto_detect_interface":true,
    "rules":[
    {
    "protocol":"dns",
    "outbound":"dns-out"
    },
    {
    "geosite":"category-ads-all",
    "outbound":"block"
    },
    {
    "geosite":"cn",
    "geoip":[
    "cn",
    "private"
    ],
    "outbound":"direct"
    }
    ]
    }
    }
    zidekuls
        23
    zidekuls  
       274 天前 via Android
    @exiaduck 谢谢大佬!我研究一下
    garryforreg420
        24
    garryforreg420  
       255 天前
    windows 下使用 warp 模式,然后再在 windows 里面额外启动一个 ccproxy 开放 socks5 对外提供代理服务就好了,非常完美,比自带的 warp+ 自带的 proxy 模式好用多了
    koen10001
        25
    koen10001  
       253 天前
    @garryforreg420 用了 CCPROXY 套 warp 的本地代理, 速度还是慢啊
    garryforreg420
        26
    garryforreg420  
       232 天前
    @koen10001 用 CCPROXY 后,不需要再套 warp 的代理了,warp 不需要运行在代理模式下。
    luckybearops
        27
    luckybearops  
       214 天前
    CCProxy 是好用的,非常棒
    karelrooted
        28
    karelrooted  
       197 天前
    如果本身有用 clash 或者 surge 之类的来额外分流到 cf warp proxy mode 的话,可以设置如下规则让 warp 的 dns 请求走自己的 tunnel 出去

    [Proxy]
    cloudflare = socks5, 127.0.0.1, 40000, udp-relay=true

    [Rule]
    IP-CIDR,1.0.0.1/32,cloudflare,no-resolve
    IP-CIDR,1.1.1.1/32,cloudflare,no-resolve
    IP-CIDR,162.159.36.1/32,cloudflare,no-resolve
    IP-CIDR,162.159.46.1/32,cloudflare,no-resolve
    IP-CIDR6,2606:4700:4700::1111/128,cloudflare,no-resolve
    IP-CIDR6,2606:4700:4700::1001/128,cloudflare,no-resolve
    PROCESS-NAME,/Applications/Cloudflare WARP.app/Contents/MacOS/Cloudflare WARP,DIRECT
    PROCESS-NAME,/Applications/Cloudflare WARP.app/Contents/Resources/CloudflareWARP,DIRECT
    ysc666
        29
    ysc666  
       43 天前
    @garryforreg420 请问具体怎么操作的啊,能否再说的详细些啊... warp 全局开了,ccproxy 端要怎么设置..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1255 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 17:45 · PVG 01:45 · LAX 10:45 · JFK 13:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.