V2RAY使用方法备忘
v2ray或者v2fly是有官方文档的,但是官方文档时不时有所错漏之处,我经过阅读他人写的文档加上自己测试,总结为这篇文章,以备我后续查用。 其路由的功能非常好用,有了路由功能就不需要经常切换网络,甚至可以直接远程配置家里的路由器。
这个文档里,配置文件的设计原则是:
- 尽可能保证联通性,保证该访问的到的页面都要访问的到
- 在保证1的基础上,尽可能的直接连接
- 做好保密和伪装
日志模块
在Docker里面运行的时候,我习惯把日志吐到/logs,然后再把某个文件夹挂载到/logs里面。
"log": {
"loglevel": "warning",
"access": "/logs/access.log",
"error": "/logs/error.log"
},缺点是时间一长容易忘记清理,而且也不能用在其它客户端的配置里。
所以保险起见的话:
"log": {
"loglevel": "warning"
},DNS
"dns": {
"servers": [
"114.114.114.114",
{
"address": "1.1.1.1",
"port": 53,
"domains": [
"geosite:geolocation-!cn"
]
}
]
},入口配置
入口配置会在本地打开端口,一般常用的入口配置如下:
Socket代理
只建议在本地或者局域网内使用,不加密。
{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true,
"userLevel": 8
},
"sniffing": {
"destOverride": [
"http",
"tls"
],
"enabled": true
},
"tag": "socksxxx"
},HTTP代理
只建议在本地或者局域网内使用,不加密。
{
"listen": "127.0.0.1",
"port": 10809,
"protocol": "http",
"settings": {
"userLevel": 8
},
"tag": "httpxxx"
}VMESS协议代理
这里的VMESS Inbound有两种用途,第一种是单独用作服务器和客户端的传输渠道(这个时候加上WebSocket更好),第二种是在本地局域网搭建客户端以后利用手机上的App访问局域网内机器,这个时候只是借用一下这个协议(配置方便)。
{
"port": 3238,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "a83baffa-2c05-4bd9-8d86-10c7e278997a",
"security": "auto",
"level": 0
}
]
},
"tag": "v2ray"
}客户端配置
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "域名或者IP",
"port": 12345,
"users": [
{
"id": "a83baffa-2c05-4bd9-8d86-10c7e278997a",
"security": "auto",
"level": 0
}
]
}
]
},
"tag": "aaa"
}WebSocket
{
"port": 12345,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "a83baffa-2c05-4bd9-8d86-10c7e278997a",
"security": "auto",
"level": 0
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/data" // Need to match the config in nginx
}
}
},Nginx配置
server {
listen 80;
server_name vr.xxxx.com; # 需要配置
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
ssl_certificate /xxxxx/fullchain.cer; # 需要配置
ssl_certificate_key //xxxxx/xxxx.key; # 需要配置
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
root /path/to/a/static/website; # 需要配置
server_name vr.xxxx.com; # 需要配置
location /data { # 需要配置
proxy_redirect off;
proxy_pass http://v2ray-server-local:12345; # 需要配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}建好服务器以后,将需要配置的地方改一下,主要是:
- 域名和相应的证书
- 一个用于伪装的静态网站
- websocket的地址(和上面保持一致)
- 本地的v2ray服务器的地址和端口
有一个小思考,考虑到已经使用了标准的HTTPS进行加密,其实内层的协议未必需要是vmess,甚至可以是socket。但是不知会不会暴露流量特征。
客户端配置
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "域名或者IP",
"port": 12345,
"users": [
{
"id": "a83baffa-2c05-4bd9-8d86-10c7e278997a",
"security": "auto",
"level": 0
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"path": "/data"
}
},
"tag": "aaa"
}路由设置
服务端比较简单,一般直连就可以,不需要任何路由配置:
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},客户端出口的配置如下:
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{//连接家里局域网的,走代理,可删除
"type": "field",
"ip": [
"192.168.1.0/24"
],
"outboundTag": "aaa"
},
{//直连中国域名
"type": "field",
"outboundTag": "direct",
"domain": [
"geosite:cn"
]
},
{//其它的中国IP和私有IP都直连
"type": "field",
"outboundTag": "direct",
"ip": [
"geoip:cn",
"geoip:private"
]
},
// TODO 可以增加更多配置
{//直接连接到世界的互联网
"type": "field",
// "balancerTag": "blancerxxx",
"outboundTag": "aaa",
"network": "tcp,udp"
}
],
"balancers": [//可配置负载均衡
{
"tag": "blancerxxx",
"selector": [
"aaa",
"bbb"
],
"strategy": {
"type": "random"
}
}
]
}