跳到主要内容

服务端路由

仅供演示 | 不适用于生产环境

本指南仅作为服务端路由的演示。请勿认为复制这些示例就能在生产环境中产生完全可用的配置。它并未涵盖 Xray-core 的所有功能,也不保证在每种环境下都能完美运行。

有关配置语法和行为的完整详情,请参阅 Xray 官方文档

一些用户可能注意到 Remnawave 会自动清空节点配置中的 clients 数组。这不是 bug,而是预期行为。Remnawave 清空它是为了确保只保留某些功能正常运行所需的配置。


在本指南中,我们将使用两个节点 RUDE 来配置服务端流量路由。用户将连接到 RU 节点。从那里,流量将按如下方式路由:

  • .ru 网站的流量将直接通过 RU 节点代理。
  • 所有其他流量将通过 DE 节点路由。

为此,我们将创建一个_服务用户_来实现流量路由。

结果,流量的"流向"可能如下所示:

  1. 用户打开 google.com
  2. 请求首先到达 RU 节点。
  3. RU 节点应用路由规则。由于 google.com 不是 .ru 域名,流量被路由到 DE 节点。
  4. DE 节点完成与 google.com 的连接。

这种类型的服务端路由配置通常被称为"桥接"。

为 DE 创建配置文件

导航到配置文件部分,创建新的配置文件,例如 DE Bridge Profile

DE Bridge Profile
{
"log": {
"loglevel": "warning"
},
"dns": {},
"inbounds": [
{
"tag": "BRIDGE_DE_IN",
"port": 9999,
"listen": "0.0.0.0",
"protocol": "shadowsocks",
"settings": {
"clients": [],
"network": "tcp,udp"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls", "quic"]
}
}
],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
}
],
"routing": {
"rules": []
}
}
不要忘记分配配置文件并创建内部小队

将新创建的配置文件分配DE 节点。选择 BRIDGE_DE_IN 入站。


创建新的内部小队,我们称之为 Bridge Squad。启用我们之前创建的入站 — BRIDGE_DE_IN

创建服务用户

为了让我们的桥接工作,我们需要创建一个用户。我们称之为 bridge_user

不要忘记取消流量限制并延长到期日期

由于这是服务用户,我们显然不希望其订阅过期或受到流量使用限制。将 Data Limit 设置为 0,将 Expiry Date 设置为 2099 年

接下来,为此用户分配适当的小队。在我们的例子中,是 Bridge Squad

服务用户创建后,我们需要获取其密码。打开用户卡片,点击 More Actions 按钮,然后点击 Detailed Info。在那里您应该看到 Connection Information 部分。

根据入站的协议(在我们的例子中是 Shadowsocks),复制适当的值:

协议连接信息值
TrojanTrojan 密码
VLESSVLESS UUID
ShadowsocksSS 密码

配置公共配置文件

很可能您已经有了用户连接的配置文件。如果没有,请参阅此指南

在此步骤中,我们不关心 "inbounds" — 而是将修改该配置文件的 "outbounds""routing""rules" 数组。

Public Profile Example
{
"log": {
"loglevel": "none"
},
"inbounds": [
{
"tag": "PUBLIC_RU_INBOUND",
"port": 443,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls", "quic"]
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"target": "USE YOUR OWN VALUE!",
"show": false,
"xver": 0,
"shortIds": [""],
"privateKey": "USE YOUR OWN KEY!",
"serverNames": ["USE YOUR OWN VALUES!"]
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "DIRECT"
},
{
"protocol": "blackhole",
"tag": "BLOCK"
}
],
"routing": {
"rules": [
{
"ip": ["geoip:private"],
"outboundTag": "BLOCK"
},
{
"domain": ["geosite:private"],
"outboundTag": "BLOCK"
},
{
"protocol": ["bittorrent"],
"outboundTag": "BLOCK"
}
]
}
}

出站

首先我们需要修改 outbounds 数组。

