给 VPS 换一个美国家庭 IP:Xray + VLESS + REALITY + Webshare 静态住宅 IP 教程

大家好!

我折腾链式代理和美国静态住宅 IP,起因是用 Claude。

我现在写代码基本离不开 Claude 和 Claude Code。一开始用的就是自己的独立 VPS,IP 固定,也只有我一个人用,本以为这样就够了。

问题出在 VPS 的 IP 是机房 IP,纯净度不够。一查就知道属于某家云服务商,同一段 IP 里不知道还有多少人在用,IP 风控值也偏高。Claude 对登录环境比较敏感,用这样的 IP 总是提心吊胆。

所以我想给自己弄一个固定的、美国家庭宽带的 IP。最后的方案是:

VPS 上跑 Xray,用 VLESS + REALITY 连接,出站再套一层 Webshare 的美国静态住宅 IP。

跑通以后,访问网站时对方看到的是一个美国本地运营商的家庭 IP,而且每天都是同一个。同样的思路,也适合登录 Google Ads、Stripe 这类对 IP 比较敏感的海外后台。

这篇把完整过程记录下来,顺便把我踩过的坑也写上。

机房 IP 和住宅 IP 有什么区别

简单说:

  • 机房 IP:来自数据中心,VPS、云服务器用的都是这种。网站很容易查到这个 IP 属于某家云服务商,同一个 IP 段里有很多人在用
  • 住宅 IP:来自 AT&T、Comcast 这类运营商,原本是分配给普通家庭宽带用的。在网站看来,就是一个普通人在家上网

住宅 IP 又分两种:

  • 动态住宅:每次请求或者每隔一段时间换一个 IP,适合爬虫,不适合登录账号
  • 静态住宅:IP 固定不变,适合长期登录同一批账号

我要的是“每天都是同一个美国家庭 IP”,所以选的是静态住宅。

整体思路

流量是这么走的:

我的电脑 -> VPS(Xray)-> 美国住宅 IP -> 目标网站

  • 我的电脑到 VPS:用 VLESS + REALITY,加密并且伪装成正常访问某个大网站的 TLS 流量
  • VPS 到住宅 IP:Xray 的出站用 SOCKS5 连到 Webshare
  • 住宅 IP 到网站:网站最终看到的是 Webshare 分配给我的美国住宅 IP

可能有人会问:为什么不在电脑上直接连 Webshare 的 SOCKS5?

因为 SOCKS5 本身不加密,从国内直连海外的 SOCKS5,基本连不稳。中间加一台 VPS 用 REALITY 中转,前半段稳定,最后一跳才走住宅 IP,两边的优点都用上了。

准备工作

  1. 一台 VPS:我用的是 Ubuntu 22,需要 root 权限,443 端口没有被其他服务占用。机房在美国西海岸或者日本都可以,链路越短越好
  2. 一个 Webshare 账号:用来买美国静态住宅 IP
  3. 客户端:Windows 用 v2rayN,安卓用 v2rayNG,苹果用 Shadowrocket

Xray: https://github.com/XTLS/Xray-core

Webshare: https://www.webshare.io

购买 Webshare 静态住宅 IP

购买时选 Static Residential(静态住宅),国家选美国。静态住宅 IP 是订阅制,按月付费。

这里有个选择:

  • Private:IP 可能和少数其他用户共享,更便宜
  • Dedicated:IP 只给你一个人用,3.5 美元起,具体以官网为准

我自己主要是用 Claude 和日常浏览,买的是 Dedicated。如果套餐里有多个 IP,可以挑一个质量最好的固定使用,剩下的当备用。

买完之后,在后台的 Proxy List 里能看到每个 IP 的:

  • 代理地址(IP)
  • 端口
  • 用户名
  • 密码

认证方式默认是用户名和密码。也可以改成 IP 授权,把 VPS 的 IP 加进白名单,这样就不用填用户名密码了。

先在 VPS 上测一下这个 IP

先别急着装 Xray,在 VPS 上用 curl 测一下 Webshare 的 IP 能不能用:

1
curl -x socks5h://用户名:密码@代理地址:端口 https://ipinfo.io/json

注意是 socks5h,多了一个 h,意思是域名也交给代理去解析,这样 DNS 请求也会从美国出去。

正常的话会返回一段 JSON,重点看这几个字段:

  • ip:应该是 Webshare 的 IP,而不是 VPS 的 IP
  • country:US
  • org:一般是 AT&T、Comcast、Cox 这类美国运营商,而不是某某云

