连接 V2Ray Websocket + TLS 模式的过程 及 排错指引

如果你的梯子以前能用,突然不能用,请看本篇排错教程。

如果你的梯子别人能用,就你不能用,请看本篇排错教程。

如果你的梯子一个设备能用(比如手机),但另一个设备不能用(比如电脑),请看本篇教程。

这几天解决了一些群里的问题, 觉得上一篇排错的文还不够. 本文介绍一下连接到 '节点' 的过程, 希望读者能更好的理解如何排错.

Websocket+TLS模式在v2ray客户端的设置

以常见的v2rayN, v2rayNG和ShadowRocket为例.

v2ray客户端参数对应关系图

(箭头指向的是同一个参数, 以下行文过程中会带上编号方便读者明白我说的是哪个参数)

连接过程

1. TCP连接 地址(1):端口(2)

1.1 如果 地址(1) 是域名, 则先通过DNS将域名解析为IP

2. 构造一个Vmess/VLESS数据包

包含 用户ID(3), 如果是Vmess协议还要加上AlterID

3. 在上一步的基础上构造一个HTTPS的数据包, 并发送出去

3.1 添加声明要访问的 path(6)

3.2 TLS(7) 加密 

3.3 添加声明要访问的域名是 域名(5)

4. HTTPS的数据包到达VPS

分为有无CDN两种情况

4.a 无CDN

第1步 地址(1) 本身就是VPS的公网IP
或者
地址(1) 是域名, 解析出来是VPS的公网IP

直接就送到了

4.b 有CDN

4.b.1 第1步 地址(1) 本身就是CDN网络其中的一个服务器的IP
或者
地址(1) 是域名, 解析出来是CDN网络其中的一个服务器的IP (希望是离你最近的, 最快的)

数据包会先发送到 地址(1) (CDN网络其中的一个服务器)

4.b.2 数据包到达CDN网络以后, CDN网络根据数据包中声明要访问的 域名(5), 将数据包转发到VPS

5. VPS处理数据包

* 以我的脚本配置方式介绍, 其它脚本有可能不是这样

5.1 caddy接到数据包, 根据 path(6) 将数据转发到内部端口

5.2 v2ray从内部端口接到数据包, 根据 用户ID(3) 和AlterID(如果有的话) 鉴权


排错

* 和连接过程对应着看

1. TCP连接

自己ping地址(1), 如果是域名能正确解析吗? IP能通吗?
iOS用iNetTools, 安卓用IP Tools

自己检查VPS端口(2), 能连接吗? (在VPS上caddy确认已运行的情况下)
iOS和安卓使用上面的工具, PC用tcping

如果自己测试结果不正确,用'第三方'测试一下 ping.pe
同样测试DNS结果, ping, 端口

用ping.pe测试IP address或域名

用tcp.ping.pe测试IP地址:端口

如果'第三方'测试域名解析不对, 检查 DNS(Cloudflare) 设置;
如果IP ping不通, 给你的VPS商家发工单, 或者你删鸡重开;
如果端口不通, 再次确认你的VPS上caddy运行没有, 如果caddy已运行, 检查防火墙(也可以发工单). 

如果'第三方'通, 你不通
尝试打开CDN

如果你自己解析域名不对, 尝试换DNS等操作.

4.b.1 数据包传递

如果检测地址(1)和端口(2)是通的, 却不能通过浏览器访问 域名(5) 打开伪装站
请再次确认CDN开关是否打开.
如果CDN确实开了, 说明你本地的GFW检测了数据包中声明要访问的 域名(5)而拦截数据包.

你也可以通过'第三方'检查访问域名的结果.
在你的VPS上curl访问域名, 检查是否有<html>...</html>的结果

curl https://你的域名/

用curl测试https://域名 

换域名, 换VPS弄不被墙的IP搭TCP直连模式.
不过如果真的墙这么凶了, 这些方法说不定也管不了太久. 要么买月抛机场, 要么买服务好的机场, 要么买可以随便换IP的VPS, 或者躺平专注白嫖VPS和节点算了.

如果别人能用,就你用不了,检查就是域名访问不了。还可以用Cloudflare的worker反代域名

进一步的,用自己的域名指向worker解决*.worker.dev被屏蔽的问题

如果地址(1)是域名, 那么你浏览器访问地址(1)应该打开伪装站, 访问 地址(1)/path(6) 应该得到400 Bad Request.

用浏览器测试 https://domain/path 应得到400 Bad Request结果
如果通过浏览器访问 地址(1) 或 地址(1)/path(6) 打开的是Cloudflare的防爬虫页. 说明Cloudflare把你的访问当作了异常流量

Cloudflare 防 DDOS 页面
参考 <Cloudflare防火墙优化>把 域名/path 的访问放开.
这个path应该是秘密的, 你不应该公开给所有人知道. 这个path相当于密码, 长度和强度应该足够高, 防扫. 所以把 域名/path 的访问放开是没问题的.

后记

什么情况下 地址(1) 和 域名(5) 不相同?
如果你想使用CF优选IP, 那么就把 地址(1)填成优选IP, 域名(5)保持不变.

如果你和你的朋友共用, 却不是用的同一款客户端的话, 不要盲目依赖链接和二维码, 人眼检查一遍参数总是好的. 有些参数项可能在不同的客户端有不同的默认值, 请将所有参数项一一检查 .

如果你使用了将 地址(1)解析为CDN服务器IP的骚操作, 请注意这个IP在你朋友那里不一定适用.
你可以将另一个域名解析为你朋友所在区域的CDN服务器IP. 
你朋友的 地址(1) 填另一个域名, 其它参数与你一致.


怎么确认别人能正常使用此节点呢?

除了把节点信息发给别人帮测试一下以外,还可以自己在VPS上运行客户端对接服务端来排除掉自己到墙之间的网络问题。

https://zelikk.blogspot.com/2022/12/v2ray-vps-self-check-troubleshoot.html


如何在自己的电脑上 tcping 测试?

https://zelikk.blogspot.com/2024/09/socat-tcping.html


评论

  1. 真的是太感谢您了,参考您的文章解决了我v2无法使用cf域名访问互联网的问题

    回复删除

发表评论

The Hot3 in Last 30 Days

RackNerd VPS搭Hysteria2 HY2梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存

RackNerd VPS搭V2Ray WSS梯子 年付 $10.98 1G端口 3T流量 17G存储 1GB内存