无尘阁日记

无尘阁日记

Mac M1 上 v2rayN 提示“中国大陆证书问题访问不了”:一次真实排障复盘
2026-05-30

一、问题背景

在 Mac M1 / Apple Silicon 设备上安装 v2rayN 后,用户反馈访问部分网站失败,v2rayN 提示类似:

中国大陆有证书问题,访问不了。

很多人第一反应会认为是“证书坏了”“系统证书不对”“网站证书异常”。但从实际排查过程看,这类问题不一定真是证书问题。

这次案例的真实原因是:

v2rayN 主程序启动了
xray / sing-box 核心也启动了
但 macOS 系统代理没有启用
而且实际代理端口不是默认的 10809 / 10808
同时 DNS 解析也存在异常

所以最终表现出来像是 TLS / SSL / 证书问题,但底层真正的问题是:

系统流量没有进入 v2rayN 代理,而是在直连;直连时 DNS 又解析异常,导致 TLS 握手超时。


二、先看现象:为什么看起来像“证书问题”?

执行检测脚本时,直连访问 https://www.google.com 出现了:

SSL connection timeout
curl: (28) SSL connection timeout

这句话非常关键。

它不是:

SSL certificate problem
certificate verify failed
unable to get local issuer certificate

如果是上面这类报错,才更像是系统证书链、根证书、目标证书或者中间人证书问题。

但本次是:

SSL connection timeout

这说明连接已经到了 TLS 握手阶段,但握手一直没有完成,最后超时。

通俗说就是:

不是证书校验失败,而是连到一个不正常的目标之后,TLS 握手卡住了。


三、第一处异常:DNS 解析不正常

检测结果里,www.google.com 被解析成了:

157.240.7.20

这个结果明显不正常。

157.240.x.x 更像 Meta / Facebook 相关 IP 段,不应该是 Google 常规解析结果。

同时 curl 里还出现了:

IPv6: 2001::1
IPv4: 157.240.7.20

这说明当前网络环境下 DNS 解析有较大概率存在以下情况之一:

1. DNS 污染
2. 路由器 / 热点 DNS 异常
3. 上游 DNS 不可靠
4. 网络链路对特定域名做了错误解析

DNS 解析错了之后,浏览器或者 curl 就会连到错误的 IP。连到错误 IP 后,TLS 握手自然容易失败、卡住、超时。

所以这里的第一条判断是:

直连链路不可靠,DNS 已经异常。


四、第二处异常:v2rayN 默认代理端口没有监听

检测脚本默认测试了两个常见端口:

HTTP 代理端口:10809
SOCKS5 代理端口:10808

但是检测结果显示:

127.0.0.1:10809 没有监听
127.0.0.1:10808 没有监听

随后通过 curl 测试代理访问:

curl -Iv -x http://127.0.0.1:10809 https://www.google.com

返回:

Connection refused
Failed to connect to 127.0.0.1 port 10809

再测 SOCKS5:

curl -Iv --socks5-hostname 127.0.0.1:10808 https://www.google.com

同样返回:

Connection refused
Failed to connect to 127.0.0.1 port 10808

Connection refused 的含义非常直接:

这个端口上没有程序在接收连接。

也就是说,不是节点不通,也不是远端服务器拒绝,而是本机 127.0.0.1:10809 / 127.0.0.1:10808 这两个代理端口根本没开。


五、第三处异常:v2rayN 核心其实启动了,但监听的是另一个端口

继续检查进程:

ps aux | grep -Ei "v2ray|v2rayn|xray|sing-box|mihomo|clash" | grep -v grep

可以看到:

v2rayN 主程序已启动
sing-box 已启动
xray 已启动

这说明 v2rayN 不是完全没运行。

再看监听端口:

lsof -nP -iTCP -sTCP:LISTEN | grep -Ei "108|789|2017|2080|9090|v2ray|xray|sing|clash|mihomo"

发现实际监听的是:

xray TCP 127.0.0.1:59022 (LISTEN)

这一步直接把问题定位清楚了:

你以为代理端口是 10809 / 10808
但真实监听端口是 59022

所以之前拿 10809 / 10808 测代理,当然会失败。


六、第四处异常:macOS 系统代理没有启用

继续检查 macOS 系统代理:

networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
networksetup -getsocksfirewallproxy Wi-Fi

结果显示:

Enabled: No
Server: 127.0.0.1
Port: 15236

Enabled: No
Server: 127.0.0.1
Port: 15236

Enabled: No
Server: 127.0.0.1
Port: 15235

这里有两个关键信息。

第一,Enabled: No

系统代理没有启用

第二,系统记录的旧端口是:

15235 / 15236

但实际 xray 监听的是:

59022

这说明系统代理配置和 v2rayN 当前实际监听端口完全错位。

最终状态就是:

v2rayN 核心在跑
但 macOS 系统流量没有走它
浏览器 / curl / 系统请求仍然在直连
直连 DNS 又异常
于是表现为 SSL / TLS / 证书类错误

一句话概括:

代理核心在旁边跑着,但系统流量没有进代理通道。


七、正确排查命令清单

1. 查看 v2rayN / xray / sing-box 是否运行

ps aux | grep -Ei "v2ray|v2rayn|xray|sing-box|mihomo|clash" | grep -v grep

如果没有任何输出,说明 v2rayN 或核心没起来。

如果能看到:

v2rayN
xray
sing-box

说明主程序和核心至少已经启动。


2. 查看本机实际监听端口

