网上不乏很多的一键伪装脚本,很方便,但是现在查的越来越严,也许某一天这些脚本就突然的不能用了,所以我们需要学会手动来部署一套ws+tls伪装,有了这些基础如果你还懂得shell脚本,那么你甚至可以自己写一套脚本。
我们现在就开始吧,首先你需要一个VPS和一个网站,VPS推荐在搬瓦工购买,网站模板可以在http://www.cssmoban.com/模板之家下载,然后下载一个Dreamweaver编辑一下内容即可上传至你的服务器,不懂html代码也没关系DW是有可视化编辑的。
然后开始我们的正题:
1、在Namesilo购买域名,可以参考网络跳跃的教程:https://www.hijk.pw/namesilo-buy-domain-tutorial/
2、安装NginX-1.18.0稳定版,你可以参考我写的
centOS7从0开始编译安装nginx教程
3、申请免费的Let’s Encrypt证书,你可以参考我写的如何申请免费证书教程
这里说明一下为什么我不用http2+tls进行伪装,按道理http2的速度要比ws快,那我为什么不用http2呢?首先,网友们测试过用ws+tls和h2+tls的速度有一定量的提升但并没有质的飞跃,使用起来两者网速的感觉差不多,没有达到人能明显感知的范围。其次,由于nginx不支持h2反代,如果要h2+tls则需要用caddy等客户端,我不太熟悉。最后我决定既然要基于nginx反代,那么就用ws+tls吧。
这里我默认你的nginx和证书已部署完毕,下面先来编辑nginx配置文件
打开你的配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #先找到80端口的server代码块,做如下更改: server { listen 80; server_name www.example.com; #域名改为你自己的 rewrite ^(.*) https://$server_name$1 permanent; #这是重写模块将80端网页指向443端的https网页 } #再找到HTTPS代码块,做如下更改: # HTTPS server # server { listen 443 ssl http2; #如果没有安装H2模块须去掉http2 server_name www.thebwc.me; charset utf-8; ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; #example.com须改为你的证书存放文件夹名称,一般是以你网页域名命名 ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; #example.com须改为你的证书存放文件夹名称,一般是以你网页域名命名 ssl_protocols TLSv1.2 TLSv1.3; ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; ssl_session_tickets on; keepalive_timeout 60; 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_prefer_server_ciphers on; ssl_ecdh_curve secp384r1; location / { root html; #这里默认是nginx的html文件夹为根目录,你可以把网页上传到这里,也可以自定义路径,你可以在html里再新建文件夹,只需在html后添加相对路径如html/myweb等,如果自定义路径在html文件夹外须使用绝对路径, index index.html index.htm; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } #下面代码块是反代的关键, location /awesomeunipath { #location后面是你要使用的伪装路径,你可以使用一级长路径如我代码所示,也可以使用二级短路径如/aws/unip等,一定不要照抄,要改成自己的 proxy_redirect off; proxy_pass http://127.0.0.1:10086; #这里是反代监听设置,若不适用默认端口,请将10086端口替换为你自己的v2ray反代端口,这个端口一定要和v2ray的端口一致!!!由于v2ray默认使用10086,所以我这里写10086做示范 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; } } |
如果速度比较慢,可以把加密削弱:
将HTTPS代码块里的
ssl_protocols 后面参数改为:TLSv1.1 TLSv1.2 TLSv1.3; (分号不要掉)
ssl_ciphers 后面参数改为:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; (分号不要掉)
接下来我们配置v2ray服务端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | { "log": { "loglevel": "warning", #设置日志级别,warning就可以了 "access": "/var/log/v2ray/access.log", #登录日志路径 "error": "/var/log/v2ray/error.log" #错误日志路径 }, "inbounds": [{ "port": 10086, #端口默认10086,记住现在配置端口要和nginx的监听设置反代端口保持一致,否则反代不成功,你可以自行修改,针对不同VPS和不同OS可能需要修改防火墙放行相应端口 "protocol": "vmess", #协议vmess "settings": { "clients": [ { "id": "41d4b0ce-19f8-496f-b2b6-cbeeab6e4124", #UUID号 "level": 1, "alterId": 64 #额外id默认64,修改到这里普通tcp连接已经可用 } ] }, "streamSettings": { "network": "ws", #网络模式websocket "wsSettings": { "path": "/pdd/uin" #ws路径要和nginx设置保持一致,可用一级长路径(/awesomeunicornpath这样的)或二级短路径(我示范的那样的),无论用哪种切记不要复制我的,尽量设计一个自己独特的。 } }, "listen": "127.0.0.1" #只走本地监听 }], "outbounds": [{ "protocol": "freedom", "settings": {} },{ "protocol": "blackhole", "settings": {}, "tag": "blocked" }], "routing": { "rules": [ { "type": "field", "ip": ["geoip:private"], "outboundTag": "blocked" } ] } } |
到这里v2ray和nginx都配置完成了。我们先在nginx的sbin目录下使用:
1 2 3 4 | ./nginx -t #测试一下配置文件是否正确,如果现实successful则执行下面的 ./nginx -s reload #重启nginx服务 #然后我们重启一下v2ray服务 service v2ray restart |
到这里服务端配置就完成了,现在我们测试一下。假设你设置的伪装路径为/awes/uni,域名为www.example.com那么我们在浏览器输入www.example.com/awes/uni,如果出现Bad Request字样,表示v2ray和nginx已经合体成功,nginx已经将流量反代。
接下来我们配置客户端:
1、win10的v2rayN:
点击服务器添加VMess节点,或者双击列表里你已经创建过的节点来修改:
地址为你的vps公网ip,端口用443,你用其他的也可以,但是那就失去伪装的意义了,因为伪装的目的就是让流量走443这个https默认端口,让流量看起来像是一个网站的正常流量。用户id保持和服务端一样的UUID(生成器传送门)。加密选aes-128-gcm,传输协议一定要选ws!!!,别名随便取,伪装类型none,伪装域名为你的伪装站点的域名,路径保持和服务端伪装路径一致。底层传输安全选tls,允许不安全链接选false。点击确定就修改好了,可以正常使用了。
2、Linux下的Qv2ray:
点击添加,或右键点击已有节点,点击编辑(不要选复杂模式也不要选json模式):
如上图设置完毕后,点击TLS设置:
如上图设置完毕后,点击OK保存,即可使用。
本篇只讲解手机端的ws+tls配置问题,手机端的分流设置及其他详细设置请参看上一篇讲普通配置时候的设置,本篇不在复述(详情请点击传送门)
3、Android下的v2rayNG:
点击加号添加节点,或者点击已有节点的笔图标修改:
到这里就设置完成了,点击右上角的勾保存即可,你还可以在首页点击三杠进设置,修改以下其他设置:
启用分应用代理,开启流量探测,域名策略可选IPIfNonMatch,预定义规则选绕过局域网及大陆地址,勾选启用本地DNS
其中分应用代理可以点进去具体设置:
右上角三个点里有供小白使用的,自动勾选代理app
4、iOS下的
Shadowrocket(小火箭)Quantumult(圈)QuantumultX(圈X):
先说小火箭
点击加号添加节点,或点击圈i图标修改已有节点:
选择混淆时会打开一个新页面如下设置:
以上是小火箭的伪装设置。
下面是圈的伪装设置:
上次忘记说了一个小知识点,补充以下点右下角的4个小方块可以选择分流模式
我们点击设置进入设置界面:
点击服务器进入节点界面:
点击加号添加,或者点击节点右边的箭头进行修改:
本页面修改完毕后,还需进入请求头修改:
host默认为你的vps公网ip,请修改host为你的伪装域名,改完后返回上一层点击保存,即可使用。
最后来说一下圈X:
点击右下角小风车,进入设置页面:
下拉至最下方,点击编辑进入config文件:
下拉至server_local:
添加以下代码:
vmess=www.example.com:443, method=chacha20-ietf-poly1305, password= cd2da199-c521-4bbb-abb3-f68ae8860002, obfs-host=www.example.com, obfs=wss, obfs-uri=/app/awsuni, tls-verification=true,fast-open=false, udp-relay=false, tag=测试
以上代码中将www.example.com替换为你的伪装域名,password后面的uuid请替换为与你服务端一致的uuid,obf-uri后面的伪装地址,请替换为你自己的伪装地址,tag为节点名称,请自行取名字替换测试。
修改添加完毕后,点击右上角保存,如果没有语法错误就可以保存成功,如果有它会提示错误的行号,你依据左侧行号来看看是哪里错了,再修改。
到这里所有的软件配置就都完成了。如果想了解分流规则,请参考上一篇教材,(传送门在此!!!)