本文介绍的是将穿墙流量用常见的 https/tls 方式包装,大大降低 vps 被 block 的几率,在敏感时期保持稳如狗的外网访问通道。
v2ray 介绍
V2Ray 是近几年十分流行的网络工具,其功能强大,用途不限于突破防火墙,但因其能有效翻墙而广为人知。V2Ray 有如下大放异彩的特点:
开源。V2Ray 是 Project V 的核心工具,源代码开源;
多协议支持。传输层支持 TCP、mKCP、WebSocket 等,上层协议支持 Socks、Shadowsocks、以及自定义的 VMess 等;
多入口和多出口。V2Ray 可同时支持多个入站和出站协议,每个协议独立工作;
多平台支持。原生支持 Windows、Linux、MacOS 三大常用平台,安卓、iOS 两大移动平台有丰富的第三方工具;
隐蔽性。V2Ray 流量可伪装成网页流量,更难被检测和干扰。
与另一个知名的翻墙工具 Shadowsocks(R)相比,两者区别在于:
V2Ray 是一个框架/平台,而 Shadowsocks(R)是一个代理工具;
V2Ray 功能强大配置复杂,Shadowsocks(R)简单易用;
V2Ray 性能更好,协议支持更完善。
一句话总结:V2Ray 更好更强大,但更难上手和用好。
工具准备
- 一台外网 vps
- 一个域名(备案不备案均可,备案可以提升访问速度)
- ssh 工具
- 为域名申请一个证书
- 基本的 linux 技巧
前提
伪装技术的选择:websocket+tls+web
演示域名: artray.cf
最终实现效果: http/https 方式打开域名,显示正常的网页;V2Ray 客户端请求特定的路径,例如 https:/artray.cf//awesomepath,能科学上网;浏览器直接请求https://artray.cf/awesomepath,返回”400 bad request”。即外部看起来完全是一个人畜无害的正规网站,特定手段请求特定网址才是科学上网的通道。
服务端配置步骤
dns 解析
首先将你申请的域名解析到你的 vps 的 ip 上.可以尝试在freenom
上申请一个免费域名.免费的域名有效期一年,一年后可以免费续期(如果没有人付费和你抢的话)
dns 解析可以选择 dnspod 或者 dnsla 等服务商,我选择的是 dnsla.
如上图,添加两条 A 记录,记录值为你的主机的 ip.
接着在你的域名控制台添加 dnsla 的 dns 服务器(这里以 freenom 为例.)
接着等待域名解析生效即可.
使用 Let’s Encrypt 获取免费证书
安装 certbot
首先安装 certbot:yum install -y python36 && pip3 install certbot
(注意:该安装方式不是官方推荐的,但一直都很好使)
安装完毕后,运行 certbot –help 可以查看该工具的命令详情。
获取证书
运行命令 certbot certonly –standalone -d artray.cf -d www.artray.cf 为域名获取证书。如果你要获取多个站点,继续添加-d 参数即可。certbot 会检测 80 和 443 端口是否已经占用,如果已被占用需要先停止 web 服务器(例如停止 Nginx:systemctl stop nginx)再运行命令。如果域名的 A 记录未指向该服务器,会报错提示域名解析问题。
运行 certbot certificates
命令可查看获取到所有申请的证书及所在目录。
配置 nginx
1 | server { |
配置分为两个 server 段,第一段是所有 http 请求都导向 https;第二段以 ssl 开头的配置都和证书相关:设置证书和私钥的位置、证书采用的协议、证书的加密算法等信息。
为了增强安全性,ssl_protocols、ssl_ciphers 和 ssl_perfer_server_ciphers 的配置建议采用以上配置。
配置好以后,运行 nginx -t 命令查看有无错误。如果没有可运行 systemctl restart nginx 重新开启 web 服务.
证书自动更新
通过 certbot certificates 命令可以看到证书的有效期是三个月,超过期限则需要续签。证书续期可以手动完成,例如:
systemctl stop nginx
certbot renew
systemctl restart nginx
也可以配置 crontab 任务自动续签,在/etc/crontab
文件末添加一行:
0 0 0 */2 0 root nginx -s stop; /usr/bin/certbot renew; nginx -s start
证书将每两个月自动续签一次。如果你的证书快到期了还没有续签,贴心的 EFF(电子前哨基金会)会发邮件提醒,记得到期前续签就行。
安装 v2ray
服务端安装与配置
bash <(curl -L -s https://install.direct/go.sh)
安装完成后,配置文件为/etc/v2ray/config.json,cat 命令可查看内容:cat /etc/v2ray/config.json。一个安装时自动生成的配置文件示例:
1 | { |
配置文件中”inbounds”下的这几项信息需要留意:port(端口)、clients 中的 id(用户 id)和 alterId(额外 id),它们将在配置客户端时用到。
配置文件无需任何改动即可正常使用,但注意防火墙要放行监听的端口。接下来启动 V2Ray 并设置开机启动:
systemctl enable v2ray
systemctl start v2ray
客户端的配置和使用放在最后,讲完结合 nginx 和 v2ray 以后
到这里,v2ray 的安装就完成了.
组合 v2ray 和 nginx,配置服务端 websocket
选择一个比较长的路径,这里我选择的是 /ray/ray
nginx 添加配置
配置 nginx 将这个路径的访问都转发到 v2ray。编辑/etc/nginx/nginx.conf
的第二个server
段,增加以下转发配置:
1 | location /ray/ray { # 与 V2Ray 配置中的 path 保持一致 |
配置好后重启 nginx:nginx -s reload
v2ray 修改配置
配置 v2ray 接受 nginx 传来的数据。编辑 /etc/v2ray/config.json 文件,在“inbounds”中新增“streamSetting”配置,设置传输协议为“websocket”。配置好后 config.json 文件看起来是:
1 |
|
注意:json 文件不支持注释,上述配置中”#”号及后续内容都要删掉。
配置无误后,重启 v2ray 服务:systemctl restart v2ray。
如何测试 nginx 与 v2ray 结合没有问题?打开浏览器,输入域名及其他路径,应该显示正常网页或者页面不存在,说明 nginx 正常工作;输入域名加 v2ray 路径,例如https://artray.cf/ray/ray,应该出现”Bad Request”,说明 nginx 将流量转发给了 v2ray,并且 v2ray 收到了请求。
这样就完成了 nginx 和 v2ray 的组合.
客户端配置
mac 客户端(V2RayU)
首先设置模式为 pac,接着打开服务器设置,新增服务器并配置: