Fuck the GFW in 2023
Contents
目标
经过多年的发展和迭代,v2ray或者xray已经成为了fuck-the-gfw领域的事实标准。 目前xray的vless + reality + vision协议的方案稳定性和速度都非常令人满意,只要机房节点合适,体验非常舒适。
但是经过代理访问网络服务时,有时候会给我们带来额外的困扰,例如Netflix以及ChatGPT都会检查访问者的IP属性,如果是来自于机房数据中心,可能会直接拒绝服务。
因此2023年的fuck-the-gfw方案,需要达成以下目标:
- 可以访问自由的互联网世界
- 避免因为机房IP属性而导致的拒绝服务
- 环境配置和管理简单,容易维护和更新
方案选型
先决条件
使用国外的服务,一般都要求通过外币信用卡付款(Visa或者Mastercard支付),有些可以通过PayPal直接绑定境内的人民币银行卡支付,但是PayPal的普及率并不很高。请先准备好一张Visa或者Mastercard的外币信用卡或者外币借记卡。
域名注册
有一个域名可以让我们更便利地访问VPS上部署的服务,而不必记住IP地址来访问。 在namecheap每年花10美元左右即可得到一个个性域名。
VPS
代理协议实际上对使用体验的影响并不会特别大,毕竟这些代理协议发展了这么多年,能优化的方面都已经优化的差不多了,差距都是理论极限层面的,对于日常使用并不关键。实际上VPS的位置和网络线路的质量才是关键。
好的VPS需要满足以下标准:
- 直连线路,延迟低,丢包率低。有的VPS虽然地理位置近,但是延迟可能很高,因为绕路了,需要注意测试VPS的ping值和丢包率。
- 机房不会有大量机器全部用于代理服务,大批量的流量很容易引起GFW的AOE伤害,直接把整个网段拉黑,导致VPS失联。
- 服务稳定可靠,服务商不会跑路。当VPS被封禁后,可以重新申请IP或者申请新的VPS。基于这种思路,按时间付费而不是包月包年的服务商最优。
基于以上考虑,推荐以下2家服务商:
- AWS ec2: 最老牌的顶尖云服务商,其稳定性和可靠性是毋庸置疑的,所提供的功能也是十分丰富和强大。唯一的缺点就是贵。
- DigitalOcean: 操作界面简洁,价格十分便宜。 除此之外,Vultr也是很不错的VPS服务商,价格和DigitalOcean差不多,但是机房区域更多,在东京也有机房(DigitalOcean没有东京的机房)。另外DigitalOcean由于前些年有大量中国用户薅github学生优惠的羊毛,导致对中国用户的审核非常严格,现在使用中国信息和中国信用卡有可能无法顺利注册账户。而Vultr由于有东京机房而且价格便宜被广泛推广和使用,在高峰期时段有可能出现线路拥塞,在敏感时期有可能被针对。
而AWS由于使用门槛比较高,对小白用户不太友好,而且价格相对也比较高,使用它作为代理服务的用户数量很少。因此它的线路质量非常高,稳定性非常好,即使在敏感时期,基本也不会有什么问题。
服务商 | 线路质量 | 代理用户量 | 服务质量和计费友好 |
---|---|---|---|
AWS | 最高 | 最少 | 非常好 |
DigitalOcean | 比较高 | 比较少 | 非常好 |
Vultr | 比较低 | 多 | 非常好 |
代理服务部署
尽管现在很多代理服务都有人写了一键部署脚本,功能丰富,十分便利,但是使用成本仍然比较高,很多时候需要登录到VPS上命令来操作,甚至需要修改复杂的配置文件,成本很高。
因此我们优先考虑使用更加先进的docker来进行容器化部署,容器化部署不仅部署简单,不容易出错,而且很容易进行迁移和恢复。
我们使用如下服务:
- Nginx manager: 容器化版本的nginx,虽然无法支持nginx的所有功能,但是胜在图像化配置,操作简单,而且支持https证书自动申请和续期。
- x-ui: v2ray/xray的docker部署版本,加图形化管理面板。可以在网页上很轻松地完成代理服务的配置管理。请注意使用alpha-zh版本,这是最后一个活跃版本。
Ready to go
下面以AWS为例子,我们开始搭建属于我们自己的fuck-the-gfw服务。DigitalOcean之类的更加简单,在此不讨论了。
申请AWS账户
请注意申请AWS国际版的账户,而不是中国版,认准地址https://aws.amazon.com/
。绑定支持Visa或者Mastercard的外币信用卡或者借记卡。
创建vpc
如果我们希望ec2 instance中支持ipv6,那么需要创建启用了ipv6的vpc,然后将这个vpc绑定给ec2 instance.
选择Virtual private cloud -> Your VPCs
,点击右上角的Create VPC
。
然后在 VPC settings 中选择VPC and more
以及Amazon-provided ipv6 CIDR block
创建vpc的security groups
Network & Security -> Security Groups
,点击右上角的Create Security Group
在创建页面中,选择关联的VPC为前面创建的那个VPC,并且配置一个允许所有tcp, udp, icmp的ipv4和ipv6任意流量以及ssh的ipv4流量的入站规则,以及允许任意ipv4和ipv6流量的出站规则。Security group name
和Description
填写任意内容即可。
创建ec2 instance
注册完成后,进入AWS的console界面,切换到tokyo区域。
如下图所示,选择Instances -> Launch Instances
点击右上角的Launch Instances
.
按照如下内容对ec2 instance进行配置。
使用Ubuntu 22.04镜像
选择虚拟机配置和ssh key
这里选择的是1核心CPU, 1GB内存的t2.micro,可以根据需求情况酌情选择。
如果还没有ssh key,可以点击Create new key pair
创建。
配置网络
在Network settings
中,选择Edit
,然后修改相关配置。
- 选择vpc为刚刚创建的那个。
- 选择自动分配Publich IP(ipv4地址)
- 选择自动分配ipv6 IP。
- 选择已经存在的security groups,分别是这个vpc默认的
default
,以及我们刚刚创建的那个。
配置存储
选择默认的gp2
即可,一般情况下,10GB就足够了,也可以根据需求调整。
确认以上配置无误,点击launch instance
即可创建虚拟机。
配置公网ipv6
进入到这个ec2 instance的管理界面中,选择Actions -> Networking -> Manage IP address
在编辑页面中选中eth0
,勾选其中的Assign primary IPv6 IP
的Enable
。
如果你本地的网络支持ipv6,那么此时你就能ping通这个ipv6地址了。至此我们完成了VPS的创建和配置工作。
然后我们就可以使用ssh-key来登录VPS了,注意VPS的主机名是ubuntu,~/.ssh/config
中的配置类似如下:
如果你完成配置后,无法马上登录,提示验证错误,那么你可能需要refresh一下ssh-agent,在当前shell中执行指令ssh-agent -s
即可。
配置alerm
有时候e2 instance会出现异常,导致无法使用,此时只能reboot或者重建。一般情况下,这些问题都可能通过reboot解决。
在Status checks -> Actions -> Create status check alerm
中创建新的alerm
在配置中选择Alert action
为reboot,选择Type of data to sample
为Status check failed: either
。
当容器出现状态检查异常时,就会自动重启以恢复正常。
安装配置nginx manager
我们使用nginx manager来让虚拟机中的服务能够通过域名而不是IP地址提供服务。nginx manager使用docker compose来部署,因此我们需要先安装docker compose。
安装docker compose
|
|
|
|
|
|
最后执行hello-world即可
|
|
输出如下内容即表示docker compose安装正常
|
|
部署nginx manager
根据nginx manager doc,按照如下方式配置compose yaml:
|
|
docker-compose.yml
中的内容如下:
|
|
然后运行sudo docker compose up -d
即可启动nginx manager。
配置nginx manager
访问http://host_ip_address:80
,其中host_ip_address是你的VPS的ipv4地址,可以在aws ec2 instance界面看到。看到如下内容,那么nginx manager就在正常工作:
然后访问http://host_ip_address:81
即可登录nginx manager的管理界面。
第一次登录使用默认用户名密码,参考nginx manager doc。登录按照提示立即修改用户名密码。
配置letsencrypt
nginx manager使用letsencrypt自动获取并续期https证书,它需要使用域名注册商的API secret来认证域名所有权。
首先在namecheap中启用API访问,在namecheap的dashboard中选择Profile -> Tools -> Business & Dev Tools -> Namecheap API access
按照如下方式启用API access,并将VPS的ipv4地址填入到Whitelisted IPs
中:
在nginx manager中选择SSL Certificates -> Add SSL Certificate
域名中默认填写一级域名以及通配符的二级域名:
|
|
配置反向代理
首先在namecheap中添加一条指向VPS的ip地址的二级域名DNS记录.
直接指向ip地址的记录是A Record
类型。
然后在nginx manager中配置相关的反向代理记录:
选择Dashboard -> Proxy Hosts -> Add proxy host
注意这里的forward hostname写为docker地址172.17.0.1
,而无需填写VPS的实际IP地址。
需要注意SSL certificate选择为与该方向代理记录中域名一致的。
然后就可以通过https域名访问nginx manager了。
至此nginx manager的安装以及配置工作就完成了,我们可以把VPS中nginx manager的配置和数据文件(~/docker-deploy/nginx-manager
)保存到本地,如果旧的VPS删除,直接传送到新的VPS中启动运行即可。部署新的VPS后仅仅需要将DNS server(namecheap)中的相关联的DNS记录指向到新的VPS的地址即可。
x-ui安装
参考docker简介中的内容,按照如下方式安装:
|
|
docker-compose.yml
中写入以下内容:
|
|
x-ui
的network_mode
需要设置为host
。
|
|
启动后即可通过http://host_ip_address:54321
登录。初始用户名密码为admin:admin
。
进入到settings -> panel settings
,修改服务前缀为你想要的前缀:
在settings -> user config
中,即可修改登录账户名密码:
x-ui域名反向代理
不同于nginx-manager的配置,x-ui因为有prefix路径,需要配置Custom Locations
,location中填入刚刚在xui配置中缩写的路径前缀。
配置服务端
选择inbounds -> 添加入站
,添加代理服务
关键选型为:
protocol
: vlessflow
: xtls-rprx-visionnetwork
: tcpreality
: enable
目标网站随便选一个就行。
添加完成后,选择查看
即可看到配置链接或者二维码
到此为止,一个基础版的代理服务就配置完了,我们现在可以愉快地访问网络了。
代理客户端
v2ray/xray的比较好的客户端有如下选择:
- v2raya: 桌面客户端,支持docker安装。
- v2rayn: windows桌面客户端。
- v2rayng: 安卓客户端。
- nekoray:支持桌面端和安卓端。
- sing-box: 安卓和iOS移动端,轻量级,仍在快速迭代中,支持很多新协议和新特性,但是配置较为复杂。
除了sing-box以外的客户端,基本都支持直接通过链接或者二维码的方式导入配置,使用无需特别说明。
对于sing-box客户端,我们可以使用sing-box-subscribe一键将v2ray/xray的链接转化为sing-box的配置文件。
打开https://sing-box-subscribe.vercel.app/ ,填入我们的代理链接到tag1的URL LINK。
填入后点击save
,如果sing-box版本低于1.8.0那么选择2. config_template_groups_tun
,否则选择第1项。最后点击select and generate
,网页将会跳转到一个json页面,全部复制该文件的内容,然后传输到手机中。
在sing-box客户端中选择Profiles -> New Profile
,
Type
: LocalSource
: Import 然后点击Import File即可。
突破机房IP屏蔽
目前代理服务已经搭建完成,但是尚未解决机房IP可能被某些服务屏蔽的问题。事实上很多服务提供商是通过IP的性质来判定是否拒绝服务。IP地址大致可以分为:
- 普通机房IP
- 白名单IP
- 静态住宅IP
- 真住宅IP
其中静态住宅IP也是部署在机房的代理所提供的IP,但是这种机房往往是某些ISP服务商提供的,其被屏蔽的风险仅次于真住宅IP(个人用户被ISP服务商分配IP)。
ChatGPT以及Netflix一般只屏蔽普通机房IP,我们只需要把自己的IP性质变成白名单IP即可。常见的白名单IP有cloudflare warp以及Google One VPN。它们所提供的IP,在欺诈检查中会得到比较低的分数,会被认为是低风险的。cloudflare可以被免费使用,我们可以直接借用已有的一键安装脚本部署在VPS上。
参考warp.sh
|
|
现在warp在本地的4000端口启动了代理客户端,我们只需要让特定网站的流量经过warp这一层代理。因为额外增加了一层代理,会从产生额外开销,所以我们只希望特定的网络流量走warp。
在x-ui面板中选择settings -> xray settings
,输入以下内容:
|
|
以上配置中除了配置了openai
, netflix
等网站走warp代理,还配置了让byr.pt
强制走ipv6出口,因为这个网站只允许境外的ipv6以及境内的教育网访问。
修改配置后,点击save
和restart
即可生效。然后我们本地通过代理访问whatismyipaddress.com
将会看到以下结果:
这里IP不再是我们的VPS的ip地址,而且服务商也变为了CloudFlare,说明warp已经生效了。
在服务器上,我们可以通过netflix-verify来检查warp代理对netflix的访问权限:
|
|
有时候可能出现解锁不彻底的情况,即仅可以观看自制剧:
cloudflare warp解锁是否能观看自制剧,纯粹取决于运气,因为这个方法是免费的,目前被大量使用,所以可能造成某些代理IP被Netflix识别。
如果希望稳定解锁,那么可以使用Google One VPN。(只有安卓和iOS客户端)。Google One VPN会根据你的IP判定所在地区,然后就近选择同区域的VPN服务器。 此服务在某些地区不支持,但是可以通过特殊的手段打开。
- 先在手机上打开V2rayNG或者sing-box代理。
- 打开Google One,点击连接VPN,Google One VPN启动后,将会把原来生效的V2rayNG或者sing-box关闭,但是它将无法连接到VPN服务器。
- 再次打开V2rayNG或者sing-box代理,Google One VPN将会很快连上其服务器,开始生效。
似乎通过软路由之类的方式,直接让wifi具备代理能力,也能让Google One VPN成功连接,但是成本比较高。
参考
Author Yaqiu Liu
LastMod 2023-12-17