본문으로 건너뛰기

이 예제에서는 Remnawave 패널의 서비스 사용자를 활용하여 서버 라우팅을 설정하는 방법을 살펴보겠습니다.

서버 라우팅

일부 사용자는 Remnawave가 서버 설정에서 clients 배열을 자동으로 지우는 문제를 겪었을 수 있습니다. 이것은 오류나 버그가 아닙니다. 패널의 일부 기능이 올바르게 동작하려면 이 배열에 불필요한 항목이 없어야 하므로, 패널이 자동으로 배열을 지웁니다.

두 개의 서버가 있다고 가정합시다. RU-001DE-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에서 방금 만든 inbound BRIDGE_DE_IN만 활성화합니다.

노드 카드 (우리의 경우 DE-001 노드)에서도 이 inbound와 프로필을 활성화하는 것을 잊지 마십시오.

서비스 사용자 생성

Users 섹션으로 이동하여 bridge_user_001이라는 사용자를 만듭니다. 이 사용자에게 트래픽 제한이 없는지 확인하고 구독 만료일을 2099년경으로 설정합니다. (트래픽 한도 도달이나 구독 만료로 인해 패널이 사용자를 비활성화하는 것을 원하지 않기 때문입니다.)

이 사용자에 대한 스쿼드를 활성화하는 것을 잊지 마세요 — 우리의 경우 위에서 만든 스쿼드를 활성화합니다.

사용자가 성공적으로 생성되면 카드를 열고 메뉴(More Actions 버튼)에서 Detailed Info 섹션을 클릭합니다.

이 섹션에서 맨 아래로 스크롤하여 inbound 유형에 따라 정보를 복사합니다.

프로토콜패널에서의 명칭
ShadowsocksSS Password
VLESSVLESS UUID
TrojanTrojan 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 주소
portinbound 포트, 우리의 경우 BRIDGE_DE_IN inbound의 포트
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_DEoutbounds 배열에 추가하고, 규칙을 routing 객체 내 rules 배열에 추가했습니다.

Xray의 규칙은 우선순위 원칙으로 동작합니다. 우리의 규칙은 대략 다음과 같이 해석됩니다:

  1. IP가 geoip:private에 속하는 경우 — BLOCK (_blackhole_인 BLOCK outbound로 전송되어 차단됩니다).
  2. 도메인이 geosite:private 카테고리에 속하는 경우 — 동일한 처리.
  3. bittorrent 트래픽도 동일.
  4. IP가 geoip:ru에 속하는 경우 — DIRECT Outbound로 전송되어 트래픽이 RU-001 서버에서 나갑니다.
  5. 도메인이 geosite:category-ru 카테고리에 속하는 경우 — 마찬가지로 DIRECT로 전송됩니다.
  6. 트래픽이 inbound PUBLIC_RU_INBOUND에서 온 경우 — outbound SS_OUTBOUND_TO_DE로 전송되어 DE-001 서버로 이동합니다.

결론

이 예제에서 다음과 같은 구조를 만들었습니다:

  • 사용자가 VLESS 프로토콜을 사용하여 RU-001 서버에 접속합니다
  • 트래픽이 규칙을 따릅니다:
    • 러시아 사이트(또는 IP) — 직접 출력 (DIRECT)
    • 나머지 모든 트래픽 — shadowsocks 프로토콜을 통해 다른 서버 DE-001로 전송

전송 프로토콜로 VLESS도 사용할 수 있으며, 주된 차이는 outbound에만 있을 것입니다.