相比于SS,V2ray设置太麻烦了,对于移动端来说太耗电,对于硬路由来说性能开销太大。但是现在要干扰SS实在太简单,所以不得不未雨绸缪了。花了很大的功夫才利用V2ray+Nginx配置好WebSocket+TLS,同时不影响原来的网站。将V2ray藏在Nginx后面,使用 TLS 加密流量,看起来更像HTTPS。
安装V2ray和Nginx
参考以下两个链接分别安装Nginx和V2ray,其中V2ray是在客户端和服务器上都要安装的,跟SS不同,V2ray不分服务端和客户端。Nginx只需服务器安装就可以了。
V2ray官方Linux下安装指南
我之前写过编译安装和配置Nginx的博文
服务端设置
官方的教程说得已经很清楚了,Nginx的配置和V2ray的配置都提到了,可以先做个参考 V2ray官方白话文配置教程
服务器上的配置我跟官方差不多,直接贴出配置。
Nginx配置
1 |
|
Nginx配置写完之后可以用nginx -t
命令检查一下Nginx的配置文件有没有语法错误。然后nginx -s reload
重启Nginx。
还有V2ray的服务端配置,默认在/etc/v2ray/config.json
1 | { |
V2ray配置完之后可以用命令/usr/bin/v2ray/v2ray -test /etc/v2ray/config.json
命令检查V2ray的配置文件是否有语法错误。接着用systemctl start v2ray
来启动。
需要注意的是:
1、Nginx配置里面的location
字段必须和V2ray中的path
一模一样,连“/”也不可以省略。
2、Nginx配置里面的proxy_pass
后面的端口,必须保持和V2ray中的port
一致,同时注意SElinux是否允许Nginx做转发。
客户端配置
我在官方的基础上做了较大改动,参考了Kitsunebi大神的这篇帖子,在客户端实现了自动分流(绕过国内IP)和DNS防投毒。下面直接贴出我的配置
1 | { |
需要注意的是:
客户端配置需要注意在outbounds
里面的protocol
、settings
、 streamSettings
三个字段下的所有值必须和服务器端一致,不然连不上。不过有一个例外,那就是settings
下的security
,因为v2ray的加密算法是客户端与服务器协商的,服务器没有强制,客户端可以随意,我这里填的是auto
。
V2ray配置完之后可以用命令/usr/bin/v2ray/v2ray -test /etc/v2ray/config.json
命令检查是否有语法错误。接着用systemctl start v2ray
来启动。
使用&测试
用ps auxw | grep v2ray
分别检查服务器和客户端(本地)的v2ray是否正常运行。既可以在网络代理中设置系统代理,也可以在本地终端设置socksv5代理(仅在当前终端有效):
1 | export http_proxy="socks5://127.0.0.1:1080" |
可以用curl检测你当前的访问外网IP
1 | curl ip.sb |
根据curl返回的结果,可以判断代理是否设置正确。
1、如果返回的是本地计算机的外网IP,说明你的本地socksv5代理设置没有生效。
2、如果返回HTTP错误代码(404或者400之类的),检查Nginx与V2ray服务端的设置,也可以找找Nginx的日志找找线索。
3、当然返回服务器的外网IP是最好的情况。
总结
V2ray配置虽然麻烦,但是相较于SS优势明显
1、隐蔽性好。虽然道高一尺,魔高一丈,但是目前来说V2ray这种方法还是不容易被干扰的。
2、由于V2ray内建了DNS服务器和路由功能,不需要像SS那样配置路由表和安装额外的DNS服务器,算是一个一揽子解决方案。而且V2ray的socksv5代理支持转发DNS查询到内建的DNS服务器(明显SS并不支持转发DNS结果),可以直接将V2ray的socksv5代理设置为系统代理,上游DNS服务器不需要改动,国内域名还是国内DNS解析并且直连,国外域名用国外DNS服务器的解析结果并且走代理。