伺服器端路由
本指南僅作為伺服器端路由的示範。請勿認為複製這些範例就能在生產環境中產生完全可用的設定。它並未涵蓋 Xray-core 的所有功能,也不保證在每種環境下都能完美運作。
有關設定語法和行為的完整詳情,請參閱 Xray 官方文件。
部分使用者可能已注意到 Remnawave 會自動清除節點設定中的 clients 陣列。這不是錯誤,而是預期行為。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。只需確保相應地更新您的設定即可。