V2ray 工具,相信大家都不陌生,由大神使用 Go 语言开发,极大的方便了国内小伙伴畅游互联网。
多数朋友在安装 V2ray 时会采用其自动化安装脚本,然后直接运行 V2ray 软件。这样做虽然简单方便,但是还不能完全发挥 V2ray 的潜力。事实上只需要简单修改一下 V2ray 的配置文件,就可以让 V2ray 运行的更加安全和高级。
1] V2ray 支持非 Vmess 协议
V2ray 不仅支持 Vmess 协议,还支持 Shadowsocks 协议,做法也非常简单,就是在配置文件”config.json”添加一个”inboundDetour”键,然后配置 Shadowsocks 协议相应内容即可:
"inboundDetour": [ { "protocol": "shadowsocks", "port": 12345, "settings": { "method": "aes-256-cfb", "password": "password", "udp": false } } ],
配置文件中:
- “protocol”指支持的协议
- “port”指该协议侦听的端口
- “settings”指该协议的配置项
- “method”是协议配置项中对应的配置内容,这里指SS协议的加密方法
- “password”是协议配置项中对应的配置内容,这里指SS协议的连接密码
- “udp”是协议配置项中对应的配置内容,这里指SS协议是否启用UDP连接
将以上内容添加到配置文件中,V2ray 就会同时支持 Vmess 协议和 SS 协议了。
2] V2ray 侦听多个端口
添加 SS 协议就已经为 V2ray添加了新的侦听端口。事实上,如果对于”inboundDetour”键进修改,就可以让V2ray 侦听更多的端口,从而实现为多用户使用不同端口同时服务,充分体现 Go 语言强大的并发处理能力。
熟悉 JSON 格式的话,可以发现”inboundDetour”键的值是一个 JSON 对象数组,数组中的一个对象就对应一个侦听的端口或者说是一个入流量协议。
于是可以修改”inboundDetour”键的值内容,从而增加多端口支持:
"inboundDetour": [ { "protocol": "shadowsocks", "port": 12345, "settings": { "method": "aes-256-cfb", "password": "password-1", "udp": false } }, { "protocol": "shadowsocks", "port": 54321, "settings": { "method": "aes-256-cfb", "password": "password-2", "udp": false } } ],
可以看到,在”inboundDetour”键的值数组中,有两个 JSON 对象,用于指示两个不同的协议。示例使用SS协议侦听两个不同的端口,并且使用不同的密码,从而可以轻松实现用户隔离。
3] V2ray+WebSocket+Tls+Nginx 实现高伪装
所谓的高伪装,当然是针对 GFW 来说。普通 V2ray 客户端同服务器使用 TCP 方式连接,虽然在传输过程中使用 Vmess 协议对数据进行了加密操作,让 GFW 不能识别数据包的内容,但是由于固定连接某些主机的特定端口,也容易被标记为可疑数据,造成服务端被屏蔽。
而 V2ray+WebSocket+Tls+Nginx 的方式就相对更具隐蔽性,客户端将代理数据进行 Vmess 加密,并将数据伪装成普通的 Web 请求,再通过 Tls 进行传输层加密,到达服务端后由 Nginx 响应请求,并将请转发给 V2ray 服务端,服务端对数据进行解密后,代理访问目标网站,并将目标网站的数据响应反馈给 Nginx,由 Nginx 转发给 V2ray客户端面,从而实现数据的代理。流程如下:
V2ray客户端<-Vmess-><-Tls->Nginx<-Vmess->V2ray服务端<-->Google
可以看出,用户数据在整个代理环节中会进行两次加密,并且在传输过程中与普通的 HTTPS 流量一致,由 Nginx 完成请求响应,极大的提升了数据的隐蔽性。其实现方法与 Trojan 基本一致,只是 V2ray 的 WebSocket 方案需要有 Web 服务器来配合完成。
首先配置 V2ray 服务器的 Vmess 协议采用 Websocket 方式传输:
"inbounds": [{ "port": 12345, "listen":"127.0.0.1", "protocol": "vmess", "settings": { "clients": [ { "id": "User-uuid", "level": 1, "alterId": 64 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/webroot/html" } } }],
其中标红的内容就是服务器使用 WebSocket方式时需要添加的内容:
- “listen”是指 V2ray 侦听的主机,也就是接收 Nginx 转发请求的主机,一般采用本机即可
- “streamSettings”表示数据流设置
- “network”表示数据流的网络设置,WebSocket方式时设置为”ws”
- “wsSettings”是工作于 ws 方式时的设置项
- “path”: “/webroot/html”是指 Nginx 服务器转发请求网站的根目录
然后就需要配置 Nginx 启用 Tls 传输并将请求转发给 V2ray 服务端:
server { listen 443 ssl; ssl_certificate /etc/v2ray/public-key.pem; ssl_certificate_key /etc/v2ray/private-key.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name ws.rultr.com; location /webroot/html { proxy_redirect off; proxy_pass http://127.0.0.1:12345; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; # Show realip in v2ray access.log proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Nginx 的配置中标红部分为需要根据实际情况修改的内容:
- ssl_certificate 为Web服务器的公钥
- ssl_certificate_key 为Web服务器的私钥
- server_name 为Web服务器侦听的主机名示例使用”ws.rultr.com”
- location 为主机文件的实际目录,需要与 V2ray 服务端保持一致
- proxy_pass 为转发请求的目标网址,需要与 V2ray 服务端对应
最后,说一下 Windows 平台 GUI 客户端 V2rayN 如何配置。因为服务器工作的再正常,客户端配置有问题,那也是白搭。当然如果习惯使用命令行客户端,那么修改配置文件也可以达到同样的效果,不过还是有 GUI 界面的工具用起比较直观。
图.1 V2rayN配置使用 WebSocket 方式连接服务器
从图.1的配置中可以看出,V2ray 的客户端配置需要与 Nginx 及 V2ray 服务端保持一致,这样才能让整个系统运转正常。
需要说明的是,这种方式并不代表 V2ray 会更加稳定,而是仅仅提升了隐蔽性。双重加密可能会带来一些性能损失,但对于现在的主机来说,整体影响很小。
以上就是一些关于 V2ray 的高级使用技巧,当然,这也只是些皮毛,希望可以发掘更多更加好用的功能 出来。