查看: 4|回复: 0

[转载] 国外vps被封?使用Cloudflare + Nginx + v2**y,戴丽服务搭建

[复制链接]
发表于 昨天 21:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

Cloudflare + Nginx + v2**y:戴丽服务搭建与排障指南

昨天刷到一个免费注册域名的帖子在 https://my.dnshe.com/ 注册了一个**.cc.cd的二级域名;可以在cf托管。于是找到之前被封的一个vps,搭建了一个戴丽服务:本文记录一套使用 Cloudflare 橙云戴丽、Nginx 和 v2**y 的部署方法:客户端通过域名访问 Cloudflare,由 Cloudflare 通过 HTTPS 回源到 VPS,再由 Nginx 将 WebSocket 请求转交给本机 v2**y。
除了安装配置,文章也整理了本次实际遇到的两个问题:TUN 模式下的 DNS 解析异常,以及客户端误用 TCP、未开启 TLS 导致连接失败。
全文使用 example.com 作为示例域名。操作前请统一替换为自己的实际域名,UUID 则在自己的服务器上生成。

一、先理解整条访问链路

环节
作用
客户端
接收需要戴丽的请求,封装为 VMess 数据,通过 WebSocket 和 TLS 发出
Cloudflare
接收客户端连接,将请求转发至 VPS 源站
Nginx
处理源站 HTTPS,根据 /bridge 路径转发 WebSocket 请求
v2**y
验证 UUID、解析 VMess 数据,连接真正的目标地址
目标网站
接收来自 VPS 的请求;出口通常是 VPS 的公网 IP
响应沿相反方向返回客户端。

为什么源站 IP 无法直连,也可能使用这套方案?

开启橙云后,客户端查询域名得到的是 Cloudflare 边缘 IP,Cloudflare 再根据控制台中的记录连接 VPS。客户端不需要直接连接 VPS 的公网 IP。Cloudflare 戴丽状态说明
因此,实际需要满足的是:
  • 客户端能够访问该域名对应的 Cloudflare 边缘节点。
  • Cloudflare 能够通过 HTTPS 连接 VPS。
  • VPS 能够访问目标网站或服务。
域名只是使用 Cloudflare DNS、但记录未开启橙云时,不具备上述转发效果。Cloudflare 节点和域名的可达性仍受实际网络影响,这套方案不能保证长期在所有网络上可用。

TLS、WebSocket 和 VMess 分别负责什么?

  • TLS:保护链路传输。客户端到 Cloudflare、Cloudflare 到 Nginx 是两段独立的 TLS 连接。
  • WebSocket:承载戴丽数据,使其能够经过 HTTP 反向戴丽链路。
  • VMess:负责客户端与 v2**y 之间的认证和戴丽数据传输。本文客户端使用 auto 加密,内部 VMess 数据仍有加密保护。
  • UUID:VMess 的认证凭据,客户端和服务端必须一致。
  • /bridge:WebSocket 路径,客户端、Nginx 和 v2**y 必须一致。
Cloudflare 会终止客户端 TLS,因此不能将整条链路理解为一条从客户端直达 VPS 的 TLS 连接。Full (strict) 说明VMess 配置说明

二、准备环境和参数

本文使用以下环境:
  • 一台能够管理的 Ubuntu / Debian VPS,使用 systemd。
  • 一个已经接入 Cloudflare、状态为 Active 的域名。
  • Windows 客户端 v2**yN。
  • VPS 公网 TCP 443 端口可供 Cloudflare 回源。
如果 VPS 已经安装 Nginx 或 v2**y,请先检查现有配置,合并对应配置,避免覆盖正在使用的服务。以下步骤按新部署示例编写。
参数
本文示例
连接域名
example.com
公网 HTTPS 端口
443
v2**y 监听地址
127.0.0.1
v2**y 监听端口
10000
WebSocket 路径
/bridge
协议
VMess
传输方式
ws
客户端加密方式
auto
AlterID
0
如果改用 富强.example.com,需要同步修改 DNS 记录、Nginx 的 server_name 和客户端的地址、Host、SNI。

