Zum Hauptinhalt springen

Antwortregeln

warnung

Wenn Sie sich über die vorgenommenen Änderungen nicht sicher sind, gehen Sie bitte vorsichtig vor. Falsche Änderungen können das System beeinträchtigen.

Antwortregeln (SRR) sind eine geordnete (von oben nach unten; wenn die Regel zutrifft, wird die Auswertung gestoppt), JSON-basierte Menge von Regeln, die das Backend für eingehende Abonnementanfragen auswertet.

Templates menu
tipp

Antwortregeln überschreiben die Konfiguration externer Squads.

Eine benutzerdefinierte Antwortregel erstellen

Lassen Sie uns eine benutzerdefinierte Antwortregel erstellen, die einem Android-Benutzer mit der Happ-Client-App ein benutzerdefiniertes Template und einen benutzerdefinierten Header gibt.

Sie sollte etwa so aussehen:

  1. Der Benutzer fordert ein Abonnement an.
  2. Remnawave erkennt, dass er Happ auf Android verwendet.
  3. Remnawave antwortet mit einem benutzerdefinierten Happ Android-Template und fügt den benutzerdefinierten Header HappTheBestAppOnTheWorld hinzu.

So könnte die Regel aussehen:

{
"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

Jede Regel ist ein Objekt mit den folgenden Feldern:

  • name (Zeichenkette) — erforderlich; 1..50 Zeichen

    "name": "Block Legacy Clients"
  • description (Zeichenkette) — optional; max. 250 Zeichen

    "description": "Blocks requests from legacy clients"
  • enabled (Boolean) — erforderlich
    Steuert, ob die Regel aktiv ist. Bei false wird die Regel während der Auswertung übersprungen.

    "enabled": true
  • operator (Enum) — erforderlich; AND oder OR

    "operator": "AND" // Rule matches only if ALL conditions match
    "operator": "OR" // Rule matches if ANY condition matches
  • conditions (Array)
    Liste der auszuwertenden Bedingungen.

    "conditions": []  // Empty = match everything (use for fallback rules)
  • responseType (Enum) — erforderlich
    Bestimmt, welche Antwort gesendet wird, wenn die Regel zutrifft:

    TypBeschreibung
    MIHOMOMihomo YAML-Konfiguration
    CLASHClash YAML-Konfiguration
    STASHStash YAML-Konfiguration
    SINGBOXSing-box JSON-Konfiguration
    XRAY_JSONXray JSON-Konfiguration
    XRAY_BASE64Base64-kodierte Xray-Konfiguration
    BROWSERHTML-Seite für Browser
    BLOCKHTTP 403 Verboten
    STATUS_CODE_404HTTP 404 Nicht gefunden
    STATUS_CODE_451HTTP 451 Aus rechtlichen Gründen nicht verfügbar
    SOCKET_DROPSocket-Verbindung trennen
  • responseModifications (Array) - optional
    Zusätzliche Änderungen, die auf die Antwort angewendet werden. Kann verwendet werden, um ein benutzerdefiniertes Template oder Header bereitzustellen.

    • subscriptionTemplate (Zeichenkette) - optional
      Ein bestimmtes Template festlegen, das bereitgestellt wird, wenn die Regel zutrifft.
    • headers (Array) - optional
      Mit einem benutzerdefinierten Header antworten.
      • key (Zeichenkette) - optional
        Header-Name.
      • value (Zeichenkette) - optional
        Header-Wert.
    • applyHeadersToEnd (Boolean) - optional
      Standardmäßig werden Header beim Erstellen der Antwort hinzugefügt. In einigen Fällen können Header aus anderen Systemteilen (wie externe Squads) die in SRR gesetzten Header überschreiben. Wenn Sie dieses Flag auf true setzen, werden SRR-Header am Ende, kurz vor dem Senden der Antwort, hinzugefügt. In diesem Fall können SRR-Header Header aus anderen Abschnitten überschreiben.
    • ignoreHostXrayJsonTemplate (Boolean) - optional
      Jeder Host kann sein eigenes Xray Json-Template haben. Wenn Sie dieses Flag auf true setzen, wird das von SRR definierte Xray Json-Template verwendet. Das Xray Json-Template des Hosts wird ignoriert.
    • ignoreServeJsonAtBaseSubscription (Boolean) - optional
      In bestimmten Szenarien möchten Sie möglicherweise XRAY_BASE64 an Client-Apps liefern, die vom Panel als fähig erkannt werden, XRAY_JSON zu akzeptieren, wenn Serve JSON at Base Subscription aktiviert ist.
      Wenn Sie dieses Flag auf true setzen, wird die Einstellung Serve JSON at Base Subscription ignoriert (auf false gesetzt).
    "responseType": "SINGBOX",
    "responseModifications": {
    "applyHeadersToEnd": true,
    "headers": [
    {
    "key": "X-Custom-Header",
    "value": "CustomValue"
    }
    ],
    "ignoreHostXrayJsonTemplate": true,
    "ignoreServeJsonAtBaseSubscription": true,
    "subscriptionTemplate": "Singbox Legacy"
    }

rules.conditions

  • headerName (Zeichenkette) — erforderlich
    Der zu prüfende HTTP-Header. Muss RFC 7230 entsprechen.

    "headerName": "user-agent"    // Client app user-agent
  • operator (Enum) — erforderlich
    Durchzuführende Vergleichsoperation:

    OperatorBeschreibung
    EQUALSGenaue Übereinstimmung
    NOT_EQUALSUmgekehrte genaue Übereinstimmung
    CONTAINSTeilzeichenkette vorhanden
    NOT_CONTAINSTeilzeichenkette nicht vorhanden
    STARTS_WITHPräfix-Übereinstimmung
    NOT_STARTS_WITHKein Präfix
    ENDS_WITHSuffix-Übereinstimmung
    NOT_ENDS_WITHKein Suffix
    REGEXRegulärer Ausdruck
    NOT_REGEXUmgekehrter regulärer Ausdruck
  • value (Zeichenkette) — erforderlich; 1..255 Zeichen
    Der Wert, der mit dem Header-Wert verglichen wird.

    "value": "^sfa|sfi|sfm|sft|karing|singbox|rabbithole"
  • caseSensitive (Boolean) — erforderlich

    "caseSensitive": true   // The value is compared as is
    "caseSensitive": false // The value is lowercased before comparison
Betriebssystem-spezifische Templates bereitstellen

Sie können ganz einfach mit verschiedenen Templates auf verschiedene Betriebssysteme antworten.

Im folgenden Beispiel erhalten iOS-Benutzer ein Happ iOS-JSON und Android-Benutzer ein Happ Android-JSON.

{
"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"
}
}
Header-Auflösungsregeln
  1. Header-Namen sind nicht case-sensitiv
    "user-agent" === "User-Agent" === "USER-AGENT"
  2. Wenn ein Header mehrere Werte hat, werden diese zu einer einzelnen Zeichenkette zusammengefasst, getrennt durch Kommas.
  3. Fehlende Header-Werte führen dazu, dass die Regel übersprungen wird.