跳至主要内容

伺服器端路由

僅供示範 | 不適用於生產環境

本指南僅作為伺服器端路由的示範。請勿認為複製這些範例就能在生產環境中產生完全可用的設定。它並未涵蓋 Xray-core 的所有功能,也不保證在每種環境下都能完美運作。

有關設定語法和行為的完整詳情,請參閱 Xray 官方文件

部分使用者可能已注意到 Remnawave 會自動清除節點設定中的 clients 陣列。這不是錯誤,而是預期行為。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。只需確保相應地更新您的設定即可。