前言
原本在 搬瓦工 上面购买的 VPS 上面搭建的 VPN 不能用了,具体原因就是 GTW 经过一波加强,可以通过 TCP 阻断来封锁一些用于搭建 VPN 的 VPS。TCP 阻断的结果就是在国内无法通过 tcp 来连接访问国外的 VPS,从而在国内无法 SSH 登录 VPS,但是使用 ping 工具【基于 ICMP】却能 ping 通被 tcp 阻断的服务器。
当 VPS 被 TCP 阻断时,原本基于 shadowsocks 的科学上网方式就不能使用了,本文就是针对被 TCP 阻断的 VPS,通过 V2Ray 来实现科学上网。当然对于没有被 TCP 阻断的 VPS 使用该方法来搭梯子也不容易被封。
基础条件
搭建V2Ray的基础条件与SSR基本一致,无(一)甚(贯)特(尿)殊(性):
- 购买一台国外VPS服务器:选择自己喜欢的服务商即可【这里有评比】,不建议选择主流服务商像vultr,搬瓦工等,即使正常使用也很有可能被墙。我这次选择的是hostwinds最低配置Linux vps(建议位置选择Seattle,系统选择以稳定著称的CentOS 7),4.49美元/月,有1T流量,最重要的是支持免费更换ip,不限次数(注意购买hostwinds时,不要使用代理ip,直接用本机ip访问hostwinds官网购买,否则会导致购买完成后,vps显示“Pending”状态,不能即时创建服务,需要联系客服进行人工审核)。
- 购买一个域名:V2Ray的节点可以伪装成正常的网站,将其流量与正常的网页流量混淆以避开第三方干扰,自然就需要有域名。我这里选择的是namesilo,在域名搜索框搜索自己喜欢的域名,找域名后缀最便宜的购买即可,我的域名后缀是club,1.59美元/年。
点击刚刚注册的域名“DNS Records”选项“update”(画着蓝色小球)打开如下页面:
删除上图的示例记录,将刚刚购买的VPS服务器的IP填入A记录,设置结果如下图示,至此域名解析完成:
实现过程
Vmess + WebSocket + TLS (以下简称 wss)是V2Ray服务端主流的工作方式,因其特征如同 HTTPS 流量,可以隐藏 V2Ray 路径,主动侦测会得到正常 HTTP 网站响应,具有良好的伪装能力,目前被广泛用于反审查。但如此强大的伪装能力,需要付出严重的性能代价:TLS 1.3 握手需要消耗 1-rtt,WS 握手也需要消耗 1-rtt,增大了握手延迟。V2Ray 增加了 mux 以减少握手的发生,然而实际使用中 mux 体验并不好,很多用户选择关闭。
服务端搭建
本文V2Ray服务端采用Vmess + TCP + TLS的工作方式进行网站伪装,省下WS的握手延迟。工作原理:HaProxy 监听 443 端口,处理 TLS 之后,将 HTTP 流量交由 Web 服务器处理,非 HTTP 流量交由 V2Ray 按 Vmess 处理。
本次方案使用 HaProxy,Caddy/Nginx(Web 服务器还可以用 httpd 等替代),V2Ray,服务器系统为 Centos 7。
1.使用Xshell以root身份登录到远程主机(购买的VPS服务器),特别注意,V2Ray 对于时间有比较严格的要求,要求服务器和客户端时间差绝对值不能超过 2 分钟【不要求时区一致】,所以一定要保证时间足够准确。
2.安装HaProxy,为了较好的支持 TLS1.3,HaProxy 版本应大于 1.8.15,OpenSSl 版本应大于 1.1.1,如果您使用的发行版仓库自带的版本较低,您可能需要自行编译安装:
1 | [root@hwsrv-698253 ~]# openssl version |
新增执行用户useradd haproxy -p /sbin/nologin
,将haproxy注册到系统服务:
1 | [root@hwsrv-698253 haproxy-2.1.4]# cp examples/haproxy.init /etc/init.d/haproxy |
HaProxy 1.79及以后的版本没有自带haproxy.cfg配置文件,我们要自行找模版【万能搜索】编写下 /etc/haproxy/haproxy.cfg(检查配置文件 haproxy -c -f /etc/haproxy/haproxy.cfg
),最后启动Haproxy:
1 | systemctl start haproxy |
3.安装 Web 服务器,Caddy 参考这个教程,本文选用Apache:
1 | [root@hwsrv-698253 ~]# yum -y install httpd |
4.安装 V2Ray,V2Ray 提供了一个在 Linux 中的自动化安装脚本。这个脚本会自动检测有没有安装过 V2Ray,如果没有,则进行完整的安装和配置;如果之前安装过 V2Ray,则只更新 V2Ray 二进制程序而不更新配置。
1 | [root@hwsrv-698253 ~]# bash <(curl -L -s https://install.direct/go.sh) |
修改 V2Ray 配置文件/etc/v2ray/config.json
,以 Vmess + TCP 方式监听 40001 端口:
1 | { |
5.修改Web服务器配置文件,部署HTTP服务于8080端口,以Apache为例:
1 | [root@hwsrv-698253 ~]# vim /etc/httpd/conf/httpd.conf |
6.修改HaProxy配置文件/etc/haproxy/haproxy.cfg
,内容如下所示:
1 | global |
7.重启各项服务:
1 | systemctl restart haproxy |
客户端配置
下载相应客户端予以配置,本文以Mac OSX为例:
1 | brew cask install v2rayx |
点击Config选项卡,配置如下界面:
对于非图形化配置的客户端,可将客户端的 config.json 文件修改成下面的内容,修改后重启 V2Ray 使配置生效。
1 | { |