v2ray 配置 SOCKS5:本地入站 vs 远程上游,两套 config.json+curl 验证
简答:照着教程填了 1080 仍连不上,通常是把本地 SOCKS5 入站、远程 SOCKS5 出站或 HTTP 代理混在了一起。先确认应用连接的是 V2Ray 的本地 socks 入站,再按实际核心版本检查配置,最后用 curl 和日志验证出口。
定义:V2Ray 的 SOCKS5 配置,是用 socks 入站接收本机应用请求,再通过 freedom、VMess 或远程 SOCKS5 出站转发流量。
先判断你要配置哪一种 SOCKS5
照着教程填了 1080 仍连不上,通常不是端口数字本身有问题,而是把 本地 SOCKS5 入站、远程 SOCKS5 出站或 HTTP 代理混在了一起。本站是第三方使用指南站,不代表任何核心或客户端的官方页面;下面示例按 V2Ray v4 JSON 配置组织,实际字段应以你正在运行的核心为准。
| 目标 | 写在哪 | 应用端连接哪里 | 关键判断 |
|---|---|---|---|
| 让本机应用使用 SOCKS5 | inbounds | 127.0.0.1:本地端口 | 应用连接的是 V2Ray 本地入口 |
| 通过 VMess 远程出口转发 | outbounds 的 protocol: vmess | 仍连接本地 SOCKS5 入口 | 远端地址、端口、UUID 和传输参数必须匹配 |
| 连接已有远程 SOCKS5 | outbounds 的 protocol: socks | 仍连接本地 SOCKS5 入口 | 上游地址、端口和账号密码必须正确 |
V2Ray 的配置结构以入站和出站为主:入站接收前一个节点或本机应用的请求,出站连接下一个节点或目标地址。V2Fly 的入门文档也用本地 socks 入站配合远程 VMess 出站说明这条数据流,可查看 V2Fly VMess 配置说明。
最快可用:本地 SOCKS5 入站+直连出口
如果只是先确认本机应用能否连接 V2Ray,使用下面的最小 v4 JSON 配置。它只监听回环地址,不向局域网开放,适合先排除端口、协议和浏览器填写错误。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"tag": "socks-in",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct",
"settings": {}
}
]
}port是 V2Ray 本地监听端口,1080 只是示例,不能推断其他实例也使用该端口。listen: 127.0.0.1只接受本机连接;不要为了省事改成0.0.0.0。protocol: socks表示入站协议是 SOCKS,不是 HTTP。auth: noauth表示不使用账号密码,只适合与本机回环监听配合。udp: false先关闭 UDP,便于优先确认网页等 TCP 请求。
V2Fly 的官方示例配置同样使用本地 127.0.0.1 监听和 socks 入站,并说明监听所有接口会扩大暴露范围,可参考 V2Fly 官方示例配置文件。
如果需要 SOCKS5 用户名密码,把入站设置改为下面的结构;此时应用端也必须填写相同账号和密码:
"settings": {
"auth": "password",
"accounts": [
{
"user": "USERNAME",
"pass": "PASSWORD"
}
],
"udp": false
}不同核心对认证字段的细节可能存在差异。若你运行的是 Xray,应按其 SOCKS 入站文档核对字段;Xray 文档明确列出 noauth、password、用户账号和 UDP 设置,可查看 Xray SOCKS 入站配置说明。
本地 SOCKS5 入站+VMess 远程出口
已有 VMess 服务器信息时,最常见的结构是:浏览器或应用连接本机 SOCKS5,V2Ray 再通过 VMess 出站连接远端。下面示例沿用本地 1080 端口,远端参数全部使用占位符,不能直接当作真实节点信息。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"tag": "socks-in",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"tag": "vmess-out",
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "SERVER_ADDRESS",
"port": SERVER_PORT,
"users": [
{
"id": "UUID",
"alterId": 0,
"security": "auto"
}
]
}
]
}
}
]
}需要替换的项目包括远端服务器地址、端口、UUID,以及服务端要求的用户参数。若服务端使用 TLS、WebSocket、gRPC 或其他传输方式,还必须补充与服务端一致的 streamSettings;只改 UUID 或端口不能替代传输层配置。V2Fly 的 VMess 示例展示了客户端 socks 入站与 VMess 出站的基本结构,可参考 V2Fly VMess 基础配置。
如果日志出现用户校验失败、连接被拒绝或远端握手失败,优先核对 UUID、服务器端口、系统时间、防火墙和传输参数。V2Fly 文档列出的排查方向也包括客户端入站端口、远端地址、服务器入站端口和防火墙。
连接远程 SOCKS5 上游的配置
如果你已经有一个远程 SOCKS5 服务,而不是 VMess 服务,出站应写成 protocol: socks。本机应用仍然连接 V2Ray 的本地 socks 入站,V2Ray 再连接远程上游。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 1080,
"listen": "127.0.0.1",
"tag": "socks-in",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
],
"outbounds": [
{
"tag": "socks-upstream",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "UPSTREAM_ADDRESS",
"port": UPSTREAM_PORT,
"users": [
{
"user": "USERNAME",
"pass": "PASSWORD"
}
]
}
]
}
}
]
}远程上游不需要认证时,可以删除 users 数组;需要认证时,用户名和密码必须由有权管理该服务的人提供。SOCKS5 协议本身不负责加密传输,账号、密码和流量不应直接暴露在不可信的公网链路中。Xray 官方文档明确提醒 SOCKS 不适合直接通过公网传输;更稳妥的做法是仅在可信网络或已有加密隧道中使用,并限制监听地址和防火墙来源,可参考 Xray SOCKS 安全说明。
远程 SOCKS5 与本地 SOCKS5 是两个不同角色:本地应用填写的是 V2Ray 的入站端口,远程地址和远程认证只写在 V2Ray 的出站配置里,不能把远程服务器地址直接填进浏览器的本地代理栏。
应用端填写速查卡:地址、端口和认证
| 场景 | 代理类型 | 地址 | 端口 | 认证 |
|---|---|---|---|---|
| 本地无认证 SOCKS5 | SOCKS5 | 127.0.0.1 | 配置中的 inbounds.port | 关闭 |
| 本地账号密码 SOCKS5 | SOCKS5 | 127.0.0.1 | 配置中的本地端口 | 填写入站账号密码 |
| v2rayN 图形客户端 | 以设置页显示为准 | 通常是本机回环地址 | 查看本地 SOCKS 或混合监听端口 | 按界面和配置决定 |
| 远程 SOCKS5 上游 | 应用仍选本地 SOCKS5 | 填写本地地址 | 填写本地入站端口 | 应用认证与本地入站一致 |
v2rayN 对自定义配置未必能自动识别本地 SOCKS 端口,官方界面说明要求用户手工填写或查看配置中的实际端口;基础设置中的“本地混合监听端口”也可能同时关联 SOCKS5 和 HTTP。因此不要把某个经验端口当成固定值,7890、7897、1080 或 10808 都不能脱离设置页和配置文件单独判断。可查看 v2rayN 官方界面与本地端口说明。
curl 验证 SOCKS5 时不要写成 HTTP 代理:
curl --socks5-hostname 127.0.0.1:1080 https://example.com带认证时可使用:
curl --proxy socks5h://USERNAME:[email protected]:1080 https://example.com其中 socks5h 表示让域名解析交给 SOCKS5 端处理。用户名或密码包含特殊字符时,应先进行 URL 编码。浏览器则选择 SOCKS5,填写本机地址和实际端口,不要把 SOCKS5 端口填到 HTTP 代理栏。
配置检查:按二进制版本和配置格式选择命令
下面的命令必须根据“二进制版本”和“配置格式”一起判断。本文示例是 v4 JSON,不要因为安装的是较新的 V2Ray 二进制就直接把 v4 配置改写成 v5 格式。
| 二进制与配置组合 | 检查命令 | 判定标准 |
|---|---|---|
| V2Ray v4 二进制+v4 JSON | v2ray -test -config config.json | 命令无报错并以退出码 0 结束 |
| V2Ray v5 二进制+v4 JSON | v2ray test -c config.json | 命令无报错并以退出码 0 结束 |
| V2Ray v5 二进制+v5 JSON | v2ray test -c config.json -format jsonv5 | 命令无报错并以退出码 0 结束 |
| Xray 二进制+对应 JSON | xray run -test -c config.json | 命令无配置加载错误并以退出码 0 结束 |
不要把“Configuration OK”“Test succeeded”等提示文字当作跨版本固定输出;不同核心和构建版本的提示可能不同,最稳妥的判断是命令没有报错且退出码为 0。V2Ray 项目曾同时维护 v4 与 v5 配置格式,v5 配置示例和测试输出也使用过 jsonv5 参数,可参考 V2Fly 配置测试示例。
如果命令报错,先确认当前目录、配置文件路径、二进制名称和配置格式;再检查 JSON 括号、逗号、字段拼写,以及是否把 Xray 字段写进 V2Ray 配置。检查通过后再启动服务,不要用“网页打不开”反推配置文件一定正确。
端口、日志和系统排错步骤
- 确认端口是否监听。Windows 执行
netstat -ano | findstr :1080;Linux 执行sudo ss -lntup | grep ':1080';macOS 执行lsof -nP -iTCP:1080 -sTCP:LISTEN。把 1080 替换成配置或客户端设置页中的实际端口。 - 确认监听地址。
127.0.0.1只能本机访问;如果改成0.0.0.0,必须限制防火墙来源并启用认证,避免形成未授权的开放代理。 - 确认端口没有被旧进程占用。Windows 根据 PID 查看进程;Linux 和 macOS 根据命令输出确认监听程序。不要直接结束不明系统进程,优先停止旧客户端或换用空闲端口。
- 临时打开日志。将日志级别改为
debug,必要时配置 access 和 error 日志路径,重启后查看是否出现入站连接、目标地址、VMess 握手或远程 SOCKS 出站错误。排查结束后恢复较低日志级别。 - 查看服务状态。Linux 使用 systemd 时可执行
sudo systemctl restart v2ray,再执行sudo journalctl -u v2ray -n 100 --no-pager。实际 unit 名称可能不同,应以本机安装方式为准。V2Ray 安装文档也列出了 systemd 服务文件和重启操作,可参考 V2Ray 安装与服务管理说明。 - 验证是否真的经过代理。先执行 curl 测试,再对比启用代理前后的出口 IP;同时查看连接日志中是否命中了预期的入站和出站。只看网页能否打开,不能证明请求一定走了目标出口。
Windows 还要检查防火墙是否允许当前程序在对应网络配置文件下运行;macOS 需要检查系统是否阻止应用或网络扩展;Linux 则要确认配置文件、日志目录和 systemd 服务用户具有读取或写入权限。
UDP、DNS、IPv4 和 IPv6 的常见误区
- UDP 不是打开一个开关就结束。SOCKS 入站的
udp只表示是否接收 UDP 请求,应用、出站协议、系统防火墙和远程服务也必须支持 UDP。 ip字段只在 UDP 场景重点关注。它用于告诉核心本机可被客户端用于 UDP 关联的地址;如果机器位于 NAT 后方、拥有多个地址,错误的地址可能导致 UDP 失败。普通 TCP 网页测试可以先不依赖该字段。- DNS 解析位置会影响结果。
curl --socks5-hostname会让域名交给 SOCKS5 端处理;普通--socks5的解析行为可能不同。出现“IP 能通、域名不通”时,单独检查 DNS 和 IPv4/IPv6。 - 不要把 HTTP 和 SOCKS5 混用。应用必须支持并选择 SOCKS5;如果只支持 HTTP,就需要配置独立的 HTTP 入站,而不能直接填写 SOCKS5 端口。
- 公网监听要单独评估。SOCKS 入站不提供传输加密,优先使用回环地址;确需局域网使用时,限制来源、启用认证并只开放必要端口。
若问题集中在 VMess 握手,应核对远程服务器地址、端口、UUID、用户参数、传输方式和系统时间;若问题集中在远程 SOCKS5,应核对上游地址、端口、认证和是否允许当前来源连接。
常见问题
v2ray 的 SOCKS5 默认端口是 1080 吗?
不是固定值。1080 是常见示例端口,实际端口由 config.json 或客户端设置决定。v2rayN 使用自定义配置时还可能要求手工填写本地 SOCKS 端口,因此应以实际设置页和监听结果为准。
7890、7897 或 10808 能直接当作 V2Ray 的 SOCKS5 端口吗?
不能。端口数字本身无法判断核心和协议,7890、7897、10808 也不能直接视为 V2Ray 的固定默认值。请查看 V2Ray 配置中的 inbounds.port,或查看 v2rayN 的本地 SOCKS 设置。
本地 SOCKS5 配置好了,但浏览器仍打不开网页怎么办?
先确认浏览器选择的是 SOCKS5 而非 HTTP,再核对地址、端口和认证。随后用 curl --socks5-hostname 测试,检查端口监听、核心日志、远程出站参数以及 DNS、IPv4 和 IPv6。
V2Ray v4 和 v5 的配置检查命令一样吗?
不一样。v4 二进制检查 v4 JSON 可用 v2ray -test -config config.json;v5 二进制读取 v4 JSON 可用 v2ray test -c config.json,读取 v5 JSON 可使用 -format jsonv5。Xray 则使用 xray run -test -c config.json。最终以本机二进制的帮助信息和退出码为准。
远程 SOCKS5 需要用户名密码时怎么配置?
在 socks 出站的 servers 项目中加入 users 数组,并填写 user 与 pass;远程服务不需要认证时删除 users。应用端连接的是本地入站,不能把远程账号密码误填到其他协议的代理栏。
SOCKS5 的 UDP 为什么打开后仍然不可用?
udp: true 只表示入站接收 UDP 请求,还需要应用、出站协议、系统网络、NAT 和远程服务共同支持。若机器位于 NAT 后方或有多个地址,还要核对 socks 入站 settings 中的 ip 字段。
相关阅读
参考资料
- V2Fly VMess 基础配置(guide.v2fly.org)
- V2Fly 官方示例配置文件
- Xray 官方 SOCKS 入站配置说明
- v2rayN 官方界面与本地端口说明
- V2Fly 配置测试示例
- V2Ray 安装与服务管理说明