三、配置 Cloudflare DNS

进入域名的 DNS → Records → Add record,添加:
字段
内容
Type
A
Name
@
IPv4 address
VPS 的实际公网 IPv4
Proxy status
Proxied,橙云开启
TTL
Auto
@ 代表主域名 example.com。若使用 V*N.example.com,Name 填 V*N
保存后可以在 Windows PowerShell 中查询:
shell
橙云生效后,应查询到 Cloudflare 的地址。新增记录可能受已有 DNS 缓存影响,不要把一次查询无结果直接当成记录不存在。
证书中的 example.com  *.example.com 仅表示证书覆盖范围,不会自动创建 DNS 记录。

四、安装 Nginx 和 v2**y

本节命令全部在 VPS 的 Linux 终端执行。
安装依赖:
shell
  下载并运行 V2Fly 官方安装脚本:
shell
  上一步下载成功后执行:
shell
该安装方式默认使用 /usr/local/etc/v2**y/config.json,服务名称为 v2**y。本文使用 v2**y 5.x 的命令行以及传统 JSON 配置格式,不使用 jsonv5 格式。官方安装说明
查看安装版本:
shell
  生成 UUID:
shell
保存这个值,服务端和客户端均使用同一个 UUID。

五、配置 v2**y 服务端

编辑配置文件:
shell
  填入以下内容,将 REPLACE_WITH_YOUR_UUID 替换为刚才生成的 UUID:
javascript
这里的 streamSettings.security = none 表示 Nginx 到本机 v2**y 这一段不使用 TLS。它不是客户端 VMess 的加密方式,也不表示公网链路没有加密。
listen 使用 127.0.0.1,因此无需在公网开放 10000 端口。Nginx 负责处理外部 HTTPS 连接,再转发给 v2**y。WebSocket 配置说明

六、创建并保存源站证书

在 Cloudflare 控制台进入:
SSL/TLS → Origin Server → Create Certificate
选择 Cloudflare 自动生成私钥和 CSR,密钥类型可以使用 RSA。证书覆盖域名保留:
shell
其中,前者覆盖主域名,后者覆盖一级子域名,例如 富强.example.com
创建后选择 PEM 格式,将 Origin Certificate  Private Key 分别保存到 VPS。先创建目录:
shell
  编辑证书文件,粘贴完整证书内容:
shell
  编辑私钥文件,粘贴完整私钥内容:
shell
  设置文件权限:
shell
文件名可以自定义,只需与 Nginx 配置对应;实际覆盖哪些域名由证书内容决定。
Origin CA 证书用于 Cloudflare 到源站的连接。客户端通过橙云访问时看到的是 Cloudflare 边缘证书;如果关闭橙云直接访问源站,浏览器通常不会信任 Origin CA 证书。Origin CA 官方说明

七、配置 Nginx

新建站点配置:
shell
  写入:
shell
这份配置将 /bridge 精确匹配到 v2**y,其他路径返回一个简单页面。proxy_pass 后没有附加路径,因此会保留原始请求路径。
proxy_http_version 1.1Upgrade  Connection 用于 WebSocket 升级。不要把客户端配置为普通 VMess TCP 后直接连接这套 HTTP 戴丽入口。Nginx WebSocket 说明
检查两个配置:
shell
  确认 v2**y 输出 Configuration OK.,Nginx 输出语法检查通过后,再启动服务。上述 v2**y 检查命令适用于 5.x。v2**y test 命令定义
shell
  查看运行状态和监听端口:
shell
应能看到 Nginx 监听公网 443,以及 v2**y 监听 127.0.0.1:10000
同时在服务商安全组和服务器防火墙中放行回源所需的 TCP 443。如果正在使用 UFW,可添加:
shell
不需要为了本教程额外启用 UFW,也不需要开放公网 10000。使用 Origin CA 的本流程无需为了申请证书开放 80。