如果这一步就不通,后面配置再多也没用,先回 Webshare 后台检查用户名、密码和认证方式。

安装 Xray

使用官方脚本安装:

1
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

装完以后:

  • 配置文件在 /usr/local/etc/xray/config.json
  • 服务名是 xray,用 systemd 管理

看一下版本,确认装好了:

1
xray version

生成配置需要的参数

一共需要 4 个东西,先生成好,记在本子上:

1. UUID,相当于用户的密码:

1
xray uuid

2. REALITY 密钥对:

1
xray x25519

这里要注意,新旧版本输出的字段名不一样:

  • 新版本输出 PrivateKey 和 Password,Password 就是公钥
  • 旧版本输出 Private key 和 Public key

私钥填在服务端,公钥填在客户端,千万别搞反。

3. shortId,一串 16 进制字符串:

1
openssl rand -hex 8

4. 伪装网站(target)

REALITY 会把自己伪装成在访问一个真实的网站。选这个网站有几个要求:

  • 国外的网站,支持 TLS 1.3 和 HTTP/2
  • 访问时不会跳转到别的域名
  • 最好和 VPS 在同一个地区,延迟低

本文用 www.microsoft.com 举例,你也可以换成别的。可以用 Xray 自带的命令测一下:

1
xray tls ping www.microsoft.com

编写服务端配置

编辑 /usr/local/etc/xray/config.json,把 {} 里的内容换成你自己的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "{UUID}",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"target": "www.microsoft.com:443",
"serverNames": [
"www.microsoft.com"
],
"privateKey": "{私钥}",
"shortIds": [
"{shortId}"
]
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
],
"routeOnly": true
}
}
],
"outbounds": [
{
"tag": "webshare",
"protocol": "socks",
"settings": {
"address": "{Webshare 代理地址}",
"port": {Webshare 端口},
"user": "{Webshare 用户名}",
"pass": "{Webshare 密码}"
}
},
{
"tag": "block",
"protocol": "blackhole"
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"network": "udp",
"outboundTag": "block"
},
{
"type": "field",
"ip": [
"geoip:private"
],
"outboundTag": "block"
},
{
"type": "field",
"network": "tcp",
"outboundTag": "webshare"
}
]
}
}

配置看着长,其实就是三块:入站、路由、出站。

几个地方解释一下:

  1. inbounds:VLESS + REALITY 入站,flow 用 xtls-rprx-vision,客户端也要填一样的
  2. target:伪装网站,旧版本的 Xray 里这个字段叫 dest,如果启动报错可以改成 dest 试试,或者直接升级 Xray
  3. outbounds 的 socks:这就是出站到 Webshare 的配置。如果 Webshare 用的是 IP 授权,user 和 pass 可以删掉
  4. 路由规则,从上往下匹配:
    • 第一条:屏蔽 UDP 443,也就是 QUIC。Webshare 的 SOCKS5 不支持 UDP,不屏蔽的话,浏览器会先尝试 QUIC,失败了才退回 TCP,表现就是有些网站第一次打开特别慢
    • 第二条:屏蔽访问内网地址,防止别人通过你的节点访问 VPS 所在的内网
    • 第三条:其他所有流量都走 Webshare

保存之后,先检查一下配置有没有写错:

1
xray run -test -config /usr/local/etc/xray/config.json

没问题就启动,并设置开机自启:

1
2
systemctl restart xray
systemctl enable xray

最后记得放行 443 端口。如果用的是 ufw:

1
ufw allow 443/tcp

有些云服务商还有一层“安全组”,要去网页后台也放行一下。

配置客户端

客户端需要填的字段,和服务端是一一对应的,其中最容易出错的是密钥:

客户端字段 填什么
地址 VPS 的 IP
端口 443
UUID 第一步生成的 UUID
流控(flow) xtls-rprx-vision
传输协议 tcp
传输层安全 reality
SNI www.microsoft.com
Fingerprint chrome
PublicKey xray x25519 生成的公钥(新版本的 Password)
ShortId 生成的 shortId

懒得一个个填的话,可以拼一个分享链接,直接导入客户端:

1
vless://{UUID}@{VPS IP}:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.microsoft.com&fp=chrome&pbk={公钥}&sid={shortId}&type=tcp#US-Home

# 后面是节点名称,随便起。

检查一下是不是真的“住在美国”

