跳到主要内容

本示例将介绍如何在 Remnawave 面板中使用服务用户配置服务器路由。

服务器路由

部分用户可能遇到 Remnawave 自动清空服务器配置中 clients 数组的问题。这不是错误也不是 bug,面板会自动清空这些数组,因为面板某些功能的正常运行要求确保该数组中不含有多余的内容。

假设我们有两台服务器,分别称为 RU-001DE-001

用户将连接到 RU-001 服务器,我们将对流量进行 路由:示例中将 .ru 站点 直接 发送,其余所有流量发送到 DE-001 服务器。

为了完成此任务,我们需要创建一个 服务用户,通过该用户进行路由

为 DE-001 创建配置文件

进入 Config Profiles 部分,创建一个新配置文件,命名为 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": []
}
}

保存更新后的配置。

进入 Internal Squad 部分(点击右上角的加号创建新小组)。在该小组中,仅启用从 Bridge Profile 配置文件中新创建的入站 BRIDGE_DE_IN

同时,请确保在节点卡片(本例中为 DE-001 节点)中也启用此入站和配置文件。

创建服务用户

进入 Users 部分,创建名为 bridge_user_001 的用户。确保该用户没有流量限制,并将订阅到期日期设置在 2099 年左右。(我们不希望面板因达到流量限制或订阅到期而停用该用户。

不要忘记为该用户启用小组——本例中启用上面创建的小组。

用户成功创建后,打开其卡片,在菜单(More Actions 按钮)中点击 Detailed Info 部分。

在该部分向下滚动到最底部,根据入站类型复制相关信息。

协议面板中的名称
ShadowsocksSS Password
VLESSVLESS UUID
TrojanTrojan Password

最终,您应当拿到一个连接密码。

配置公共配置文件

您很可能已经拥有这样的配置文件,用户通过它连接。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 OWN VALUE!",
"show": false,
"xver": 0,
"shortIds": [""],
"privateKey": "USE OWN KEY!",
"serverNames": ["REPLACE WITH 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" }
]
}
}

我们最初的任务是:用户通过 VLESS 协议连接到 RU-001 服务器,然后我们通过路由重定向流量。

Outbound

首先需要构建 outbound

{
"tag": "SS_OUTBOUND_TO_DE",
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "ADDRESS OF DE-001",
"password": "PASSWORD FROM PREVIOUS STEP",
"port": 9999,
"level": 0,
"method": "chacha20-ietf-poly1305"
}
]
}
}
填写内容
address指向您服务器的 IP 或域名,例如 DE-001 服务器的 IP 地址
port入站端口,本例中为 BRIDGE_DE_IN 入站的端口
password用于连接的用户密码(根据协议不同,值可能有所不同,见上文)

对于 Shadowsocks — 不要使用 chacha20-ietf-poly1305 以外的任何方法,因为 Remnawave 仅支持此方法。

路由

将所有流量发送到上述 outbound 的规则示例。

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

将 RU 站点直接发送(从 RU-001 节点直接出口),其余发送到 DE-001 的规则示例。

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

组合完整配置,如下所示。

{
"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 OWN VALUE!",
"show": false,
"xver": 0,
"shortIds": [""],
"privateKey": "USE OWN KEY!",
"serverNames": ["REPLACE WITH OWN VALUES!"]
}
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "DIRECT" },
{ "protocol": "blackhole", "tag": "BLOCK" },
{
"tag": "SS_OUTBOUND_TO_DE",
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "ADDRESS OF DE-001",
"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"
}
]
}
}

我们将 outbound SS_OUTBOUND_TO_DE 添加到 outbounds 数组,并将规则添加到 routing 对象内的 rules 数组。

Xray 中的规则按优先级顺序工作。我们的规则大致可以解释如下:

  1. 如果 IP 地址属于 geoip:privateBLOCK(发送到 BLOCK outbound,它是 blackhole,即被封锁)。
  2. 如果域名属于 geosite:private 类别 — 相同处理。
  3. bittorrent 流量同理。
  4. 如果 IP 地址属于 geoip:ru — 发送到 DIRECT Outbound,流量从 RU-001 服务器出口。
  5. 如果域名属于 geosite:category-ru 类别 — 同样发送到 DIRECT
  6. 如果流量来自入站 PUBLIC_RU_INBOUND — 发送到 outbound SS_OUTBOUND_TO_DE(然后转发到 DE-001 服务器)。

结论

在本示例中,我们得到了如下方案:

  • 用户使用 VLESS 协议连接到 RU-001 服务器
  • 流量遵循以下规则:
    • 俄罗斯站点(或 IP)— 直接出口(DIRECT)
    • 所有其他流量 — 通过 shadowsocks 协议发送到另一台服务器 DE-001

也可以使用 VLESS 作为中转协议,主要区别仅在于 outbound 的配置。