outbounds-routing.mdx 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. ---
  2. title: 出站与路由
  3. description: 在 3x-ui 中调整出口流量——WARP、NordVPN、PIA WireGuard、出站订阅(服务器池)、路由规则以及负载均衡器。
  4. icon: Route
  5. ---
  6. 入站负责接受客户端;**出站**则决定客户端的流量接下来发往何处。
  7. 3x-ui 可以让流量经由 Cloudflare WARP、NordVPN、Private Internet Access
  8. (WireGuard),或从订阅导入的任意出站池转发,
  9. 并通过路由规则和均衡器在它们之间进行选择。
  10. ## 编辑出站与路由
  11. 出站、路由规则、均衡器、DNS 和日志全部都位于 **Xray
  12. 配置**中(即你在 Xray 设置下编辑的配置模板)。这里没有单独的逐条规则界面——你直接编辑
  13. JSON,面板随后会重载 Xray。面板同时还提供**出站连通性测试**以及**路由测试**(向正在运行的核心查询某个目标地址将会使用哪个出站)。
  14. ## 构建出站
  15. 每个出站都是一个 JSON 对象,最多包含四个部分:一个 **`tag`**(供路由规则和均衡器引用)、
  16. 一个 **`protocol`**、协议专属的 **`settings`**,以及——对于代理协议而言——必须与远程入站的
  17. 传输方式和安全设置相匹配的 **`streamSettings`**。有两个出站几乎总是会存在:
  18. - **`freedom`** 会将流量直接发往其目标地址——这是默认出口。
  19. 可选地设置一个 `domainStrategy`(例如 `UseIP`)来控制主机名的解析方式。
  20. - **`blackhole`** 会丢弃流量。将不需要的目标地址(广告、种子下载)路由到这里。
  21. ```json title="freedom + blackhole"
  22. {
  23. "outbounds": [
  24. { "tag": "direct", "protocol": "freedom", "settings": {} },
  25. { "tag": "block", "protocol": "blackhole", "settings": {} }
  26. ]
  27. }
  28. ```
  29. **代理**出站(VLESS、VMess、Trojan、Shadowsocks)会转发到另一台
  30. 服务器——便于进行链式代理或将部分流量发往境外。注意 3x-ui 所使用的各种线路
  31. 结构:**VLESS 采用扁平形式**(`address`/`port`/`id`/`flow`/
  32. `encryption`),**VMess 使用 `settings.vnext[]`**,而 **Trojan/Shadowsocks 使用
  33. `settings.servers[]`**。`streamSettings` 必须与目标的
  34. [传输方式和安全设置](/docs/config/transports)保持一致。
  35. 在下方组装任意出站,并将生成的 JSON 粘贴到 **Xray 设置 → Outbounds** 中:
  36. <OutboundGenerator />
  37. ## Cloudflare WARP
  38. WARP 让你的服务器经由 Cloudflare 的网络出口。3x-ui 可以为你注册一个
  39. WARP 账户,并将其接入一个标签为 **`warp`** 的 WireGuard 出站:
  40. <Steps>
  41. <Step>
  42. ### 添加一个标签为 `warp` 的出站
  43. 在你的 Xray 配置中创建一个标签为 `warp` 的 WireGuard 出站。
  44. </Step>
  45. <Step>
  46. ### 注册 WARP
  47. 在面板的 WARP 控制项中注册一个账户。3x-ui 会自动填入该出站的
  48. 密钥、地址、保留字节以及对端端点。
  49. </Step>
  50. <Step>
  51. ### (可选)自动轮换 IP
  52. 设置一个 WARP 更新间隔(以**天**为单位),即可定期轮换 WARP IP。也可以
  53. 应用一个免费许可证。
  54. </Step>
  55. </Steps>
  56. 通过路由规则,将你希望的流量(例如特定域名)路由到 `warp` 出站。
  57. ## NordVPN
  58. 3x-ui 可以根据访问令牌获取 NordVPN(NordLynx/WireGuard)凭据(或
  59. 直接接受一个私钥),并列出国家/服务器,从而让你构建一个
  60. NordVPN 出站。
  61. ## PIA WireGuard
  62. 3x-ui 可以用 PIA 用户名和密码登录,从已验签的服务器列表里选择国家/区域/服务器,
  63. 并生成 WireGuard 出站。打开 **Xray → 出站 → 更多 → PIA**,登录后选服务器并添加出站。
  64. 可以添加多台服务器(每个 hostname 一条出站)。标签为 `pia-<region>-<server>`(例如
  65. `pia-us-east-useast1`)。添加或对该行 **Reset** 会向该服务器的 PIA `/addKey` 注册密钥。
  66. 同一 hostname 不能添加两次。登出只清除保存的 token;删除出站请在出站列表里操作。
  67. Reset 或删除出站不会撤销 PIA 账户侧的 WireGuard peer。
  68. 密码不落库。PIA API token 与节点 API token 共用 `NODE_TOKEN_ENCRYPTION`。
  69. 若在未重新登录 PIA 的情况下淘汰旧的 `XUI_NODE_TOKEN_KEY`,Add/Reset 会失败,直到再次登录。
  70. 对端 `allowedIPs` 仅为 `0.0.0.0/0`(IPv4)。
  71. ## 出站订阅(服务器池)
  72. **出站订阅**会导入一个远程分享链接订阅,并将其中的服务器作为**出站**注入到正在运行的
  73. Xray 配置中——而不会改动你已保存的模板。这是订阅一*池*服务器的推荐方式。
  74. | 字段 | 默认值 | 含义 |
  75. | ---------------- | ------- | -------------------------------------------------------------- |
  76. | `url` | — | 远程订阅 URL(受 SSRF 防护)。 |
  77. | `tagPrefix` | auto | 生成的出站标签的前缀(例如 `hk-`);留空 = `subN-`。 |
  78. | `updateInterval` | `600` | 刷新间隔,以**秒**为单位。 |
  79. | `prepend` | `false` | 将这些出站放在你的手动出站之前。 |
  80. | `priority` | `0` | 合并顺序(数值越小越靠前)。 |
  81. 导入的出站会获得**稳定的标签**:同一台服务器在多次刷新之间始终保持同一个标签,
  82. 因此精确标签的路由/均衡器选择器会保持固定——而前缀/通配符选择器(例如 `hk-*`)
  83. 则会随着服务器池的变化自动纳入新的服务器。支持的链接协议:`vmess`、`vless`、`trojan`、`ss`、
  84. `hysteria2`(`hy2`)以及 `wireguard`(`wg`)。面板会按定时器刷新已启用的
  85. 订阅,并在内容发生变化时重载 Xray。
  86. ## 路由规则
  87. **路由规则**决定每个连接使用哪个出站(或均衡器)。每条
  88. 规则都是一个 `field` 类型的匹配器:设置 `domain`、`ip`、`port`、`network`、
  89. `protocol`、`inboundTag`、`sourceIP` 等中的任意项,并将其指向一个 **`outboundTag`** 或
  90. **`balancerTag`**。规则会**自上而下**逐条求值——**第一个匹配者胜出**,因此请
  91. 将具体的规则放在通用规则之上。
  92. ```json title="route ads to blackhole, private IPs direct"
  93. {
  94. "routing": {
  95. "domainStrategy": "IPIfNonMatch",
  96. "rules": [
  97. { "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "block" },
  98. { "type": "field", "ip": ["geoip:private"], "outboundTag": "direct" }
  99. ]
  100. }
  101. }
  102. ```
  103. ## 均衡器
  104. **均衡器**通过一个**选择器**(标签前缀,包括来自出站订阅的通配符池)将出站分组,
  105. 并以某种**策略**在它们之间分散流量或进行故障转移:
  106. | 策略 | 选取…… | 是否需要监视器 |
  107. | ------------- | ----------------------------------------------- | ------------------------ |
  108. | `random` | 每个连接随机选取一个成员 | 否 |
  109. | `roundRobin` | 轮流选取各个成员 | 否 |
  110. | `leastPing` | 延迟最低的成员 | **`observatory`** |
  111. | `leastLoad` | 按采样负载最稳定的成员 | **`burstObservatory`** |
  112. 通过 `balancerTag` 从规则中引用某个均衡器。`leastPing` 和 `leastLoad`
  113. 需要一个健康监视器,Xray 会将其放置在配置的**顶层**
  114. (`observatory` / `burstObservatory`,**而不是**放在 `routing` 内部)。面板可以
  115. 报告均衡器状态,并允许你为测试目的将某个均衡器**覆盖**为特定的出站。
  116. 在此构建路由块——规则、均衡器以及配套的 observatory:
  117. <RoutingBuilder />
  118. <Callout type="warn">
  119. 访问外部服务的出站在获取时会受到 SSRF 防护——默认情况下,私有/内部地址会被
  120. 阻止,除非你按来源明确允许它们。
  121. </Callout>