很多人遇到 Notion 打不开、网页端频繁 403 的时候,第一反应都是“Notion 抽风了”或者“我是不是要把整台 VPS 的默认路由都切到 WARP”。
所以这篇文章不只讲“机器上已经有 WARP 时怎么复用”,而是把整个思路拆成三段:
- 先检查你的 VPS 上有没有现成的 WARP 出口
- 如果没有,就按最小方案先搭一个本地 WARP 代理出口
- 如果已经有,就不要重装,直接复用并接进 3x-ui
这套方法不只适用于 Notion。凡是某个网站在你本地代理开启时总是 403、验证码异常、或者访问行为很怪,都可以按这个思路来拆。
先说结论:不要一上来就改全局路由
这篇文章推荐的目标状态非常简单:
- VPS 上准备一个可验证的 WARP 出口
- 这个出口以本地 SOCKS5 代理的形式暴露出来,例如 127.0.0.1:40000
- 3x-ui / Xray 只把 Notion 相关域名分流到这条出口
- 其他流量保持原来的出站策略不动
这样做的好处是:
- 改动面小,不容易把原有环境搞乱
- 排障更容易,因为出口是可单独验证的
- 以后遇到别的网站有同类问题,也能复用同一套思路
换句话说,这篇文章真正想解决的,不是“怎么让整台机器都走 WARP”,而是“怎么给有问题的那部分流量,精确地安排一个更稳定的出口”。
第一步:先检查机器上有没有现成的 WARP 出口
不要先入为主地假设机器上没有 WARP,也不要默认它已经是全局模式。先查现状:
command -v warp-cli wgcf wireproxy warp-go
systemctl list-units --type=service --all | grep -Ei 'warp|wgcf|wireguard|wireproxy|x-ui|xray'
ss -lntup | grep -Ei '40000|warp|wireguard|wireproxy'
ip route
你要关注的不是“有没有安装某个名字的程序”,而是下面这几个事实:
- 机器上有没有和 WARP / WireGuard / wireproxy 相关的服务
- 有没有一个本地监听的代理端口,例如 127.0.0.1:40000
- 当前默认路由是不是仍然走原来的网卡,而不是已经被 WARP 接管
如果你已经看到了类似下面的状态:
- 有 wireproxy.service
- 有本地 SOCKS5 端口
- 默认路由还是原来的 eth0
那往往说明这台机器已经有一个可复用的 WARP 本地出口,只是还没被你的 3x-ui 规则正确利用起来。
接下来不要猜,直接验证:
curl --socks5-hostname 127.0.0.1:40000 <https://www.cloudflare.com/cdn-cgi/trace>
curl -I --socks5-hostname 127.0.0.1:40000 <https://www.notion.com/login>
判断方式也很直接:
- 如果 trace 里出现 warp=on 或 warp=plus,说明这条代理确实走到了 WARP
- 如果 www.notion.com/login 返回 307、302 或 200,说明 Notion 通过这条出口本身是能访问的
只要这一步成立,后面的任务就不再是“怎么装 WARP”,而是“怎么把 Notion 流量送过去”。
第二步:如果没有 WARP,就先搭一个最小可用的 WARP 出口
如果上一步查下来,机器上根本没有现成 WARP,最适合这类场景的做法并不是直接把整机默认路由切进 WARP,而是按“WireGuard 配置 + 本地 SOCKS5 代理”的方式,先搭一个可验证、可复用、可独立接入 3x-ui 的本地出口。
我更推荐的组合是:
这样做的好处是:
- 不需要先把整台机器接管成全局代理
- 你可以先把 WARP 当成一个“出口组件”看待
- 后续接 3x-ui 时会非常顺手
目标状态是什么
你真正想搭出来的,不是一个“全局都走 WARP 的 VPS”,而是下面这个最小目标:
- 有一个 WARP 对应的 WireGuard 配置文件,例如 /etc/wireguard/warp.conf
- 有一个 wireproxy 配置文件,例如 /etc/wireguard/proxy.conf
- wireproxy 对外只监听本地回环地址,例如 127.0.0.1:40000
1. 先生成 WARP 的 WireGuard 配置
wgcf 的核心用途很直接:注册账号,然后生成 WireGuard profile。
wgcf register
wgcf generate
执行后通常会得到两个关键文件:
- wgcf-account.toml
- wgcf-profile.conf
如果你有自己的 Warp+ 订阅,也可以在生成前绑定 license key:
wgcf update --license-key "YOUR_LICENSE_KEY"
wgcf generate
接着,把生成出来的 profile 放到你准备长期使用的位置,例如:
mkdir -p /etc/wireguard
mv wgcf-profile.conf /etc/wireguard/warp.conf
2. 用 wireproxy 暴露本地 SOCKS5 端口
wireproxy 支持直接引用现成的 WireGuard 配置。最小化思路其实很简单:让它读取刚才生成的 warp.conf,然后开一个只监听本地的 SOCKS5 端口。
一个足够小的 proxy.conf 可以是:
WGConfig = /etc/wireguard/warp.conf
[Socks5]
BindAddress = 127.0.0.1:40000
这里最重要的不是端口号本身,而是两点:
- 用 WGConfig 直接复用 WireGuard 配置
- BindAddress 只绑定在 127.0.0.1,不要直接暴露到公网
3. 先测通,再考虑做成服务
在把它正式接入 3x-ui 之前,建议先单独验证 wireproxy 配置本身有没有问题:
wireproxy -n -c /etc/wireguard/proxy.conf
wireproxy -c /etc/wireguard/proxy.conf
如果你希望它长期驻留,再把它做成 systemd 服务即可。核心原则只有一个:服务启动时加载的应该是你刚才那份 proxy.conf。
4. 用 curl 做单点验证
确认 wireproxy 已经监听本地端口后,再做验证:
curl --socks5-hostname 127.0.0.1:40000 <https://www.cloudflare.com/cdn-cgi/trace>
curl -I --socks5-hostname 127.0.0.1:40000 <https://www.notion.com/login>
只要 warp=on 且 Notion 登录页返回正常状态码,这条出口就已经能用了。到这一步,你才有资格把它接进 3x-ui。
第三步:如果已经有 WARP,不要重装,直接复用
这一步反而是很多人最容易做错的地方。
不少机器其实早就已经有一个可用的 WARP 出口了,只是当时为了别的网站配的,比如 Netflix、OpenAI、Google Play 之类。结果一看到 Notion 出问题,就条件反射地又装一遍 WARP,最后把路由、服务和出站搞得越来越乱。
更稳的做法应该是:先验证已有 WARP 是否可用,如果可用,就直接复用。
常用检查命令可以是:
systemctl status wireproxy --no-pager
systemctl cat wireproxy
journalctl -u wireproxy -n 100 --no-pager
sed -n '1,200p' /etc/wireguard/proxy.conf
你要确认的核心点是:
- 当前服务到底加载的是哪份配置文件
- 这份配置里监听的是不是本地 SOCKS5 端口
- 这条本地代理出口能不能单独访问 Notion
如果答案都是肯定的,那么就不需要再做“安装 WARP”这件事了。你真正要做的,只是让 3x-ui 的某条出站规则去复用它。
这也是我原始实录里的关键结论:问题不在 WARP 不存在,而在于 Notion 流量之前没有被明确送进那条已经存在、而且已经可用的 WARP 出口。
第四步:把 Notion 接进 3x-ui,而不是让整台机器都改路线
不管你是“刚搭了一个新的本地 WARP 出口”,还是“发现机器上早就有一个可复用的 WARP 出口”,最终接进 3x-ui 的思路其实都一样:
- 准备一个走本地 SOCKS5 的出站
- 让 Notion 相关域名命中这条出站
- 保存配置并重启 Xray
如果你已经有一条现成出站,例如:
- protocol: socks
- address: 127.0.0.1
- port: 40000
那它本质上就已经是一个可复用的 WARP 出站了。你甚至不一定要新建 warp-notion,完全可以在现有规则里扩容使用。
Notion 常见需要分流的域名
notion.com
notion.site
notion.so
api.notion.com
img.notionusercontent.com
notionusercontent.com
secure.notion-static.com
audioprocessor.www.notion.so
在 3x-ui 里,通常对应的操作就是:
- 打开 Xray 设置
- 进入 路由规则
- 找到要走 WARP 的那条规则
- 把上面这些域名补进去
- 点击 保存
- 点击 重新启动 Xray
如果这台机器只有你自己用,直接把 Notion 域名并进已有的 WARP 规则里,通常已经够用。
如果你想把统计、用途、隔离做得更清楚,也可以额外拆一条单独的 warp-notion 出站和路由规则。两种做法都对,区别只在于维护偏好,不在于能不能解决问题。
第五步:怎么确认它真的生效了
这一步不要只靠“感觉好像能打开了”,最好做三层验证。
1. 客户端直接验证
保持你平时正常使用的代理状态,例如 V2rayN + TUN 不关闭,直接访问:
如果这时候 Notion 已经能稳定打开,说明方向基本是对的。
2. 看目标出站流量有没有上涨
如果 3x-ui 面板能看到流量统计,那就很容易验证:
- 记住目标 WARP 出站当前流量
- 连续访问几次 Notion
- 刷新面板
- 看这条出站的流量有没有增长
如果 Notion 正常访问,同时这条出站流量也在涨,就说明流量确实走到了你预期的出口。
3. 做一次 A/B 对照
如果你还想更确认,可以临时把 Notion 域名从那条规则里删掉,再测试一次;如果问题重新出现,再把域名加回去。
这种“删规则 -> 复现问题 -> 加回规则 -> 问题消失”的对照,通常比单看日志更有说服力。
这篇文章真正想传达的通用方法
把整篇文章压缩成一句话,其实就是:
先确认有没有现成 WARP;没有就先搭一个最小的本地 WARP SOCKS5 出口;有了之后,不改全局路由,只把有问题的网站精确分流过去。
这套方法比“重装一遍环境”更稳,也比“把整台机器都切进 WARP”更容易维护。
对 Notion 来说,它解决的是 403 和不稳定访问;对别的网站来说,它解决的是同一类问题:某个站点不喜欢你现在的出口,但你并不想为了它把整个网络策略全部重写。