lsof -nP -iTCP -sTCP:LISTEN | grep -Ei "108|789|2017|2080|9090|v2ray|xray|sing|clash|mihomo"

重点看类似:

127.0.0.1:59022 (LISTEN)

这个端口才是当前真实代理端口。

不要死盯 10809 / 10808,因为 v2rayN 可能会动态生成或使用其他端口。


3. 测试这个端口是 HTTP 代理还是 SOCKS5 代理

假设实际监听端口是 59022,先测 HTTP:

curl -Iv -x http://127.0.0.1:59022 --connect-timeout 10 --max-time 20 https://www.google.com -o /dev/null

再测 SOCKS5:

curl -Iv --socks5-hostname 127.0.0.1:59022 --connect-timeout 10 --max-time 20 https://www.google.com -o /dev/null

判断规则:

HTTP 那条成功:59022 是 HTTP 代理端口
SOCKS5 那条成功:59022 是 SOCKS5 代理端口
两条都失败:核心配置、节点、端口类型或入站配置可能有问题

4. 查看 macOS 系统代理状态

networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
networksetup -getsocksfirewallproxy Wi-Fi

如果你不是用 Wi-Fi,可以先查看网络服务名称:

networksetup -listallnetworkservices

常见结果:

USB 10/100/1000 LAN
Wi-Fi
iPhone USB
Thunderbolt Bridge

如果当前网络是 Wi-Fi,就继续用 Wi-Fi


八、修复方法一:在 v2rayN 里开启系统代理

最推荐先用图形界面操作。

打开 v2rayN,找到类似选项:

设置系统代理
自动配置系统代理
开启系统代理
Set system proxy
System Proxy

开启后,再执行:

networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
networksetup -getsocksfirewallproxy Wi-Fi

看到:

Enabled: Yes

才说明系统代理真的打开了。

如果仍然是:

Enabled: No

那说明 v2rayN 没有成功写入 macOS 系统代理配置。


九、修复方法二:手动设置 macOS 系统代理

如果确认 59022 是 SOCKS5 代理端口,可以执行:

sudo networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 59022
sudo networksetup -setsocksfirewallproxystate Wi-Fi on

验证:

networksetup -getsocksfirewallproxy Wi-Fi

正常应该显示:

Enabled: Yes
Server: 127.0.0.1
Port: 59022

如果确认 59022 是 HTTP 代理端口,可以执行:

sudo networksetup -setwebproxy Wi-Fi 127.0.0.1 59022
sudo networksetup -setsecurewebproxy Wi-Fi 127.0.0.1 59022

sudo networksetup -setwebproxystate Wi-Fi on
sudo networksetup -setsecurewebproxystate Wi-Fi on

验证:

networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi

正常应该显示:

Enabled: Yes
Server: 127.0.0.1
Port: 59022

十、修复方法三:处理 DNS 异常

本次日志里 DNS 也明显不正常,所以建议把 DNS 改成更稳定的公共 DNS。

执行:

sudo networksetup -setdnsservers Wi-Fi 1.1.1.1 8.8.8.8

然后清理 DNS 缓存:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

重新测试:

dig www.google.com

如果 DNS 结果仍然异常,说明当前网络链路本身可能存在 DNS 污染或拦截。这时候更要先保证系统代理真正生效。


十一、如何判断已经修好?

1. 系统代理启用

networksetup -getwebproxy Wi-Fi
networksetup -getsecurewebproxy Wi-Fi
networksetup -getsocksfirewallproxy Wi-Fi

至少对应协议要看到:

Enabled: Yes
Server: 127.0.0.1
Port: 正确端口

2. 代理端口有监听

lsof -nP -iTCP -sTCP:LISTEN | grep -Ei "v2ray|xray|sing|59022|108|789"

要看到类似:

127.0.0.1:59022 (LISTEN)

3. 通过代理访问成功

HTTP 代理测试:

curl -Iv -x http://127.0.0.1:59022 https://www.google.com -o /dev/null

或者 SOCKS5 测试:

curl -Iv --socks5-hostname 127.0.0.1:59022 https://www.google.com -o /dev/null

如果看到:

HTTP/2 200
HTTP/1.1 200

或者没有 TLS 超时报错,说明代理链路基本正常。


十二、这类问题的排查模型

以后遇到 v2rayN、Clash、sing-box、xray 类似问题,不要一上来就重装。

按这个顺序排:

第一步:程序是否启动
第二步:核心是否启动
第三步:本地端口是否监听
第四步:系统代理是否开启
第五步:系统代理端口是否和实际监听端口一致
第六步:DNS 是否异常
第七步:通过代理 curl 是否成功
第八步:再考虑证书问题

很多所谓“证书问题”,本质并不是证书坏了,而是:

DNS 解析错了
系统代理没开
端口配错了
代理核心没监听
系统流量没走代理

十三、本次案例最终结论

本次问题不是典型证书问题。

真实原因是:

1. v2rayN 主程序已启动;
2. xray / sing-box 核心也已启动;
3. 但默认检测端口 10809 / 10808 没有监听;
4. 实际监听端口是 127.0.0.1:59022;
5. macOS 系统代理处于 Disabled;
6. 系统代理记录的端口还是旧的 15235 / 15236;
7. 当前 DNS 解析也异常;
8. 所以浏览器和 curl 仍然直连,导致 TLS 握手超时;
9. 最终表现成类似“证书问题”。

一句话总结:

v2rayN 不是没运行,而是系统流量没有接入它;修复重点不是重装证书,而是确认本地监听端口、开启系统代理,并修正 DNS。