服务端路由
本指南仅作为服务端路由的演示。请勿认为复制这些示例就能在生产环境中产生完全可用的配置。它并未涵盖 Xray-core 的所有功能,也不保证在每种环境下都能完美运行。
有关配置语法和行为的完整详情,请参阅 Xray 官方文档。
一些用户可能注意到 Remnawave 会自动清空节点配置中的 clients 数组。这不是 bug,而是预期行为。Remnawave 清空它是为了确保只保留某些功能正常运行所需的配置。
在本指南中,我们将使用两个节点 RU 和 DE 来配置服务端流量路由。用户将连接到 RU 节点。从那里,流量将按如下方式路由:
- 到
.ru网站的流量将直接通过RU节点代理。 - 所有其他流量将通过
DE节点路由。
为此,我们将创建一个_服务用户_来实现流量路由。
结果,流量的"流向"可能如下所示:
- 用户打开
google.com。 - 请求首先到达
RU节点。 RU节点应用路由规则。由于google.com不是.ru域名,流量被路由到DE节点。DE节点完成与google.com的连接。
这种类型的服务端路由配置通常被称为"桥接"。
为 DE 创建配置文件
导航到配置文件部分,创建新的配置文件,例如 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": []
}
}
创建服务用户
为了让我们的桥接工作,我们需要创建一个用户。我们称之为 bridge_user。
由于这是服务用户,我们显然不希望其订阅过期或受到流量使用限制。将 Data Limit 设置为 0,将 Expiry Date 设置为 2099 年。
接下来,为此用户分配适当的小队。在我们的例子中,是 Bridge Squad。
服务用户创建后,我们需要获取其密码。打开用户卡片,点击 More Actions 按钮,然后点击 Detailed Info。在那里您应该看到 Connection Information 部分。
根据入站的协议(在我们的例子中是 Shadowsocks),复制适当的值:
| 协议 | 连接信息值 |
|---|---|
| Trojan | Trojan 密码 |
| VLESS | VLESS UUID |
| Shadowsocks | SS 密码 |
配置公共配置文件
很可能您已经有了用户连接的配置文件。如果没有,请参阅此指南。
在此步骤中,我们不关心 "inbounds" — 而是将修改该配置文件的 "outbounds"、"routing" 和 "rules" 数组。
{
"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 数组。
{
"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 节点。
{
"ip": ["geoip:ru"],
"outboundTag": "DIRECT"
},
{
"domain": ["geosite:category-ru"],
"outboundTag": "DIRECT"
}
以下是一个将_所有_流量代理到 SS_OUTBOUND_TO_DE 出站的规则示例。
{
"inboundTag": ["PUBLIC_RU_INBOUND"],
"outboundTag": "SS_OUTBOUND_TO_DE"
}
完整的公共配置文件可能如下所示:
{
"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 路由规则按顺序从上到下处理。
以下是我们示例中规则的工作方式:
-
私有 IP (
geoip:private) →BLOCK
匹配此规则的流量被发送到BLOCK出站,这是blackhole协议(完全阻断)。 -
私有域名 (
geosite:private) →BLOCK
与上述相同,但针对域名。 -
BitTorrent 流量 (
bittorrent) →BLOCK
所有 BitTorrent 流量被阻断。 -
俄罗斯 IP (
geoip:ru) →DIRECT
匹配此规则的流量被发送到DIRECT出站,这是freedom协议(RU节点充当出口节点)。 -
俄罗斯域名 (
geosite:category-ru) →DIRECT
到俄罗斯域名的流量也直接从 RU 节点出去。 -
无规则匹配(其余流量)→
SS_OUTBOUND_TO_DE
到达PUBLIC_RU_INBOUND的任何剩余流量都通过我们之前创建的Shadowsocks出站路由到DE节点。
您不必使用 Shadowsocks 作为中转协议 — 您可以改用 VLESS。只需确保相应地更新您的配置即可。