Pular para o conteúdo principal

Roteamento do Lado do Servidor

Apenas para Demonstração | Não Pronto para Produção

Este guia é destinado puramente como uma demonstração do roteamento do lado do servidor. Não assuma que copiar esses exemplos produzirá uma configuração completamente funcional em produção. Ele não cobre todas as capacidades do Xray-core, nem garante que funcionará perfeitamente em todos os ambientes.

Para detalhes completos sobre a sintaxe de configuração e comportamento, consulte a documentação oficial do Xray.

Alguns usuários podem ter notado que o Remnawave apaga automaticamente o array clients da configuração do Node. Isso não é um bug, mas um comportamento intencional. O Remnawave o apaga para garantir que apenas as configurações necessárias sejam mantidas para que determinadas funcionalidades operem corretamente.


Neste guia, vamos configurar o roteamento de tráfego do lado do servidor usando dois Nodes: RU e DE. Os usuários se conectarão ao Node RU. De lá, o tráfego será roteado da seguinte forma:

  • O tráfego para sites .ru será enviado diretamente pelo Node RU.
  • Todo o restante do tráfego será roteado pelo Node DE.

Para isso, criaremos um usuário de serviço que facilitará o roteamento do tráfego.

Como resultado, o "fluxo" do tráfego pode ser assim:

  1. O usuário abre google.com.
  2. A requisição chega primeiro ao Node RU.
  3. O Node RU aplica as regras de roteamento. Como google.com não é um domínio .ru, o tráfego é roteado para o Node DE.
  4. O Node DE completa a conexão com google.com.

Este tipo de configuração de roteamento do lado do servidor é frequentemente chamado de "bridge" (ponte).

Criar um Perfil de Configuração para DE

Navegue até a seção Perfis de Configuração e crie um novo Perfil de Configuração, por exemplo 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": []
}
}
Não se Esqueça de Atribuir o Perfil e Criar um Squad Interno

Atribua o Perfil de Configuração recém-criado ao Node DE. Selecione o Inbound BRIDGE_DE_IN.


Crie um novo Squad Interno, vamos chamá-lo de Bridge Squad. Ative o Inbound que criamos anteriormente — BRIDGE_DE_IN.

Criar um Usuário de Serviço

Para que nossa bridge funcione, precisaremos criar um usuário. Vamos chamá-lo de bridge_user.

Não se Esqueça de Remover os Limites de Tráfego e Estender a Data de Expiração

Como se trata de um usuário de serviço, obviamente não queremos que sua assinatura expire ou seja limitada pelo uso de tráfego. Defina Data Limit como 0 e Expiry Date para o ano 2099.

Em seguida, atribua o Squad adequado a este usuário. No nosso caso, é o Bridge Squad.

Após o usuário de serviço ser criado, precisaremos obter sua senha. Abra o cartão do usuário, clique no botão More Actions e depois em Detailed Info. Lá você deve ver a seção Connection Information.

Dependendo do protocolo do Inbound (Shadowsocks no nosso caso), copie o valor apropriado:

ProtocoloValor de Informação de Conexão
TrojanSenha Trojan
VLESSUUID VLESS
ShadowsocksSenha SS

Configurar um Perfil Público

Muito provavelmente, você já tem um Perfil de Configuração ao qual seus usuários se conectam. Caso contrário, consulte este guia.

Nesta etapa, não estamos interessados nos "inbounds" — em vez disso, modificaremos os arrays "outbounds", "routing" e "rules" desse Perfil.

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

Primeiro precisamos modificar o array 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"
}
]
}
}
CampoValor
addressO endereço IP ou nome de domínio do seu servidor Node DE.
portA porta do Inbound; no nosso caso, a porta do BRIDGE_DE_IN.
passwordA senha do usuário de serviço. Depende do protocolo que você está usando; veja a etapa anterior.
methodMétodo de criptografia. Para Shadowsocks no Remnawave, sempre use chacha20-ietf-poly1305.

Roteamento e Regras

Em seguida, modifique as regras de roteamento conforme suas necessidades.

Abaixo está o exemplo de uma regra que torna o Node RU um nó de saída para IPs e sites russos, enquanto o restante do tráfego é enviado para o Node DE.

rules
{
"ip": ["geoip:ru"],
"outboundTag": "DIRECT"
},
{
"domain": ["geosite:category-ru"],
"outboundTag": "DIRECT"
}

Abaixo está o exemplo de uma regra que encaminha todo o tráfego para o Outbound SS_OUTBOUND_TO_DE.

rules
{
"inboundTag": ["PUBLIC_RU_INBOUND"],
"outboundTag": "SS_OUTBOUND_TO_DE"
}

O Perfil de Configuração público completo pode parecer assim:

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"
}
]
}
}
dica

As regras de roteamento do Xray são processadas em ordem, de cima para baixo.
Veja como as regras do nosso exemplo funcionam:

  1. IPs privados (geoip:private) → BLOCK
    O tráfego que corresponde a esta regra é enviado para o Outbound BLOCK, que é um protocolo blackhole (completamente bloqueado).

  2. Domínios privados (geosite:private) → BLOCK
    Igual ao anterior, mas para nomes de domínio.

  3. Tráfego BitTorrent (bittorrent) → BLOCK
    Todo o tráfego BitTorrent é bloqueado.

  4. IPs russos (geoip:ru) → DIRECT
    O tráfego que corresponde a esta regra é enviado para o Outbound DIRECT, que é um protocolo freedom (o Node RU atua como nó de saída).

  5. Domínios russos (geosite:category-ru) → DIRECT
    O tráfego para domínios russos também sai diretamente do Node RU.

  6. Nenhuma regra correspondente (o restante do tráfego) → SS_OUTBOUND_TO_DE
    Qualquer tráfego restante que chegue ao PUBLIC_RU_INBOUND é roteado para o Node DE pelo Outbound Shadowsocks que criamos anteriormente.


Você não precisa usar Shadowsocks como protocolo de trânsito — você pode usar VLESS em seu lugar. Apenas certifique-se de atualizar sua configuração adequadamente.