Pular para o conteúdo principal

Regras de Resposta

aviso

Se você não tiver certeza sobre as alterações que está fazendo, prossiga com cautela. Modificações incorretas podem interromper o sistema.

As Regras de Resposta (SRR) são um conjunto ordenado (de cima para baixo; se a regra se aplica, a avaliação para) de regras JSON que o backend avalia para requisições de assinatura recebidas.

Templates menu
dica

As Regras de Resposta substituirão a configuração dos Squads Externos.

Criar uma Regra de Resposta Personalizada

Vamos criar uma Regra de Resposta personalizada que dará a um usuário Android com o aplicativo cliente Happ um Template personalizado e um cabeçalho personalizado.

Deve funcionar assim:

  1. O usuário solicita uma assinatura
  2. O Remnawave reconhece que ele está usando o Happ no Android.
  3. O Remnawave responde com um Template Happ Android personalizado e adiciona um cabeçalho personalizado HappTheBestAppOnTheWorld.

Aqui está como a regra poderia ser:

{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND", // Both "user-agent" and "x-device-os" must be matched
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "EQUALS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android", // Serve the custom Template
"headers": [ // Serve the custom headers
{
"key": "x-provider-id",
"value": "HappTheBestAppOnTheWorld"
}
]
}
}

rules

Cada regra é um objeto com os seguintes campos:

  • name (string) — obrigatório; 1..50 caracteres

    "name": "Block Legacy Clients"
  • description (string) — opcional; máx. 250 caracteres

    "description": "Blocks requests from legacy clients"
  • enabled (boolean) — obrigatório
    Controla se a regra está ativa. Quando false, a regra é ignorada durante a avaliação.

    "enabled": true
  • operator (enum) — obrigatório; AND ou OR

    "operator": "AND" // Rule matches only if ALL conditions match
    "operator": "OR" // Rule matches if ANY condition matches
  • conditions (array)
    Lista de condições a avaliar.

    "conditions": []  // Empty = match everything (use for fallback rules)
  • responseType (enum) — obrigatório
    Determina qual resposta enviar quando a regra corresponder:

    TipoDescrição
    MIHOMOConfig YAML do Mihomo
    CLASHConfig YAML do Clash
    STASHConfig YAML do Stash
    SINGBOXConfig JSON do Sing-box
    XRAY_JSONConfig JSON do Xray
    XRAY_BASE64Config do Xray codificada em Base64
    BROWSERPágina HTML para navegadores
    BLOCKHTTP 403 Forbidden
    STATUS_CODE_404HTTP 404 Not Found
    STATUS_CODE_451HTTP 451 Unavailable For Legal Reasons
    SOCKET_DROPInterromper a conexão socket
  • responseModifications (array) - opcional
    Modificações adicionais a aplicar à resposta. Pode ser usado para fornecer um Template ou cabeçalhos personalizados.

    • subscriptionTemplate (string) - opcional
      Definir um Template específico a ser fornecido se a regra corresponder.
    • headers (array) - opcional
      Responder com um cabeçalho personalizado.
      • key (string) - opcional
        Nome do cabeçalho.
      • value (string) - opcional
        Valor do cabeçalho.
    • applyHeadersToEnd (boolean) - opcional
      Por padrão, os cabeçalhos são adicionados ao formar a resposta. Em alguns casos, os cabeçalhos definidos no SRR podem ser substituídos por cabeçalhos de outras partes do sistema (como Squads Externos). Se você definir este sinalizador como true, os cabeçalhos do SRR serão adicionados no final, imediatamente antes de a resposta ser enviada. Nesse caso, os cabeçalhos do SRR podem substituir cabeçalhos de outras seções.
    • ignoreHostXrayJsonTemplate (boolean) - opcional
      Cada Host pode ter seu próprio Template Xray Json. Se você definir este sinalizador como true, o Template Xray Json definido pelo SRR será usado. O Template Xray Json do Host será ignorado.
    • ignoreServeJsonAtBaseSubscription (boolean) - opcional
      Em certos cenários, você pode querer servir XRAY_BASE64 para aplicativos cliente reconhecidos pelo Panel como capazes de aceitar XRAY_JSON quando Serve JSON at Base Subscription está habilitado.
      Se você definir este sinalizador como true, a configuração Serve JSON at Base Subscription será ignorada (definida como false).
    "responseType": "SINGBOX",
    "responseModifications": {
    "applyHeadersToEnd": true,
    "headers": [
    {
    "key": "X-Custom-Header",
    "value": "CustomValue"
    }
    ],
    "ignoreHostXrayJsonTemplate": true,
    "ignoreServeJsonAtBaseSubscription": true,
    "subscriptionTemplate": "Singbox Legacy"
    }

rules.conditions

  • headerName (string) — obrigatório
    O cabeçalho HTTP a verificar. Deve estar em conformidade com a RFC 7230.

    "headerName": "user-agent"    // Client app user-agent
  • operator (enum) — obrigatório
    Operação de comparação a realizar:

    OperadorDescrição
    EQUALSCorrespondência exata
    NOT_EQUALSCorrespondência exata inversa
    CONTAINSSubstring presente
    NOT_CONTAINSSubstring ausente
    STARTS_WITHCorrespondência de prefixo
    NOT_STARTS_WITHAusência de prefixo
    ENDS_WITHCorrespondência de sufixo
    NOT_ENDS_WITHAusência de sufixo
    REGEXExpressão regular
    NOT_REGEXRegex inversa
  • value (string) — obrigatório; 1..255 caracteres
    O valor a comparar com o valor do cabeçalho.

    "value": "^sfa|sfi|sfm|sft|karing|singbox|rabbithole"
  • caseSensitive (boolean) — obrigatório

    "caseSensitive": true   // The value is compared as is
    "caseSensitive": false // The value is lowercased before comparison
Templates específicos por SO

Você pode facilmente responder com diferentes Templates para diferentes sistemas operacionais.

No exemplo abaixo, usuários com iOS receberão um JSON Happ iOS, e usuários com Android receberão um JSON Happ Android.

{
"name": "Happ Android",
"description": "Serve custom JSON for Android",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "android"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ Android"
}
},
{
"name": "Happ iOS",
"description": "Serve custom JSON for iOS",
"enabled": true,
"operator": "AND",
"conditions": [
{
"caseSensitive": false,
"headerName": "user-agent",
"operator": "CONTAINS",
"value": "happ"
},
{
"caseSensitive": false,
"headerName": "x-device-os",
"operator": "CONTAINS",
"value": "ios"
}
],
"responseType": "XRAY_JSON",
"responseModifications": {
"subscriptionTemplate": "Happ iOS"
}
}
Regras de Resolução de Cabeçalhos
  1. Os nomes dos cabeçalhos não diferenciam maiúsculas de minúsculas
    "user-agent" === "User-Agent" === "USER-AGENT"
  2. Se um cabeçalho tiver vários valores, eles serão concatenados em uma única string, separados por vírgulas.
  3. O valor ausente dos cabeçalhos resulta na regra sendo ignorada.