V2Ray 不区分服务器版和客户端版,它们运行的是同一个软件,区别是配置文件的不同。
应用场景
场景:外网无法访问部署在内网的 MySQL,导致 SpringBoot 项目启动时连不上数据库,接口无法调试,开发效率低。
解决:部署 v2ray,然后配置 JVM 启动参数 -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=18998
注意:Navicat 不支持 socks 代理,仅支持以下两种方式:
- 使用 SSH 隧道。会话的连接 ID 不会变。
- 使用 HTTP 隧道(nginx 配置见 location.conf)。会话的连接 ID 会变化,所有基于连接级别(Session 级别)的功能和状态全部失效。
使用 HTTP 隧道后,会话的连接 ID 变化的核心原因:无状态与短连接:
1、HTTP 协议是无状态的(Stateless)
标准的数据库连接(如直连或通过 SSH 隧道)是长连接。客户端与 MySQL 之间会保持一个持久的 TCP 握手状态,在此期间分配的 CONNECTION_ID 是固定不变的。
但 HTTP 协议每次请求都是独立的、无状态的。
2、隧道脚本(ntunnel_mysql.php)的运行机制
当你通过 Navicat 的 HTTP 选项卡配置并运行:
- 你在 Navicat 中点击或执行的每一次 SQL 查询,Navicat 都会向服务端的
ntunnel_mysql.php 脚本发送一个 HTTP POST 请求。
- PHP 脚本接收到请求后,在服务器本地通过
mysqli_connect() 临时新建一个数据库连接,执行你的 SQL,拿到结果返回给 Navicat,然后立刻关闭该数据库连接。
- 既然每次发送 SQL 都是服务端 PHP 重新
connect 的过程,MySQL 自然会为这个全新的连接分配一个新的内部线程 ID。因此,你连续执行 SELECT CONNECTION_ID(); 拿到的永远是不同的 ID。
部署方案一(推荐加密协议)
在服务器部署 V2Ray 服务端,本地部署客户端。
解压
1 2 3
| mkdir -p /data/local/v2ray-linux-64/log/ cd /data/local/ unzip v2ray-linux-64.zip -d ./v2ray-linux-64
|
服务端
配置
vim /data/local/v2ray-linux-64/config.json,更多配置见官网 v2fly 。
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
| { "log" : { "access": "/data/local/v2ray-linux-64/log/access.log", "error": "/data/local/v2ray-linux-64/log/error.log", "loglevel": "warning" }, "inbounds": [ { "port": 8998, "protocol": "vmess", "settings": { "clients": [ { "id": "755bc63b-e26d-47cd-85a1-b6ebbecbbabc" } ] } } ], "outbounds": [ { "protocol": "freedom" } ] }
|
启动
1 2 3
| chmod /data/local/v2ray-linux-64/v2ray +x # 授予可执行权限 nohup /data/local/v2ray-linux-64/v2ray run -config /data/local/v2ray-linux-64/config.json &>/dev/null & jobs
|
开机自启
v2ray-linux-64.zip 解压文件中包含 systemd/system/v2ray.service,需要的选项包括 User、ExecStart 等。
vim /etc/systemd/system/v2ray.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [Unit] Description=V2Ray Service Documentation=https://www.v2fly.org/ After=network.target nss-lookup.target
[Service] User=root Group=root CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true ExecStart=/data/local/v2ray-linux-64/v2ray run -config /data/local/v2ray-linux-64/config.json Restart=on-failure RestartSec=10s RestartPreventExitStatus=23
[Install] WantedBy=multi-user.target
|
重新加载配置文件:systemctl daemon-reload
客户端
配置
更多配置见官网 v2fly 。
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 54 55 56
| {
"inbounds": [ { "port": 18998, "listen": "127.0.0.1", "protocol": "socks", "settings": { "udp": true } } ], "outbounds": [ { "protocol": "vmess", "settings": { "vnext": [ { "address": "192.168.0.7", "port": 8998, "users": [ { "id": "755bc63b-e26d-47cd-85a1-b6ebbecbbabc" } ] } ] } }, { "protocol": "freedom", "tag": "direct" } ] }
|
启动
新建 windows 启动脚本 D:\Program\v2ray-windows-64\v2ray-run.cmd 内容如下:
部署方案二
仅在服务器部署 V2Ray 服务端。
解压
请参考上文。
服务端
配置
vim /data/local/v2ray-linux-64/config.json,更多配置见官网 v2fly 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| { "inbounds": [ { "listen": "0.0.0.0", "port": 8997, "protocol": "socks", "settings": { "auth": "noauth", "accounts": [ { "user": "zhaolq", "pass": "123456789" } ], "udp": true } } ], "outbounds": [ { "protocol": "freedom" } ] }
|
启动
请参考上文。
启动后可以使用 SwitchyOmega 插件测试 socks 代理。