八、完成 Cloudflare HTTPS 与 WebSocket 设置

源站 Nginx 的证书和 443 端口就绪后,回到 SSL/TLS → Overview → Configure,选择 Full (strict)。
这个模式会加密回源连接,并检查源站证书的有效期、域名和签发机构。若同一域名区域下还有其他站点,全局模式调整也会影响它们,应确保相关源站支持该模式。Full (strict) 官方说明
 Network 页面确认 WebSockets 已开启,并确认 Edge Certificates 中覆盖连接域名的证书已生效。
Cloudflare 支持戴丽 WebSocket,但初次握手仍可能受到安全规则影响。若该路径被浏览器验证码拦截,戴丽客户端无法完成这种交互,需要查看命中的具体规则,而不是关闭整个站点的安全功能。Cloudflare WebSocket 说明

九、配置 v2**yN 客户端

添加一个 VMess 节点,填写:
客户端字段
配置值
别名
自定义,例如 CF-VMess
地址 address
example.com
端口 port
443
用户 ID
服务端配置中的同一个 UUID
额外 ID / AlterID
0
加密方式 security
auto
传输协议 network
ws
伪装域名 / WebSocket Host
example.com
路径 path
/bridge
传输层安全 TLS
tls
SNI / ServerName
example.com
跳过证书验证 / allowInsecure
关闭 / false
客户端地址、Host 和 SNI 填实际连接域名,不要填写 *.example.com
保存后设为活动节点。初次测试时保持 TUN 关闭,使用 自动配置系统戴丽,先验证浏览器戴丽访问是否正常。
系统戴丽主要作用于遵循系统戴丽设置的应用,并不等于所有应用流量都被接管。如果以后需要 TUN,可在基本连接正常后单独配置和验证其 DNS、路由行为。v2**yN 系统戴丽说明

十、按层验证,不要只看测速结果

1. 验证 DNS

在客户端电脑查询:
shell
检查返回的地址,也要注意查询实际使用了哪台 DNS 服务器。

2. 验证 HTTPS

在浏览器访问 https://example.com/,应看到:
shell
这说明当前访问路径中的域名、Cloudflare 和 Nginx 页面响应正常,尚未验证 VMess 认证。
也可以在 Windows PowerShell 中执行:
shell
预期返回 HTTP 200。若要验证国内直连 Cloudflare,应临时关闭 TUN 并清除系统戴丽后测试;经已有戴丽成功访问,不能证明国内直连也一定可达。

3. 验证 WebSocket

在具备 curl 的 Linux / macOS 终端执行以下握手检查。若要检查客户端到 Cloudflare 这一段,应在客户端所在网络执行,而不只在 VPS 上执行:
shell
预期看到 101 Switching Protocols,表示 WebSocket 升级成功。该命令不会发送完整 VMess 会话,之后超时或连接关闭不代表前面的握手失败。
直接在浏览器访问 /bridge 不会自动构造上述握手,因此不能用普通页面响应代替 WebSocket 测试。

4. 验证完整戴丽访问

在 v2**yN 中选中节点,开启系统戴丽,再访问需要经过戴丽的目标网站。此步骤才同时验证 VMess 认证、VPS 出站和应用访问。
现象
已验证的范围
DNS 返回 Cloudflare 地址
域名解析与橙云入口
HTTPS 返回 200
页面访问链路
WebSocket 返回 101
WebSocket 转发链路
客户端通过该节点访问目标成功
完整戴丽链路

十一、本次遇到的两个实际问题

问题一:公共 DNS 正常,但本机始终打不开网页