连上节点以后,打开这几个网站看一下:

  1. ipinfo.io:IP 是不是 Webshare 的,org 是不是美国运营商
  2. ping0.cc:中文网站,能看到 IP 类型是“家庭宽带”还是“IDC 机房”,还有风控值
  3. browserleaks.com/webrtc:检查 WebRTC 有没有暴露真实 IP
  4. ipleak.net:检查 DNS 是不是也从美国出去

前两个没问题,说明链路通了。但是想让自己看起来更像一个“在美国的普通用户”,还有几个细节:

  • WebRTC 泄露:浏览器的 WebRTC 走的是 UDP,会绕过系统代理暴露你的真实 IP。可以装个禁用 WebRTC 的插件,或者在客户端开启 TUN 模式(虚拟网卡)。注意客户端的“全局模式”一般只是设置了系统代理,防不住 WebRTC
  • 时区和语言:IP 在美国,浏览器时区却是北京时间、语言是中文,网站也能看出来。如果是专门用来登录海外账号的浏览器,可以单独建一个浏览器配置,时区和语言都改成美国的
  • IP 质量不满意:不同 IP 的质量差别很大,如果查出来是机房 IP 或者风控值很高,可以换另一个,Webshare 后台也有替换 IP 的功能

我踩过的坑

遇到问题先按这张图排查一遍,大部分问题都在这几个地方:

客户端连不上

按这个顺序检查:

  1. VPS 的 443 端口放行了没有,安全组也要看
  2. 客户端和服务端的 UUID、flow、SNI 是否一致
  3. 公钥和私钥有没有填反,客户端填的必须是公钥
  4. shortId 有没有填错

看服务端日志能快速定位问题:

1
journalctl -u xray -f

能连上,但网页打不开

大概率是 Webshare 那一跳出了问题。回到 VPS 上,用前面的 curl 命令再测一次。常见原因是用户名密码填错了,或者用的是 IP 授权但忘了把 VPS 的 IP 加进白名单。

浏览器能用,终端里的 Claude Code 却没走代理

客户端开的系统代理,只对浏览器这类遵守系统代理设置的程序生效,终端里的命令行工具默认是不走的。浏览器里 Claude 正常,不代表终端里的 Claude Code 也走了住宅 IP。

Claude Code 支持 HTTPS_PROXY 环境变量,在终端里设置一下,端口在客户端的设置里能看到:

1
export HTTPS_PROXY=http://127.0.0.1:{客户端的本地 HTTP 端口}

设置完在同一个终端里测一下,返回的应该是 Webshare 的 IP:

1
curl https://ipinfo.io/json

想一劳永逸的话,也可以直接在客户端开启 TUN 模式,所有程序的流量都会走代理。

有些网站打开比较慢

我现在是所有流量都走链式代理 + 住宅 IP,日常写代码、用 Claude、浏览网页都够用。

但要有心理预期:流量要先到 VPS,再到住宅 IP,延迟会比直连 VPS 多一段。如果某些网站第一次打开特别慢,先确认路由规则里屏蔽 QUIC 的那一条有没有生效。

游戏、语音通话用不了

还是因为 Webshare 不支持 UDP。如果确实需要,可以在路由规则里加一条,让 UDP 走 direct,放在“屏蔽内网地址”和“其他流量走 Webshare”这两条之间:

1
2
3
4
5
{
"type": "field",
"network": "udp",
"outboundTag": "direct"
}

第一条屏蔽 UDP 443 的规则要保留,不然 QUIC 又会绕过住宅 IP。另外要注意,走 direct 的这部分 UDP 流量,用的就是 VPS 自己的机房 IP 了。

成本

  • VPS:几美元一个月,看你选的服务商
  • Webshare 静态住宅(Dedicated):订阅制,3.5 美元一个月起

对我来说,每个月多花几美元,换来的是用 Claude 时不用再提心吊胆,还是挺值的。

总结

最后放一张全文的思维导图,方便收藏:

整个方案其实就三层:REALITY 负责把流量安全地送到 VPS,Xray 负责转发,Webshare 负责提供一个固定的美国家庭 IP。

配置不复杂,最容易出错的是密钥填反、端口没放行和 UDP 这三个地方,照着上面的步骤检查基本都能解决。

本文仅用于技术学习和交流,请遵守当地法律法规和各网站的服务条款。如果你有更好的住宅 IP 服务商或者配置方案,欢迎留言一起交流。