outbounds
{
"tag": "SS_OUTBOUND_TO_DE",
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "DE NODE ADDRESS",
"password": "PASSWORD FROM PREVIOUS STEP",
"port": 9999,
"level": 0,
"method": "chacha20-ietf-poly1305"
}
]
}
}
字段
address您的 DE 节点服务器的 IP 地址或域名。
port入站端口,在我们的例子中是 BRIDGE_DE_IN 的端口。
password服务用户的密码。取决于您使用的协议;请参阅上一步骤。
method加密方式。对于 Remnawave 中的 Shadowsocks,始终使用 chacha20-ietf-poly1305

路由和规则

接下来,根据您的需求修改路由规则。

以下是一个规则示例,使 RU 节点成为俄罗斯 IP 和网站的出口节点,而其余流量则发送到 DE 节点。

rules
{
"ip": ["geoip:ru"],
"outboundTag": "DIRECT"
},
{
"domain": ["geosite:category-ru"],
"outboundTag": "DIRECT"
}

以下是一个将_所有_流量代理到 SS_OUTBOUND_TO_DE 出站的规则示例。

rules
{
"inboundTag": ["PUBLIC_RU_INBOUND"],
"outboundTag": "SS_OUTBOUND_TO_DE"
}

完整的公共配置文件可能如下所示:

Complete Public Config Profile Example
{
"log": {
"loglevel": "none"
},
"inbounds": [
{
"tag": "PUBLIC_RU_INBOUND",
"port": 443,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": {
"clients": [],
"decryption": "none"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls", "quic"]
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"target": "USE YOUR OWN VALUE!",
"show": false,
"xver": 0,
"shortIds": [""],
"privateKey": "USE YOUR OWN KEY!",
"serverNames": ["USE YOUR OWN VALUES!"]
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "DIRECT"
},
{
"protocol": "blackhole",
"tag": "BLOCK"
},
{
"tag": "SS_OUTBOUND_TO_DE",
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "DE NODE ADDRESS",
"password": "PASSWORD FROM PREVIOUS STEP",
"port": 9999,
"level": 0,
"method": "chacha20-ietf-poly1305"
}
]
}
}
],
"routing": {
"rules": [
{
"ip": ["geoip:private"],
"outboundTag": "BLOCK"
},
{
"domain": ["geosite:private"],
"outboundTag": "BLOCK"
},
{
"protocol": ["bittorrent"],
"outboundTag": "BLOCK"
},
{
"ip": ["geoip:ru"],
"outboundTag": "DIRECT"
},
{
"domain": ["geosite:category-ru"],
"outboundTag": "DIRECT"
},
{
"inboundTag": ["PUBLIC_RU_INBOUND"],
"outboundTag": "SS_OUTBOUND_TO_DE"
}
]
}
}
提示

Xray 路由规则按顺序从上到下处理。
以下是我们示例中规则的工作方式:

  1. 私有 IP (geoip:private) → BLOCK
    匹配此规则的流量被发送到 BLOCK 出站,这是 blackhole 协议(完全阻断)。

  2. 私有域名 (geosite:private) → BLOCK
    与上述相同,但针对域名。

  3. BitTorrent 流量 (bittorrent) → BLOCK
    所有 BitTorrent 流量被阻断。

  4. 俄罗斯 IP (geoip:ru) → DIRECT
    匹配此规则的流量被发送到 DIRECT 出站,这是 freedom 协议(RU 节点充当出口节点)。

  5. 俄罗斯域名 (geosite:category-ru) → DIRECT
    到俄罗斯域名的流量也直接从 RU 节点出去。

  6. 无规则匹配(其余流量)→ SS_OUTBOUND_TO_DE
    到达 PUBLIC_RU_INBOUND 的任何剩余流量都通过我们之前创建的 Shadowsocks 出站路由到 DE 节点。


您不必使用 Shadowsocks 作为中转协议 — 您可以改用 VLESS。只需确保相应地更新您的配置即可。