서버 사이드 라우팅
이 가이드는 서버 사이드 라우팅의 데모로만 제공됩니다. 이 예시를 복사한다고 해서 프로덕션 환경에서 완전히 기능하는 설정이 만들어지지 않습니다. 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": []
}
}
새로 생성한 설정 프로파일을 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)에 따라 적절한 값을 복사하세요:
| 프로토콜 | 연결 정보 값 |
|---|---|
| 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
먼저 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를 사용할 수 있습니다. 그에 맞게 설정을 업데이트해야 합니다.