Zum Hauptinhalt springen

Node Plugins β

Plugins sind zusätzliche Module, die auf Remnawave Node aktiviert werden können, um zusätzliche Funktionen bereitzustellen: Torrent Blocker, Ingress Filter, Egress Filter und die Konfiguration von Connection Drop.

tipp

Node-Plugins sind ab Version Remnawave Panel & Remnawave Node v2.7.0 verfügbar.

Node Plugins

Anforderungen

Für den ordnungsgemäßen Betrieb der Plugins muss zwingend die Direktive cap_add: NET_ADMIN zur Remnawave Node-Konfiguration hinzugefügt werden.

docker-compose.yml
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
network_mode: host
restart: always
cap_add:
- NET_ADMIN
ulimits:
nofile:
soft: 1048576
hard: 1048576
environment:
- NODE_PORT=<NODE_PORT>
- SECRET_KEY=<SECRET_KEY>

nftables

Stellen Sie sicher, dass nftables auf dem Host-System verfügbar ist. Bei den meisten modernen Distributionen ist es standardmäßig installiert.

nftables-Version prüfen
nft --version

Linux-Kernel

Kernel-Version 5.7 oder höher ist erforderlich.

Kernel-Version prüfen
uname -r

Hinweis: Wenn die Kernel-Version unter 5.7 liegt, wird das Plugin nicht funktionieren. Aktualisieren Sie den Kernel oder konsultieren Sie die Dokumentation Ihrer Distribution.

gefahr

Gehen Sie bei der Plugin-Konfiguration mit Vorsicht vor – die Plugins Torrent Blocker, Ingress Filter und Egress Filter arbeiten direkt mit der Firewall auf Ihrem Server.

Welche Tabelle erstellt Remnawave Node genau für den Betrieb der Plugins?
nftables
table ip remnanode {
counter processed {
packets 32 bytes 2060
}

counter ingress-filter-ip {
packets 0 bytes 0
}

counter torrent-blocker {
packets 0 bytes 0
}

counter egress-filter-ip {
packets 0 bytes 0
}

counter egress-filter-port {
packets 0 bytes 0
}

set ingress-filter-ip {
type ipv4_addr
flags timeout
counter
}

set torrent-blocker {
type ipv4_addr
flags timeout
counter
}

set egress-filter-ip {
type ipv4_addr
flags timeout
counter
}

set egress-filter-port {
type inet_proto . inet_service
flags timeout
counter
}

chain input {
type filter hook input priority filter - 10; policy accept;
counter name "processed"
ip saddr @ingress-filter-ip log prefix "ingress-filter-ip: " counter name "ingress-filter-ip" drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " counter name "torrent-blocker" drop
}

chain forward {
type filter hook forward priority filter - 10; policy accept;
counter name "processed"
ip saddr @ingress-filter-ip log prefix "ingress-filter-ip: " counter name "ingress-filter-ip" drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " counter name "torrent-blocker" drop
}

chain output {
type filter hook output priority filter - 10; policy accept;
ip daddr @egress-filter-ip counter name "egress-filter-ip" drop
meta l4proto . th dport @egress-filter-port counter name "egress-filter-port" drop
}
}
table ip6 remnanode6 {
counter processed {
packets 0 bytes 0
}

counter ingress-filter-ip6 {
packets 0 bytes 0
}

counter torrent-blocker6 {
packets 0 bytes 0
}

counter egress-filter-ip6 {
packets 0 bytes 0
}

counter egress-filter-port6 {
packets 0 bytes 0
}

set ingress-filter-ip6 {
type ipv6_addr
flags timeout
counter
}

set torrent-blocker6 {
type ipv6_addr
flags timeout
counter
}

set egress-filter-ip6 {
type ipv6_addr
flags timeout
counter
}

set egress-filter-port6 {
type inet_proto . inet_service
flags timeout
counter
}

chain input {
type filter hook input priority filter - 10; policy accept;
counter name "processed"
ip6 saddr @ingress-filter-ip6 log prefix "ingress-filter-ip: " counter name "ingress-filter-ip6" drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " counter name "torrent-blocker6" drop
}

chain forward {
type filter hook forward priority filter - 10; policy accept;
counter name "processed"
ip6 saddr @ingress-filter-ip6 log prefix "ingress-filter-ip: " counter name "ingress-filter-ip6" drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " counter name "torrent-blocker6" drop
}

chain output {
type filter hook output priority filter - 10; policy accept;
ip6 daddr @egress-filter-ip6 counter name "egress-filter-ip6" drop
meta l4proto . th dport @egress-filter-port6 counter name "egress-filter-port6" drop
}
}

CIDR-Unterstützung

info

