本示例将介绍如何在 Remnawave 面板中使用服务用户配置服务器路由。
服务器路由
部分用户可能遇到 Remnawave 自动清空服务器配置中 clients 数组的问题。这不是错误也不是 bug,面板会自动清空这些数组,因为面板某些功能的正常运行要求确保该数组中不含有多余的内容。
假设我们有两台服务器,分别称为 RU-001 和 DE-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 部分。
在该部分向下滚动到最底部,根据入站类型复制相关信息。
| 协议 | 面板中的名称 |
|---|---|
| Shadowsocks | SS Password |
| VLESS | VLESS UUID |
| Trojan | Trojan 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 中的规则按优先级顺序工作。我们的规则大致可以解释如下:
- 如果 IP 地址属于
geoip:private— BLOCK(发送到 BLOCK outbound,它是 blackhole,即被封锁)。 - 如果域名属于
geosite:private类别 — 相同处理。 bittorrent流量同理。- 如果 IP 地址属于
geoip:ru— 发送到DIRECTOutbound,流量从RU-001服务器出口。 - 如果域名属于
geosite:category-ru类别 — 同样发送到DIRECT。 - 如果流量来自入站
PUBLIC_RU_INBOUND— 发送到 outboundSS_OUTBOUND_TO_DE(然后转发到DE-001服务器)。
结论
在本示例中,我们得到了如下方案:
- 用户使用
VLESS协议连接到RU-001服务器 - 流量遵循以下规则:
- 俄罗斯站点(或 IP)— 直接出口(DIRECT)
- 所有其他流量 — 通过
shadowsocks协议发送到另一台服务器DE-001
也可以使用 VLESS 作为中转协议,主要区别仅在于 outbound 的配置。