前文 “V2Ray教程” 介绍了V2Ray
的基本用法,本文介绍V2Ray
的高级使用技巧:流量伪装。客户端下载请访问:V2ray客户端下载,拯救被墙的服务器请参考:拯救被墙的服务器。
为何需要流量伪装
从设立墙以来,我国的网络封锁技术一直是全球领先的。加上方校长等人持续做贡献,封锁和干扰技术也在不断演化和进步。传统的VPN、ssh隧道等科学上网方式渐渐被墙识别和干扰,访问境外网站越来越难,倒逼网民不断推动穿墙技术的发展。
科学上网这些年来,见证了诸多技术的兴起和消沉,自架服务器被绊者更是数不胜数。经历过谈笑风生的岁月,才知闷声发大财是人生真理。翻墙技术同样如此,一是不要高调和张扬,否则大概率被打击和屏蔽;其次流量尽量与常见流量接近,不要特立独行,例如使用非常用端口、自定义奇怪的协议。本文介绍的伪装是将穿墙流量用常见的https/tls方式包装,降低vps被block的几率。
前提条件
本文假设读者已经具备以下条件:
- 一台境外的vps,购买可参考:一些VPS商家整理;
- 一个域名,无备案要求(备案了流量来往更顺畅,但意味着万一有事,被喝茶更容易了);
- 为域名申请一个证书,可以用免费的Let’s Encrypt证书,参考:使用Let’s Encrypt的免费证书
- 有基本linux技巧,能使用vim/nano等编辑器。
理论上来说,证书不是必须的。但没有tls加持或不做加密,墙直接能看出真实意图从而进行干扰,这也是为什么不建议伪装http流量的原因。本文给出的方法采用合法机构签发的证书对流量进行加密,不是做特征混淆得到的tls流量,从而更难被检测和干扰。
关于伪装技术的选择,websocket+tls+web和http2+tls+web常用来做对比。理论上http2省去了upgrade的请求,性能更好。但实际使用中两者没有明显区别,加之某些web服务器(例如nginx)不支持后端服务器为http2,所以websocket的方式更流行。如果你要上http2,记得web服务器不能用nginx,要用后端支持http2的caddy等软件。
下文介绍流量伪装的配置步骤,演示域名为tlanyan.me
,服务器为linux(centos),web服务器软件用nginx,websocket+tls+web组合,最终效果为:http/https方式打开域名,显示正常的网页;V2Ray
客户端请求特定的路径,例如https://tlanyan.me/awesomepath
,能科学上网;浏览器直接请求https://tlanyan.me/awesomepath
,返回”400 bad request”。即外部看起来完全是一个人畜无害的正规网站,特定手段请求特定网址才是科学上网的通道。
操作步骤
服务端涉及到了nginx和v2ray,分别介绍其配置。
1. 配置dns
先要设置dns解析,将域名解析到vps的ip,例如www.tlanyan.me
解析到xxx.xxx.xx.xx。
如果你上了cdn,则dns要解析到cdn给的ip或者别名网址(cname)。使用cdn能隐藏真实vps的ip,避免vps被墙或能拯救被封锁ip的vps,大多数情况下还能加速访问。用cdn的好处很多,但配置起来更麻烦,建议新手先摸透https流量伪装后再考虑上cdn。
2. 配置nginx
如果你已有域名并正确配置了ssl证书,可忽略这一步。
nginx是市面上占有率最高的网站服务器软件,centos 7系统安装nginx命令:yum install -y epel-release && yum install -y nginx
。
linux系统上nginx默认站点配置文件是/etc/nginx/conf.d/
目录下的default.conf
,我们对伪装网站进行全站https配置,示例内容如下:
server {
listen 80;
server_name xxxxx; # 改成你的域名
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl http2;
server_name xxxxx;
charset utf-8;
# ssl配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_certificate xxxxx; # 改成你的证书地址
ssl_certificate_key xxxx; # 改成证书密钥文件地址
access_log /var/log/nginx/xxxx.access.log;
error_log /var/log/nginx/xxx.error.log;
root /usr/share/nginx/html;
location / {
index index.html;
}
}
改完后用nginx -t
命令查看有无配置错误,没问题的话systemctl restart nginx
启动nginx。打开浏览器在地址栏输入域名,应该能看到https访问的nginx欢迎页。
新域名如何快速做一个像模像样的网站?最简单的办法是从网上下载网站模板,上传web服务器的根目录(默认是/usr/share/nginx/html
)。对于伪装站来说,静态站足够。如果你的境外流量比较大,建议用爬虫或者其他手段做一个看起来受欢迎、流量大的站点,例如美食博客,图片站等。
3. 安装配置V2Ray
详细过程可参考上篇:V2Ray教程
到此为止,nginx和V2ray应该都能各自独立正常工作。如果有一个出现问题,应该先解决再继续下面的操作。
4. 服务端配置websocket
这节中我们将nginx和v2ray结合。
首先我们选择一个路径,建议为二级或者较长的一级路径,例如/abc/def
或/awesomepath
。
接着配置nginx将这个路径的访问都转发到v2ray。在/etc/nginx/conf.d/default.conf
的第二个server
段中增加以下转发配置:
location /awesomepath { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_pass http://127.0.0.1:12345; # 假设v2ray的监听地址是12345
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# Show real IP in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
配置好后重启nginx:systemctl restart nginx
。
配置v2ray接受nginx传来的数据。在“inbounds”中新增“streamSetting”配置,传输协议使用“websocket”。配置好后config.json
文件看起来是:
{
"log": {
"loglevel": "warning",
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log"
},
"inbounds": [{
"port": 12345,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "xxxxx", # 可以使用v2ctl uuid生成
"level": 1,
"alterId": 64
}
]
},
"streamSettings": { # 载体配置段,设置为websocket
"network": "ws",
"wsSettings": {
"path": "/awesomepath" # 与nginx中的路径保持一致
}
},
"listen": "127.0.0.1" # 出于安全考虑,建议只接受本地链接
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
},{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
}
]
}
}
注意:json文件不支持注释,上述配置中”#”号及后续内容都要删掉。
配置无误后,重启v2ray服务:systemctl restart v2ray
。
如何测试nginx与v2ray结合没有问题?打开浏览器,输入域名及其他路径,应该显示正常网页或者页面不存在,说明nginx正常工作;输入域名加v2ray路径,例如https://tlanyan.me/awesomepath
,应该出现”Bad Request”,说明nginx将流量转发给了v2ray,并且v2ray收到了请求。
客户端设置
最后是配置客户端,以Windows平台的V2RayW
软件为例说明使用方法。
打开V2RayW
,右键托盘图标,点击“配置”。在弹框中新建或修改已有的服务器,输入服务器ip,端口写443,把用户id、额外id信息填上,网络类型选择”ws”。接着点“传输设置”,找到“websocket”,路径一栏输入nginx和v2ray中的路径,例如“/awesomepath”;http头部输入:
{
"Host":"你的域名,例如www.tlanyan.me"
}
截图如下:
接着点击“tls”,勾选“启用传输层加密tls”,在“服务器域名”的输入框中输入域名,截图如下:
信息填写正确后,点击“保存”。打开浏览器访问google.com,youtube.com等网站,配置无误的话应该都能正常打开。
如果对nginx/v2ray以及客户端的配置不熟悉,建议使用这个v2ray配置生成工具:v2ray配置生成
总结
https/tls会加密路径信息,仅靠中间环节捕捉到的流量包极难区分是正常请求还是夹带私货的流量。这也显示了v2ray的强大之处:通过配置不同的协议和载体,就能对进出的流量做定制。从流量伪装、反向代理的功能上看,v2ray毫无疑问的是一个强大的网络框架/工具,科学上网功能只是其一个成功应用。
比较让人遗憾的是v2ray的ios客户端均收费,客户端下载请访问:V2ray客户端下载。
博主,备案的域名流量来往更顺畅,这句话不明白,难道备案的域名还有加成?
备案域名的流量一般直接放行,不会进入检测名单
博主你好,请问这个可以和宝塔面板共存吗?可以的话要怎么做?
可以的。安装教程安装和配置好v2ray,接着在宝塔控制面板里安装nginx。然后复制教程中的配置,粘贴到宝塔里的nginx配置,修改端口号和id,重启nginx,配置没问题的话应该就能用了
大佬能讲讲如果是用caddy的话要怎么配置么,感觉这个比nginx略方便些
有空我加进去
谢谢作者,成功了。一直用的是ssr,发现总是间歇性的断线,这个断线与网上别人反馈的都不一样,这个是ping 不通,SSH掉线,更不用说访问了。大概是在用的时候,每隔几分钟断线一次,但是如果突然打开一个视频,流量突然增加,那么马上断线,所以我猜想的是我的IP其实已经被盯上了,但是没有封。我自己尝试更改过端口,没有用,马上也能够被识别,结果与上面一样。
现在按照博客主的教程搭好,确实可以了。不过也没有长时间测试,仅仅只有3,4个小时。我只想用google查询资料而已,百度一点也不能用,再说国家这么好,我也没有任何反对的言论,确实感觉这个屏蔽对于学习真的有很大的伤害。
还有其实说的轻松,但是如果自己搭建的话,确实特别难,因为需要知道Linux的相关知识。很多小问题并不是别人都有反馈的,你需要懂相关才行。总之感谢作者。
有没有apache2 配置的教程
我没有用过apache2的proxy模块,不过应该和nginx差不多
大神,nginx和v2ray都能单独工作,但是请求v2ray路径,出现的502 bad gateway,这是什么原因?
看一下nginx日志
提示permission denied,怎么解决?
估计是selinux造成的,用
setenforce 0
关掉再试试用了ws之后无法上网,客户端日志提示:failed to find an available destination: all retry attempts failed,以及failed to dial websocket。这应该和ws设置有关吧?
服务端有连接过来吗?看看日志
看了一下,里面都是invalid user,这是连上来了?
有你的ip记录就说明连过来了,v2ray出现invalid user可能是这些原因:
1. uuid不对
2. alter id不对
3. 服务端和客户端时间相差太大
逐个检查一下吧
晕,最后发现竟然是时间相差了7分钟,调整一下时间就好了
感谢博主远程协助解决问题,特来打赏聊表谢意🙏
教程很详细,感谢作者!
怎么伪装微信视频?
要用mkcp协议,详情参考:https://toutyrater.github.io/advanced/mkcp.html
感谢楼主分享,请教一下2个问题,
1、不用域名能伪装吗(没有域名)?
2、v2ray 或者Shadowsocks 有没有自己限制自己速度的办法,网速太快 是不是特征很明显就容易被封 经常看视频,,,被封了好几次了
不用域名可以伪装成其它流量,这个我没有研究。
v2ray和shadowsocks我不清楚有没有限制速度的办法,但nginx和iptables是能做到的
希望博主能出个一键安装配置v2ray的脚本
有空可以考虑一下
感谢分享
这个好复杂,有没有好用简单点的其他技术?
有其他简单的技术,但是不适合用来翻墙,比如说另一种热门的wireguard
完全按照步骤来,可是配置好之后,访问那个awesome路径返回的是502 Bad Gateway 而不是400 Bad request。。。
求问博主怎么解决。。
说明v2ray配置有问题,请用v2ray客户端直连试试
也不一定全是v2ray的问题,502表示nginx转发请求给v2ray过程中出现了问题,可能的原因包括:nginx配置中的端口是否与v2ray一致?v2ray服务有没有正常开启?v2ray能解析nginx转发过来的请求吗?
V2ray直连没问题。应该还是nginx配置问题。
后来用你给的配置自动生成的那个工具,把所有配置重新覆盖一遍,就好了
nginx可以用
nginx -t
命令检查配置有没有问题。对于新手,用自动生成工具是最方便的同遇到502的问题,配置生成工具生成的是v2ray配置吧,能够找到当时是哪一个配置出了问题吗
小水管建议用kcp,速度有保障
这个比ssr复杂多了,ssr真的不行了吗?
目前封得厉害,等节后观察看看吧
ip被封了,证书需要重新申请吗?
证书和域名绑定,换服务器后用原来的ip再配置一次就可以
我用一台VPS,给一个二级域名,比如叫kankan.1.com。然后kankan起nginx,对此二级域名,进行转发,交给qiaoqiao.2.com处理,同样的,qiaoqiao又通过nginx,转给soso.3.com处理,而soso上有个代理,也许是squid,这里是用的v2ray。然后v2ray说,我其实就是个代理,当我是个squid就行了,我去帮你找页面,然后,soso就在外部,直接就能访问到,然后soso又能原路返回数据,所以用浏览器返回要访问的。
那么,我访问kankan,qiaoqiao做的转发,soso做了代理。这其中,转发的过程,可以很多。
就这技术,有什么好专利的?这不就是把路由通讯协议用在了WEB访问上?默默地使用不好吗?再说,这里面就会存在多跳延时的问题,路由协议中已经给出解决方案,动态调整。是不是以后类似的v2rayplus要考虑多点转发,将代理云化,或者说虚拟发布统一接口。
如果想做好,真没必要专利,我看还收费,为什么要收费呢?有人气不比有钱要好很多?太不虚荣了!
哥们,我觉得你说的和我们说的不是一回事。北理的专利用来识别v2ray流量
北邮专利的事情听说没?博主觉得v2ray还能撑多久?
个人认为对tls伪装流量效果有限,https包装还可以顶挺长一段时间
老哥,稳!
ssr被封了好几个,试了两天这个,目前效果不错!
安卓客户端的伪装怎么配置?
v2rayng上传输协议选**ws**,伪装类型填”http”,伪装域名和路径填你的域名和路径
必须要全站配置吗 支持单独一个子域名吗
可以的,全站的意思是该子域名下所有资源都走https
不要在国内买域名,要实名认证,很坑
国内注册账号就要实名,更不用说域名了
用了cdn,怎么获取let’s encrypt的免费证书啊?
用dns方式验证,参考:Let’s Encrypt renew出现“Challenge failed for domain xxxx”
cdn会不会让速度更慢?
基本上不会,理论上用国内的还能有加速效果
国内有免费的cdn吗?
国内的cdn都要求域名备案,http流量有免费,https流量基本都要收费
博主现在用哪家的vps?速度怎么样?
用的香港节点,我很少看视频,上网速度还可以
我靠!终于弄好了!给的配置文件有错!
“log”: {
“loglevel”: “warning”,
“access”: “/var/log/v2ray/access.log”,
“error”: “/var/log/v2ray/error.log”
},
抱歉,张贴的配置少了两个引号
这操作对小白来说太难了,求指点啊
加q 1020923112私聊
全部设置好了!也配置好了!但是飞机不能起飞啊
加q 1020923112 私聊
我按照操作了一遍!怎么一直404!没有错啊
证书和ip一一对应吗?
证书和域名对应,和ip关系不大
ssr这几天封得让人心寒啊,试试v2ray
v2ray保平安
域名和证书太难了!
一步步来,弄完了好处大大的
v2ray怎么限速和限制设备登录数?
v2ray没有这个功能,可以考虑用iptables和nginx达到目的,请参考: 限制并发连接数
为什么教程都不用windows系统啊?
linux性能和稳定性更好,维护也更容易。windows除了界面好用一点,不占其他优势