CIDR-Notation (IPv4 und IPv6) wird in folgenden Plugins unterstützt: Ingress Filter, Egress Filter und Shared Lists.

In den Plugins Torrent Blocker (ignoreLists.ip) und Connection Drop (whitelistIps) wird CIDR-Notation nicht unterstützt — geben Sie nur konkrete IP-Adressen an.

Beispiele für zulässige CIDR-Werte: 192.168.1.1, 10.0.0.0/8, 172.16.0.0/12, 2001:db8::1, 2001:db8::/32.

Konfigurationsstruktur

Node Plugins
Plugin configuration
{
"ingressFilter": {
"enabled": false,
"blockedIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
tipp

Der Plugin-Konfigurations-Editor unterstützt Tooltips (fahren Sie mit der Maus über ein Objekt, um die Beschreibung zu lesen) sowie Autovervollständigung.

Torrent Blocker

gefahr

Für den Betrieb dieses Plugins ist die Mindest-Version von Xray-Core – 26.3.27 – erforderlich. Diese Kernel-Version ist standardmäßig in Remnawave Node v2.7.0 enthalten.

warnung

Damit Torrent Blocker korrekt funktioniert, muss in Ihrem Inbound zwingend sniffing mit destOverride aktiviert sein, das die erforderlichen Protokolle enthält. Ohne aktiviertes Sniffing kann Xray-Core das Verkehrsprotokoll (einschließlich bittorrent) nicht bestimmen, und die Routing-Regel von Torrent Blocker wird nicht ausgelöst.

"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}

Torrent Blocker ist ein Plugin, das die IP-Adresse sperrt, von der Torrent-Datenverkehr erkannt wurde.

Konfiguration

"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
FieldTypeDescription
enabledbooleanAktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert
ignoreListsobjectListe der IP-Adressen und Benutzer-IDs, die vom Plugin ignoriert werden
blockDurationnumberSperrdauer in Sekunden
includeRuleTagsarrayOptionales Feld. Array von ruleTag-Werten aus Ihren Routing-Regeln, nach denen ebenfalls IP-Adressen gesperrt werden.
ignoreLists
{
"ip": [],
"userId": []
}
FieldTypeDescription
iparrayListe der IP-Adressen, die vom Plugin ignoriert werden (CIDR nicht unterstützt). Listen aus der Shared Lists-Konfiguration können verwendet werden.
userIdarrayListe der Benutzer-IDs, die vom Plugin ignoriert werden
includeRuleTags — Sperrung nach zusätzlichen Routing-Regeln

Standardmäßig erstellt Torrent Blocker seine eigene Routing-Regel und fügt sie als erstes Element des Arrays routing.rules hinzu. Diese Regel verfolgt nur das Protokoll bittorrent.

Wenn jedoch in Ihrer Xray-Core-Konfiguration bereits eigene Routing-Regeln mit Tags (ruleTag) vorhanden sind, die ebenfalls mit Torrent-Datenverkehr verbunden sind, können Sie diese in includeRuleTags angeben. In diesem Fall sperrt Torrent Blocker IP-Adressen, die nicht nur durch seine eigene Regel, sondern auch durch alle angegebenen Regeln erkannt wurden.

Beispiel

Angenommen, Ihre Xray-Core-Konfiguration enthält folgende Routing-Regeln:

Benutzerdefinierte Routing-Regeln in Xray-Core
{
"domain": [
"geosite:category-public-tracker"
],
"ruleTag": "TORRENT_BY_DOMAIN",
"outboundTag": "TORRENT"
},
{
"port": "6881-6889,51413,21413,17417,37305",
"ruleTag": "TORRENT_BY_PORT",
"outboundTag": "TORRENT"
}

Die erste Regel sperrt Datenverkehr nach Domänen öffentlicher Torrent-Tracker, die zweite nach Ports, die von Torrent-Clients üblicherweise verwendet werden.

Damit Torrent Blocker das Auslösen dieser Regeln verarbeitet und IP-Adressen entsprechend sperrt, geben Sie deren ruleTag in includeRuleTags an:

Torrent Blocker-Konfiguration mit includeRuleTags
"torrentBlocker": {
"enabled": true,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600,
"includeRuleTags": ["TORRENT_BY_DOMAIN", "TORRENT_BY_PORT"]
}

Wenn Xray-Core daraufhin Datenverkehr erkennt, der unter die Regeln TORRENT_BY_DOMAIN oder TORRENT_BY_PORT fällt, sperrt Torrent Blocker die Quell-IP-Adresse genauso, als wäre seine eigene Regel für das Protokoll bittorrent ausgelöst worden.

Technische Informationen

Das Plugin nutzt eine der Neuerungen in Xray-Core – webhook (PR: #5722). Daher ist für den Betrieb des Plugins Xray-Core 26.3.27 oder höher erforderlich.

Wie beeinflusst die Aktivierung des Plugins die Xray-Core-Konfiguration

Wenn dieses Plugin aktiviert ist, wendet Remnawave Node automatisch die notwendigen Änderungen an der Xray-Core-Konfiguration an. Sie müssen außer der Plugin-Aktivierung nichts weiter tun.

warnung

Wie oben beschrieben – hier wird nur beschrieben, was genau in der Xray-Core-Konfiguration geändert wird. Fügen Sie diese Änderungen nicht manuell hinzu, sie werden automatisch angewendet.

{
"inbounds": [],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
},
{
"tag": "RW_TB_OUTBOUND_BLOCK",
"protocol": "blackhole"
}
],
"routing": {
"rules": [
{
"protocol": [
"bittorrent"
],
"outboundTag": "RW_TB_OUTBOUND_BLOCK",
"webhook": {
"url": "<REPLACED IN RUNTIME BY REMNAWAVE NODE>",
"deduplication": 5
}
}
]
}
}

Die Regel wird immer am Anfang des Arrays rules vor allen anderen Regeln platziert, und outbound wird immer am Ende des Arrays outbounds hinzugefügt.

Funktionsprinzip

Im Rahmen von Xray-Core ist es unmöglich, Torrent-Datenverkehr vollständig zu blockieren. Xray-Core kann nur ~10-30% des Torrent-Datenverkehrs verfolgen, daher bedeutet „Sperrung", dass nach der erstmaligen Erkennung von mindestens einem Paket die IP-Adresse, von der dieses Paket kam, für die in der Konfiguration angegebene Zeitspanne gesperrt wird.

Nach Empfang des Pakets sendet Xray-Core Informationen darüber an den Webhook, der von Remnawave Node verarbeitet wird. Nach dessen Empfang sperrt Remnawave Node sofort die IP-Adresse (in nftables) und trennt auch die Verbindung (analog zum Befehl ss -k, conntrack -D).

Das Funktionsprinzip lässt sich in Punkten wie folgt beschreiben:

  1. Remnawave Node fügt die notwendigen Änderungen zur Xray-Core-Konfiguration hinzu.
  2. Der Benutzer verwendet Torrents.
  3. Sein Datenverkehr fällt unter die von Remnawave Node zur Xray-Core-Konfiguration hinzugefügte Regel.
  4. Xray-Core sendet Paketinformationen an den Webhook.
  5. Remnawave Node sperrt die IP-Adresse und trennt die Verbindung.
  6. Innerhalb von ~15-30 Sekunden werden diese Informationen an Remnawave Panel übermittelt.
  7. Remnawave Panel sendet eine Benachrichtigung an den Administrator in Telegram und sendet ebenfalls einen Webhook (torrent_blocker.report, Scope: torrent_blocker).
info

Es ist wichtig zu beachten, dass weitere Maßnahmen gegenüber dem Regelverletzer von Ihnen selbst implementiert werden müssen. Remnawave Panel bietet alle Möglichkeiten dafür. Nach dem Empfang des Webhooks vom Panel können Sie den Benutzer in den Status DISABLED versetzen, wenn Sie verhindern möchten, dass er sich mit allen Servern verbinden kann.

Was wird im Webhook (torrent_blocker.report) gesendet

Der Webhook enthält das vollständige Objekt der bereits bekannten Objekte node und user sowie ein report-Objekt, das alle verfügbaren Informationen enthält.

{
"scope": "torrent_blocker",
"event": "torrent_blocker.report",
"timestamp": "2026-03-07T16:02:50.564Z",
"data": {
"node": {},
"user": {},
"report": {
"actionReport": {
"blocked": true,
"ip": "<omitted>",
"blockDuration": 60,
"willUnblockAt": "2026-03-07T16:03:48.986Z",
"userId": "2",
"processedAt": "2026-03-07T16:02:48.986Z"
},
"xrayReport": {
"email": "2",
"level": 0,
"protocol": "bittorrent",
"network": "tcp",
"source": "<omitted>:51431",
"destination": "<omitted>:59755",
"routeTarget": null,
"originalTarget": "tcp:<omitted>:59755",
"inboundTag": "VLESS_TCP_REALITY",
"inboundName": "vless",
"inboundLocal": "<omitted>:443",
"outboundTag": "RW_TB_OUTBOUND_BLOCK",
"ts": 1772899368
}
}
}
}

Ingress Filter

Ingress Filter ist ein Plugin, das eine in der Liste enthaltene IP-Adresse dauerhaft sperrt. Ingress Filter filtert eingehenden (ingress) Datenverkehr.

Konfiguration

"ingressFilter": {
"blockedIps": [],
"enabled": false
}
FieldTypeDescription
enabledbooleanAktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert
blockedIpsarrayListe der IP-Adressen oder CIDR-Subnetze (IPv4/IPv6), die vom Plugin gesperrt werden. Listen aus der Shared Lists-Konfiguration können verwendet werden. Beispiele: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32.

Funktionsprinzip

IP-Adressen, die in der Liste angegeben sind, werden in nftables gesperrt.

gefahr

Ingress Filter ist ein sehr gefährliches Werkzeug. Seien Sie beim Erstellen von Listen aufmerksam und vorsichtig.

Egress Filter

Egress Filter ist ein Plugin zur Sperrung von ausgehendem Datenverkehr. Es ermöglicht, Verbindungen zu bestimmten IP-Adressen oder Ports auf der Zielseite zu verbieten. Zum Beispiel kann der Zugriff auf bestimmte IP-Adressen interner (z.B. 10.0.0.1, 10.0.0.2) oder externer Dienste (z.B. 8.8.8.8, 8.8.4.4) gesperrt oder unerwünschte Ports (z.B. 25, 465, 587) geschlossen werden.

Konfiguration

"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
FieldTypeDescription
blockedIpsarrayListe der IP-Adressen oder CIDR-Subnetze (IPv4/IPv6), die vom Plugin gesperrt werden. Listen aus der Shared Lists-Konfiguration können verwendet werden. Beispiele: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32.
blockedPortsarrayListe der Ports, die vom Plugin gesperrt werden.
enabledbooleanAktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert

Connection Drop

Connection Drop ist kein vollständiges Plugin, sondern ein kleines Add-on, das es ermöglicht, IP-Adressen zur Whitelist für die Connection Drop-Funktionalität hinzuzufügen.

Ab Version Remnawave Node v2.6.0 – und bei Aktivierung der Direktive cap_add: NET_ADMIN – trennt Remnawave Node automatisch Verbindungen, wenn ein Benutzer aus Xray-Core entfernt wird. Bei der Verwendung von Bridges konnte dies dazu führen, dass die Bridge-Verbindung durch diese Funktion unterbrochen wurde.

Ab Version Remnawave Node v2.7.0 – können Sie die Whitelist für die Connection Drop-Funktionalität aktivieren.

hinweis

Die Connection Drop-Funktionen werden immer funktionieren. Hier wird nur die Aktivierung oder Deaktivierung der Whitelist für diese Funktionalität konfiguriert.

Konfiguration

"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
FieldTypeDescription
enabledbooleanAktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert
whitelistIpsarrayListe der IP-Adressen, die zur Whitelist für die Connection Drop-Funktionalität hinzugefügt werden.

Shared Lists

Shared Lists ist eine Liste von IP-Adressen, die in anderen Plugins verwendet werden kann.

Konfiguration

"sharedLists": [
{
"name": "ext:my-list",
"type": "ipList",
"items": ["127.0.0.1", "127.0.0.2", "10.0.0.0/8", "2001:db8::/32"]
}
]
FieldTypeDescription
namestringName der Liste, muss mit ext: beginnen
typestringTyp der Liste, muss ipList sein
itemsarrayListe der IP-Adressen oder CIDR-Subnetze (IPv4/IPv6). Beispiele: 127.0.0.1, 10.0.0.0/8, 2001:db8::/32.

Verwendungsbeispiel in der Torrent Blocker-Konfiguration:

"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}

Executor

Executor

Executor ermöglicht das Senden von Befehlen zur Ausführung: vorübergehende IP-Sperrung, Aufheben der IP-Sperrung, Zurücksetzen der nftables-Tabelle.

warnung

Für seinen Betrieb ist es nicht notwendig, aktivierte Plugins zu haben, jedoch muss die Direktive cap_add: NET_ADMIN zwingend aktiviert sein.

Block IPs

Node Plugins

Der Befehl dient zur vorübergehenden Sperrung von IP-Adressen. Sie können mehrere Adressen und die Sperrdauer in Sekunden angeben. 0 – bedeutet bis zum Neustart von Remnawave Node oder einer Änderung der Plugin-Konfiguration, die an diesem Node gebunden ist.

tipp

Bitte verwenden Sie diesen Befehl nicht zur dauerhaften Sperrung von IP-Adressen. Verwenden Sie dafür das Plugin Ingress Filter.

Unblock IPs

Node Plugins

Der Befehl dient zur Aufhebung der IP-Sperrung. Bei seiner Ausführung wird eine Anfrage zum Entfernen der IP-Adresse aus der nftables-Tabelle gesendet.

Reset nftables

Der Befehl dient zum Zurücksetzen der nftables-Tabelle. Bei seiner Ausführung wird eine Anfrage zur Neuerstellung der nftables-Tabelle gesendet.