当时公共 DNS 已经返回 Cloudflare 地址,外部检测也能够访问页面,但 Windows 本机查询出现:
shell
进一步查看网卡配置,发现 172.19.0.2 属于本机 singbox_tun 虚拟网卡,查询实际经过 v2**yN / sing-box 的 TUN DNS。
关闭 TUN 后,网页恢复访问。这将问题范围缩小到了当时的 TUN DNS 解析链路;不能仅凭这个现象断言是哪一个上游 DNS、缓存或路由规则出错。
遇到类似情况,可以按顺序排查:
  1. 1. 记录当前客户端配置,临时关闭 TUN。
  2. 2. 清除系统戴丽,单独验证直连域名。
  3. 3. 在管理员 PowerShell 中清除系统 DNS 缓存并重新查询。
  4. 4. 若恢复正常,再检查戴丽客户端的 DNS 与路由配置。
shell
  可以用以下命令查看 DNS 绑定到了哪张网卡:
shell
UnKnown 只是 DNS 服务器名称未能显示,单独出现并不能证明 DNS 故障;本次关键现象是查询超时且没有返回地址。172.19.0.2 也不是所有客户端固定使用的地址,要以实际网卡配置为准。
TUN 可以接管 DNS 请求,所以只刷新 Windows 缓存不一定能清除戴丽核心或上游 DNS 中的问题。sing-box TUN 文档

问题二:网页能打开,但 v2**yN 节点连接失败

当时客户端仍保留默认参数:
shell
而服务端部署的是 VMess + WebSocket + TLS。两端传输参数不一致,连接自然无法完成。
修改为:
并确认 UUID 与服务端一致后,节点连接成功。
客户端的延迟 -1 或“跳过测试”只表示该次测试没有成功,不能直接当成 VPS 不可达或 Cloudflare 无法回源的证据。

十二、其他常见问题

现象
优先检查
域名无法解析
DNS 记录、域名委派、本机 DNS、TUN DNS、缓存
Cloudflare 521
源站拒绝连接;检查 Nginx 是否监听和防火墙规则
Cloudflare 522
Cloudflare 回源连接超时;检查网络、安全组及源站状态
Cloudflare 525
Cloudflare 与源站 TLS 握手失败
Cloudflare 526
Full (strict) 模式下源站证书验证失败
/bridge 返回 502
检查 v2**y 是否运行、是否监听 127.0.0.1:10000,以及 Nginx 错误日志
普通页面正常,WebSocket 握手异常
三处路径是否一致、升级头、Cloudflare WebSocket 设置与安全规则
WebSocket 返回 101,但戴丽仍失败
UUID、VMess 配置、系统时间、服务端出站网络
HTTP 错误码只能帮助定位范围,最终应结合响应来源及日志判断。Cloudflare 5xx 错误文档
服务端常用排查命令:
shell
VMess 依赖时间校验,客户端和服务器都应保持系统时间同步。仅改变时区不能修复实际时钟偏差。VMess 时间要求
此外,ping 测试的是 ICMP:ping 不通并不足以证明 TCP 服务无法访问;测试 TCP 端口也需要确认该端口确实有服务监听。

十三、部署完成后的核对

  •  域名已接入 Cloudflare,实际连接域名的记录开启橙云。
  •  Cloudflare 边缘证书已生效,WebSocket 已开启。
  •  Nginx 源站证书覆盖连接域名,回源使用 Full (strict)。
  •  Cloudflare 能访问 VPS 的 TCP 443。
  •  v2**y 监听 127.0.0.1:10000,公网无需开放 10000。
  •  客户端使用 ws + tls,Host、SNI 和地址正确。
  •  客户端、Nginx、v2**y 的路径均为 /bridge
  •  UUID 一致,AlterID 为 0,客户端加密方式为 auto。
  •  HTTPS、WebSocket 和完整戴丽访问均已分别验证。
  •  若启用 TUN,已单独验证 DNS 与路由。
本次排障最有用的方法是按层检查:先确认 DNS,再检查 HTTPS 和 WebSocket,最后验证 VMess 认证与出站。这样可以避免把本机 DNS 异常当作服务端故障,也能快速发现客户端参数与服务端不一致的问题。
楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:postmaster#idceve.com(#替换成@)

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部