Xray-core 是一个功能强大且高度可扩展的网络代理工具集,它允许用户通过灵活的 JSON 配置文件构建复杂的网络流量转发、代理和过滤系统。本教程旨在引导初学者和中级用户,逐步掌握 Xray-core 的核心配置,特别是其灵魂所在——入站(inbounds)和出站(outbounds)处理器的设置。
无论您是想搭建个人专属的私密网络通道,还是需要为复杂的业务场景定制流量规则,理解 Xray-core 的配置逻辑都是第一步。我们将从基础的配置文件结构讲起,深入探讨 VLESS、VMess、Trojan 等主流协议的配置方法,并最终解锁路由规则和多文件配置等高级技巧。
Xray-Core 基础:JSON 配置文件结构
Xray-core 的所有行为都由一个名为 `config.json` 的文件定义。这个文件遵循严格的 JSON 格式,其中包含了日志、API、DNS、路由以及核心的入站和出站设置。一个最基础的配置文件结构如下所示:
{
"log": {
"loglevel": "warning"
},
"inbounds": [
// ... 入站连接配置
],
"outbounds": [
// ... 出站连接配置
],
"routing": {
"rules": [
// ... 路由规则
]
}
}顶级字段解析
- log: 用于配置日志记录。`loglevel` 可以设置为 `debug`, `info`, `warning`, `error`, 或 `none`,是排查问题的关键。
- inbounds: 一个数组,定义了 Xray-core 如何接收来自客户端或其他程序的连接。每个元素都是一个入站处理器配置。
- outbounds: 也是一个数组,定义了 Xray-core 如何将接收到的数据发送出去。它可以是直接连接到目标网站,也可以是连接到另一个代理服务器。
- routing: Xray-core 的“大脑”,它根据预设的规则决定将某个入站连接的流量交由哪个出站处理器来处理。
- dns (可选): 配置内置的 DNS 服务器,可以有效防止 DNS 污染,并实现基于域名的路由。
- api (可选): 开启 API 服务,允许通过 gRPC 接口动态管理 Xray-core,例如添加/删除用户、修改配置等。
配置入站处理器 (Inbounds)
入站处理器是 Xray-core 的门户,负责监听指定端口,并使用特定协议接收数据。您可以配置多个入站处理器,以支持不同的协议或端口。
示例 1: 配置 VLESS 入站
VLESS 是一种性能卓越、配置简洁的协议。它通常与 TLS 结合使用,以获得更好的安全性和伪装效果。以下是一个典型的 VLESS + TCP + TLS 入站配置:
{
"protocol": "vless",
"port": 443,
"listen": "0.0.0.0",
"tag": "vless-in",
"settings": {
"clients": [
{
"id": "your-uuid-here", // 使用 'xray uuid' 命令生成
"flow": "xtls-rprx-direct"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "your.domain.com",
"certificates": [
{
"certificateFile": "/path/to/your/fullchain.cer",
"keyFile": "/path/to/your/private.key"
}
]
}
}
}关键字段说明:`port` 是监听端口,`id` 是用户唯一标识符(UUID),`streamSettings` 定义了传输层配置,其中 `security` 设置为 `tls` 并提供证书路径是实现加密和伪装的关键。
示例 2: 配置 VMess 入站
VMess 是 V2Ray 的原生协议,功能丰富,但配置相对复杂。它同样支持多种传输方式,如 TCP、mKCP、WebSocket 等。
{
"protocol": "vmess",
"port": 10086,
"listen": "0.0.0.0",
"tag": "vmess-in",
"settings": {
"clients": [
{
"id": "your-uuid-here",
"alterId": 0 // 建议设置为 0 以兼容新客户端
}
]
},
"streamSettings": {
"network": "ws", // 使用 WebSocket
"wsSettings": {
"path": "/your-secret-path"
}
}
}此示例使用 WebSocket (`ws`) 作为传输方式,可以与 Nginx 等 Web 服务器配合,将代理流量伪装成正常的网页访问。`alterId` 是一个历史遗留字段,现在通常建议设为 0。
示例 3: 配置 Trojan 入站
Trojan 协议通过模仿 HTTPS 流量,提供了极佳的伪装性。其配置要求必须使用 TLS。
{
"protocol": "trojan",
"port": 443,
"listen": "0.0.0.0",
"tag": "trojan-in",
"settings": {
"clients": [
{
"password": "your-strong-password"
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "your.domain.com",
"certificates": [
{
"certificateFile": "/path/to/your/fullchain.cer",
"keyFile": "/path/to/your/private.key"
}
]
}
}
}Trojan 的用户认证方式是 `password`,而不是 UUID。同样,正确的 TLS 证书配置是使其正常工作的先决条件。
配置出站处理器 (Outbounds)
出站处理器决定了流量的去向。Xray-core 内置了两个特殊的出站:`direct`(直接连接)和 `block`(阻止连接)。它们是路由规则的基础。
默认出站:`direct` 和 `block`
通常,您的 `outbounds` 数组的第一个元素应该是默认的出站处理器。`direct` 用于将流量直接发送到目标地址,而 `block` 则用于丢弃流量(例如广告)。
// 直接连接出站 (通常是第一个)
{
"protocol": "freedom",
"tag": "direct"
}// 阻止连接出站
{
"protocol": "blackhole",
"tag": "block"
}链式代理:将流量发送到另一个代理服务器
出站处理器也可以配置为客户端,连接到另一台运行 Xray-core 或其他代理软件的服务器。这种配置被称为“链式代理”。其结构与客户端的配置文件非常相似。
// 连接到远程 VLESS 服务器的出站
{
"protocol": "vless",
"tag": "proxy-out",
"settings": {
"vnext": [
{
"address": "remote.server.com",
"port": 443,
"users": [
{
"id": "remote-server-uuid",
"encryption": "none",
"flow": "xtls-rprx-direct"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "remote.server.com"
}
}
}这个出站配置了一个 VLESS 客户端。当路由规则将流量指向 `proxy-out` 这个 `tag` 时,Xray-core 就会将流量通过这个配置转发出去。
路由规则 (Routing) 的强大功能
路由是 Xray-core 的精髓。它通过 `routing.rules` 数组中的一系列规则来决定数据包的命运。规则按顺序进行匹配,一旦匹配成功,就会将流量发送到规则指定的 `outboundTag`。
路由规则匹配条件
您可以使用多种条件来构建灵活的路由规则:
- `inboundTag`: 匹配来自特定入站的流量。
- `domain`: 匹配目标域名,支持关键词、正则表达式和预定义的 `geosite` 列表。
- `ip`: 匹配目标 IP 地址,支持 CIDR 格式和预定义的 `geoip` 列表。
- `port`: 匹配目标端口。
- `network`: 匹配网络类型 (tcp, udp)。
- `protocol`: 匹配应用层协议(http, tls, bittorrent)。
路由规则示例:分流国内外流量
这是最常见的应用场景。利用 `geoip` 和 `geosite` 规则文件,可以轻松实现对中国大陆流量直连,海外流量走代理。
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"ip": ["geoip:private"], // 私有地址直连
"outboundTag": "direct"
},
{
"type": "field",
"domain": ["geosite:cn"], // 国内域名直连
"outboundTag": "direct"
},
{
"type": 'field',
"ip": ["geoip:cn"], // 国内 IP 直连
"outboundTag": "direct"
},
{
"type": "field",
"port": "0-65535", // 剩余所有流量走代理
"outboundTag": "proxy-out"
}
]
}要使此配置生效,您需要下载 `geoip.dat` 和 `geosite.dat` 文件,并将其与 Xray 可执行文件放在同一目录。这些文件包含了大量的 IP 和域名数据。
访问 domain-list-community 项目获取最新的 geosite 数据 →高级技巧:多文件配置与 Override
当配置文件变得庞大而复杂时,将其拆分为多个小文件可以极大地提高可维护性。Xray-core 支持通过 `-confdir` 命令行参数加载一个目录下的所有 `.json` 文件。
默认情况下,Xray-core 会按文件名顺序加载这些文件,并将它们深度合并。但是,这种合并有时不够灵活。例如,你无法轻易地向一个已定义的数组(如 `inbounds`)中添加新元素,而只能完全覆盖它。
使用 `override` 精确修改配置
为了解决这个问题,Xray-core 引入了一个非标准的、但极其强大的 `override` 机制。通过在一个文件中定义 `override` 字段,您可以精确地修改在其他文件中已加载的配置项。这是一个鲜为人知但非常实用的高级功能。
假设您的配置目录结构如下:
- config/
- ├── 00_log.json
- ├── 01_inbounds.json
- └── 99_override.json
`01_inbounds.json` 定义了一个 VLESS 入站,但只有一个用户。现在,我们想在不修改 `01_inbounds.json` 的情况下,动态添加一个新用户。这可以通过 `99_override.json` 实现:
// 99_override.json
{
"override": {
"inbounds": {
"0": { // '0' 指的是 inbounds 数组的第一个元素
"settings": {
"clients": [
// 这里会追加到原有的 clients 数组中,而不是覆盖
{
"id": "another-uuid-for-user-2",
"flow": "xtls-rprx-direct"
}
]
}
}
}
}
}通过将修改内容包裹在 `override` 对象中,Xray-core 会智能地将新用户追加到 `inbounds[0].settings.clients` 数组中,而不是替换整个数组。这种模块化的配置方式使得管理和自动化部署变得异常简单和安全。
实践与安全
配置完成后,请务必遵循安全最佳实践,以确保您的网络环境稳固可靠:
- 始终使用 TLS 加密流量,并确保证书有效。
- 为每个用户生成强壮且唯一的 UUID 或密码。
- 定期更新 Xray-core 到最新版本,以获取安全补丁和性能改进。
- 将日志级别设置为 `warning`,并定期检查日志中是否有异常活动。
- 使用复杂的 WebSocket 路径或 gRPC serviceName 增加被探测的难度。
对于需要管理大量代理IP或进行复杂网络操作的用户,手动配置可能非常繁琐。专业的代理IP服务,如 IPOCTO,提供了稳定可靠的节点,可以与 Xray-core 无缝集成,作为高质量的出站选择。而对于需要管理多个浏览器环境以进行社交媒体营销或电商运营的用户,AntidetectBrowser 结合 Xray-core 可以为每个浏览器配置文件设置独立的代理,极大地提高了账户的安全性与隔离性。
常见问题解答 (FAQ)
VLESS, VMess, Trojan 我该选哪个?
选择取决于您的需求。VLESS 性能最好,配置简单,是目前的主流推荐。VMess 功能最全,兼容性好,但性能稍逊。Trojan 伪装性极好,因为它完全模仿 HTTPS 流量,但在某些情况下特征可能被识别。对于大多数用户,VLESS + TCP + TLS 是一个稳定、高效且安全的选择。
如何生成 UUID?
如果您在服务器上安装了 Xray-core,可以直接在命令行中运行 `xray uuid` 来生成一个随机的 UUID。您也可以使用在线的 UUID 生成工具。
为什么我的配置不生效?
首先,检查 JSON 配置文件语法是否正确。您可以使用命令 `xray -test -c /path/to/config.json` 来测试配置文件。其次,检查 Xray-core 的日志输出,将 `loglevel` 设为 `info` 或 `debug` 可以看到详细的连接信息。最后,请确保服务器防火墙(如 ufw, firewalld)以及云服务商的安全组规则已经放行了您在入站中设置的端口。
我可以在一个 Xray-core 实例上同时运行多个入站协议吗?
当然可以。您只需在 `inbounds` 数组中添加多个配置对象即可。例如,您可以同时在 443 端口上运行 VLESS,在 8080 端口上运行 VMess over WebSocket。只要确保它们的监听端口不冲突,并且每个配置都有一个唯一的 `tag` 以便路由规则区分。
`geosite` 和 `geoip` 文件需要手动更新吗?
是的,为了保证路由规则的准确性,建议定期更新这两个文件。您可以从 `v2fly/geoip` 和 `v2fly/domain-list-community` 等 GitHub 项目下载最新版本。一些一键安装脚本或管理面板会自动处理更新任务。
总结
通过本教程,您应该已经对 Xray-core 的配置有了系统性的了解。从核心的 `inbounds` 和 `outbounds`,到强大的 `routing` 规则,再到灵活的 `override` 机制,Xray-core 为构建定制化网络工具提供了无限可能。它的强大之处在于其灵活性和高性能,允许用户根据自身需求精确控制每一条数据流。
最好的学习方式是实践。我们鼓励您动手尝试不同的协议和路由组合,解决实际遇到的网络问题。当遇到更复杂的场景时,不要忘记查阅
Xray-core 官方文档,那里有最全面和权威的信息。祝您探索愉快!