V2ray流量伪装
本文转载自V2Ray高级技巧:流量伪装,因为原地址需要翻墙。
前提条件
本文假设读者已经具备以下条件:
- 一台境外的vps,购买可参考:一些VPS商家整理;
- 一个域名,无备案要求(备案可使用国内CDN加速,但意味着万一有事,被喝茶更容易)。域名购买可参考:Namesilo域名注册和使用教程 或从 适合国人的域名注册商推荐 选购;
- 为域名申请一个证书,请参考:从Let’s Encrypt获取免费证书 或 从阿里云获取免费SSL证书(伪装域名用来做站推荐使用);
- 有基本linux技巧,能使用vim/nano等编辑器。
理论上来说,证书不是必须的。但没有tls加持或不做加密,防火墙直接能看出来流量真实意图从而进行干扰,这也是为什么不建议伪装http流量的原因。本文给出的方法采用合法机构签发的证书对流量进行加密,不是做特征混淆得到的TLS流量,从而更难被检测和干扰。
关于伪装技术的选择,V2ray web+websocket+tls 和 V2ray web+http2+tls 常用来做对比。理论上http2省去了upgrade的请求,性能更好。但实际使用中两者没有明显区别,加之某些web服务器(例如Nginx)不支持后端服务器为http2,所以websocket的方式更流行。如果你要上http2,记得web服务器不能用Nginx,要用支持反代http2的Caddy等软件。
下文介绍流量伪装的配置步骤,演示域名为tlanyan.me,服务器为Linux(CentOS),web服务器软件用Nginx,web+websocket+tls组合,最终效果为:http/https方式打开域名,显示正常的网页;V2Ray客户端请求特定的路径,例如https://tlanyan.me/awesomepath,能科学上网;浏览器直接请求https://tlanyan.me/awesomepath,返回”400 bad request”。即外部看起来完全是一个人畜无害的正规网站,特定手段请求特定网址才是科学上网的通道。
配置DNS
先设置dns将域名解析到vps的ip,例如www.tlanyan.pp.ua
解析到xxx.xxx.xx.xx。
如果你上了CDN,则dns要解析到cdn给的ip或者别名网址(cname)。使用cdn能隐藏真实vps的ip,避免vps被墙或能拯救被封锁ip的vps。上cdn有好处,但国内cdn要求域名备案,国外cdn基本上会降低网速,而且配置起来稍显麻烦。建议新手先摸透https流量伪装,有特殊需求再考虑上cdn。
注意: 如果你要用Let’s Encrypt签发的证书,并且希望上cdn,那么应该先解析到vps的ip,获取到证书后再解析到cdn。
更新: 上cdn可参考:v2ray使用cloudflare中转流量,拯救被墙ip,请务必记得先让伪装正常工作再上cdn!
配置Nginx
如果你的域名并正确配置了SSL证书,可忽略这一步。
Nginx是市面上占有率最高的网站服务器软件,Centos 7系统安装nginx命令:yum install -y epel-release && yum install -y nginx
。
Linux系统上Nginx默认站点配置文件是/etc/nginx/conf.d/
目录下的default.conf
,我们对伪装网站进行全站https配置,示例内容如下:
1 | server { |
配置好用nginx -t
命令查看有无错误,没问题的话systemctl restart nginx
启动Nginx。打开浏览器在地址栏输入域名,应该能看到https访问的Nginx欢迎页。
新域名如何快速做一个像模像样的网站?最简单的办法是从网上下载网站模板,上传到web服务器的根目录(默认是/usr/share/nginx/html)。对于伪装站来说,静态站足够。如果你的境外流量比较大,建议用爬虫或者其他手段做一个看起来受欢迎、流量大的站点,例如美食博客,图片站等。
安装配置V2Ray
详细过程可参考上篇:V2Ray教程。为了让V2ray能正常运行,请确认防火墙已放行对应端口,并且关闭了selinux:setenforce 0
。
到此为止,Nginx和V2ray应该都能各自独立正常工作。如果有一个出现问题,应该先解决再继续下面的操作。
Nginx配置websocket
接下来我们让Nginx和v2ray结合,完成服务端的配置。
首先我们选择一个伪装路径,建议为二级或者较长的一级路径,例如/abc/def
或/awesomepath
配置Nginx将伪装路径的访问都转发到v2ray。编辑/etc/nginx/conf.d/default.conf的第二个server段,增加以下转发配置:
1 | location /awesomepath { # 与 V2Ray 配置中的 path 保持一致 |
配置好后重启Nginx:systemctl restart nginx
。
配置v2ray接受Nginx传来的数据。编辑 /etc/v2ray/config.json
文件,在“inbounds”中新增“streamSetting”配置,设置传输协议为“websocket”。配置好后config.json
文件看起来是:
1 | { |
注意:
- json文件不支持注释,上述配置中”#”号及后续内容都要删掉
- 因为使用tls加密,强烈建议alterId改成0,以节省cpu加快v2ray的速度
配置无误后,重启v2ray服务:systemctl restart v2ray
。
如何测试nginx与v2ray结合没有问题?打开浏览器,输入域名及其他路径,应该显示正常网页或者页面不存在,说明Nginx正常工作;输入域名加v2ray路径,例如https://tlanyan.pp.ua/awesomepath
,应该出现”Bad Request”,说明Nginx将流量转发给了v2ray,并且v2ray收到了请求。
客户端设置
最后是配置客户端,本文以Windows平台的V2RayN软件为例说明使用方法。
打开V2RayN,点击服务器。在弹框中选择添加[VMess]服务器,新建服务器,输入服务器ip,端口写443,把用户id、额外id信息填上。 底层传输方式(transport) 下方,接着点传输协议(network) ,找到ws
,路径一栏输入nginx和v2ray中的路径,例如伪装域名(host) 输入:www.tlanyan.me
、路径(path) 输入:/awesomepath
。
截图如下:
接着下拉底层传输安全(tls) ,选择tls
。
注意:选择加密会影响上网速度
信息填写正确后,点击确定。打开浏览器访问google.com
、youtube.com
等网站,配置无误的话应该都能正常打开。