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.
Node-Plugins sind ab Version Remnawave Panel & Remnawave Node v2.7.0 verfügbar.
Anforderungen
Für den ordnungsgemäßen Betrieb der Plugins muss zwingend die Direktive cap_add: NET_ADMIN zur Remnawave Node-Konfiguration hinzugefügt werden.
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.
nft --version
Linux-Kernel
Kernel-Version 5.7 oder höher ist erforderlich.
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.
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?
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
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
{
"ingressFilter": {
"enabled": false,
"blockedIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
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
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.
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
},
| Field | Type | Description |
|---|---|---|
enabled | boolean | Aktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert |
ignoreLists | object | Liste der IP-Adressen und Benutzer-IDs, die vom Plugin ignoriert werden |
blockDuration | number | Sperrdauer in Sekunden |
includeRuleTags | array | Optionales Feld. Array von ruleTag-Werten aus Ihren Routing-Regeln, nach denen ebenfalls IP-Adressen gesperrt werden. |
{
"ip": [],
"userId": []
}
| Field | Type | Description |
|---|---|---|
ip | array | Liste der IP-Adressen, die vom Plugin ignoriert werden (CIDR nicht unterstützt). Listen aus der Shared Lists-Konfiguration können verwendet werden. |
userId | array | Liste 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:
{
"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:
"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.
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:
- Remnawave Node fügt die notwendigen Änderungen zur Xray-Core-Konfiguration hinzu.
- Der Benutzer verwendet Torrents.
- Sein Datenverkehr fällt unter die von Remnawave Node zur Xray-Core-Konfiguration hinzugefügte Regel.
- Xray-Core sendet Paketinformationen an den
Webhook. - Remnawave Node sperrt die IP-Adresse und trennt die Verbindung.
- Innerhalb von ~15-30 Sekunden werden diese Informationen an Remnawave Panel übermittelt.
- Remnawave Panel sendet eine Benachrichtigung an den Administrator in Telegram und sendet ebenfalls einen Webhook (
torrent_blocker.report, Scope:torrent_blocker).
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
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Aktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert |
blockedIps | array | Liste 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.
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
}
| Field | Type | Description |
|---|---|---|
blockedIps | array | Liste 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. |
blockedPorts | array | Liste der Ports, die vom Plugin gesperrt werden. |
enabled | boolean | Aktiviert 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.
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": []
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Aktiviert oder deaktiviert das Plugin, standardmäßig deaktiviert |
whitelistIps | array | Liste 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"]
}
]
| Field | Type | Description |
|---|---|---|
name | string | Name der Liste, muss mit ext: beginnen |
type | string | Typ der Liste, muss ipList sein |
items | array | Liste 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 ermöglicht das Senden von Befehlen zur Ausführung: vorübergehende IP-Sperrung, Aufheben der IP-Sperrung, Zurücksetzen der nftables-Tabelle.
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
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.
Bitte verwenden Sie diesen Befehl nicht zur dauerhaften Sperrung von IP-Adressen. Verwenden Sie dafür das Plugin Ingress Filter.
Unblock IPs
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.