본문으로 건너뛰기

서버 사이드 라우팅

데모 전용 | 프로덕션 미지원

이 가이드는 서버 사이드 라우팅의 데모로만 제공됩니다. 이 예시를 복사한다고 해서 프로덕션 환경에서 완전히 기능하는 설정이 만들어지지 않습니다. 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 Limit0으로, Expiry Date2099년으로 설정하세요.

다음으로, 이 사용자에게 적절한 스쿼드를 할당합니다. 우리의 경우 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 배열을 수정해야 합니다.

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"
}
]
}
}
필드
addressDE 노드 서버의 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를 사용할 수 있습니다. 그에 맞게 설정을 업데이트해야 합니다.