Node Plugins β
Los plugins son módulos adicionales que se pueden activar en Remnawave Node para obtener funciones adicionales: Torrent Blocker, Ingress Filter, Egress Filter y la configuración de Connection Drop.
Los plugins para nodos están disponibles a partir de la versión Remnawave Panel & Remnawave Node v2.7.0.
Requisitos
Para el correcto funcionamiento de los plugins, es obligatorio agregar la directiva cap_add: NET_ADMIN a la configuración de Remnawave Node.
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
Asegúrese de que nftables esté disponible en la máquina host. En la mayoría de las distribuciones modernas ya está instalado por defecto.
nft --version
Versión del kernel de Linux
Se requiere la versión del kernel 5.7 o superior.
uname -r
Nota: Si la versión del kernel es inferior a 5.7, el plugin no funcionará. Actualice el kernel o consulte la documentación de su distribución.
Tenga cuidado al configurar los plugins, ya que los plugins Torrent Blocker, Ingress Filter y Egress Filter trabajarán directamente con el firewall en su servidor.
¿Qué tabla creará exactamente Remnawave Node para el funcionamiento de los 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
}
}
Soporte CIDR
La notación CIDR (IPv4 e IPv6) es compatible con los siguientes plugins: Ingress Filter, Egress Filter y Shared Lists.
En los plugins Torrent Blocker (ignoreLists.ip) y Connection Drop (whitelistIps) la notación CIDR no está soportada — especifique solo direcciones IP concretas.
Ejemplos de valores CIDR válidos: 192.168.1.1, 10.0.0.0/8, 172.16.0.0/12, 2001:db8::1, 2001:db8::/32.
Estructura de configuración
{
"ingressFilter": {
"enabled": false,
"blockedIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
El editor de configuración de plugins admite sugerencias (pase el cursor sobre un objeto para leer la descripción) y autocompletado.
Torrent Blocker
Para el funcionamiento de este plugin se requiere la versión mínima de Xray-Core – 26.3.27. Esta versión del núcleo viene por defecto con Remnawave Node v2.7.0.
Para que Torrent Blocker funcione correctamente, en su inbound debe estar habilitado obligatoriamente sniffing con destOverride que incluya los protocolos necesarios. Sin sniffing habilitado, Xray-Core no podrá determinar el protocolo del tráfico (incluyendo bittorrent), y la regla de enrutamiento de Torrent Blocker no se activará.
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
Torrent Blocker es un plugin que bloquea la dirección IP desde la que se detectó tráfico de Torrent.
Configuración
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
| Field | Type | Description |
|---|---|---|
enabled | boolean | Habilita o deshabilita el plugin, deshabilitado por defecto |
ignoreLists | object | Lista de direcciones IP e IDs de usuario que serán ignorados por el plugin |
blockDuration | number | Duración del bloqueo en segundos |
includeRuleTags | array | Campo opcional. Array de valores ruleTag de sus reglas de enrutamiento, según los cuales también se bloqueará las IPs. |
{
"ip": [],
"userId": []
}
| Field | Type | Description |
|---|---|---|
ip | array | Lista de direcciones IP que serán ignoradas por el plugin (CIDR no soportado). Se pueden usar listas de la configuración de Shared Lists. |
userId | array | Lista de IDs de usuario que serán ignorados por el plugin |
includeRuleTags — bloqueo según reglas de enrutamiento adicionales
Por defecto, Torrent Blocker crea su propia regla de enrutamiento y la agrega como primer elemento del array routing.rules. Esta regla solo rastrea el protocolo bittorrent.
Sin embargo, si en su configuración de Xray-Core ya existen reglas de enrutamiento personalizadas con etiquetas (ruleTag) que también están relacionadas con el tráfico de torrents, puede especificarlas en includeRuleTags. En este caso, Torrent Blocker bloqueará las IPs detectadas no solo por su propia regla, sino también por todas las reglas especificadas.
Ejemplo
Supongamos que su configuración de Xray-Core contiene las siguientes reglas de enrutamiento:
{
"domain": [
"geosite:category-public-tracker"
],
"ruleTag": "TORRENT_BY_DOMAIN",
"outboundTag": "TORRENT"
},
{
"port": "6881-6889,51413,21413,17417,37305",
"ruleTag": "TORRENT_BY_PORT",
"outboundTag": "TORRENT"
}
La primera regla bloquea el tráfico por dominios de rastreadores de torrents públicos, la segunda por puertos que normalmente usan los clientes de torrents.
Para que Torrent Blocker procese los disparos de estas reglas y bloquee las IPs según ellas, especifique sus ruleTag en includeRuleTags:
"torrentBlocker": {
"enabled": true,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600,
"includeRuleTags": ["TORRENT_BY_DOMAIN", "TORRENT_BY_PORT"]
}
Como resultado, si Xray-Core detecta tráfico que cae bajo las reglas TORRENT_BY_DOMAIN o TORRENT_BY_PORT, Torrent Blocker bloqueará la IP de origen exactamente igual que si se hubiera activado su propia regla para el protocolo bittorrent.
Información técnica
El plugin utiliza una de las novedades de Xray-Core – webhook (PR: #5722). Por eso, para el funcionamiento del plugin se requiere la versión de Xray-Core 26.3.27 o superior.
Cómo afecta la activación del plugin a la configuración de Xray-Core
Si este plugin está habilitado, Remnawave Node aplicará automáticamente los cambios necesarios en la configuración de Xray-Core. No necesita hacer nada más que habilitar el plugin.
Como se escribió anteriormente – aquí solo se describe lo que exactamente se cambiará en la configuración de Xray-Core. No agregue estos cambios manualmente, se aplicarán automáticamente.
{
"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
}
}
]
}
}
La regla siempre se colocará al principio del array rules, antes de las demás reglas. Y outbound siempre se agregará al final del array outbounds.
Principio de funcionamiento
En el marco de Xray-Core es imposible bloquear completamente el tráfico de Torrent. Xray-Core puede rastrear solo ~10-30% del tráfico de torrents, por lo que "bloqueo" significa que después de la detección inicial de al menos un paquete – la dirección IP de la que provino ese paquete será bloqueada durante el tiempo especificado en la configuración.
Después de recibir el paquete, Xray-Core enviará información sobre él al webhook, que será procesado por Remnawave Node. Tras recibirlo, Remnawave Node bloquea instantáneamente la dirección IP (en nftables) y también interrumpe la conexión (análogo al comando ss -k, conntrack -D).
El principio de funcionamiento se puede describir punto por punto así:
- Remnawave Node agrega los cambios necesarios a la configuración de Xray-Core.
- El usuario usa torrents.
- Su tráfico cae bajo la regla agregada por Remnawave Node a la configuración de Xray-Core.
- Xray-Core envía información del paquete al
webhook. - Remnawave Node bloquea la IP e interrumpe la conexión.
- En ~15-30 segundos esta información será transmitida a Remnawave Panel.
- Remnawave Panel enviará una notificación al administrador en Telegram y también enviará un webhook (
torrent_blocker.report, scope:torrent_blocker).
Es importante notar que las acciones adicionales respecto al infractor debe implementarlas usted mismo. Remnawave Panel proporciona todas las capacidades para ello. Después de recibir el webhook del panel, puede cambiar al usuario al estado DISABLED si desea que el usuario no pueda conectarse a todos los servidores.
Qué llegará en el webhook (torrent_blocker.report)
El webhook contendrá el objeto completo de los ya conocidos objetos node y user, así como un objeto report que contiene toda la información disponible.
{
"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 es un plugin que bloquea permanentemente la dirección IP que se encuentra en la lista. Ingress Filter filtra el tráfico entrante (ingress).
Configuración
"ingressFilter": {
"blockedIps": [],
"enabled": false
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Habilita o deshabilita el plugin, deshabilitado por defecto |
blockedIps | array | Lista de direcciones IP o subredes CIDR (IPv4/IPv6) que serán bloqueadas por el plugin. Se pueden usar listas de la configuración de Shared Lists. Ejemplos: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32. |
Principio de funcionamiento
Las direcciones IP especificadas en la lista serán bloqueadas en nftables.
Ingress Filter es una herramienta muy peligrosa. Sea atento y cuidadoso al compilar las listas.
Egress Filter
Egress Filter es un plugin para bloquear el tráfico saliente. Permite prohibir conexiones a determinadas direcciones IP o puertos en el lado del destino. Por ejemplo, se puede bloquear el acceso a direcciones IP específicas de servicios internos (por ejemplo, 10.0.0.1, 10.0.0.2) o externos (por ejemplo, 8.8.8.8, 8.8.4.4) o cerrar puertos no deseados (por ejemplo, 25, 465, 587).
Configuración
"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
| Field | Type | Description |
|---|---|---|
blockedIps | array | Lista de direcciones IP o subredes CIDR (IPv4/IPv6) que serán bloqueadas por el plugin. Se pueden usar listas de la configuración de Shared Lists. Ejemplos: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32. |
blockedPorts | array | Lista de puertos que serán bloqueados por el plugin. |
enabled | boolean | Habilita o deshabilita el plugin, deshabilitado por defecto |
Connection Drop
Connection Drop no es un plugin completo, sino un pequeño complemento para tener la posibilidad de agregar direcciones IP a la lista blanca para la funcionalidad de Connection Drop.
A partir de la versión Remnawave Node v2.6.0 – y al habilitar la directiva cap_add: NET_ADMIN – Remnawave Node interrumpe automáticamente las conexiones al eliminar un usuario de Xray-Core. En el caso de usar puentes, esto podía llevar a que la conexión del puente se interrumpiera como resultado de esta función.
A partir de la versión Remnawave Node v2.7.0 – puede habilitar la lista blanca para la funcionalidad de Connection Drop.
Las funciones de Connection Drop funcionarán siempre, aquí solo se configura la habilitación o deshabilitación de la lista blanca para esta funcionalidad.
Configuración
"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Habilita o deshabilita el plugin, deshabilitado por defecto |
whitelistIps | array | Lista de direcciones IP que serán agregadas a la lista blanca para la funcionalidad de Connection Drop. |
Shared Lists
Shared Lists es una lista de direcciones IP que puede utilizarse en otros plugins.
Configuración
"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 | Nombre de la lista, debe comenzar con ext: |
type | string | Tipo de lista, debe ser ipList |
items | array | Lista de direcciones IP o subredes CIDR (IPv4/IPv6). Ejemplos: 127.0.0.1, 10.0.0.0/8, 2001:db8::/32. |
Ejemplo de uso en la configuración de Torrent Blocker:
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}
Executor
Executor le permite enviar comandos para ejecutar: bloqueo temporal de direcciones IP, desbloqueo de direcciones IP, restablecimiento de la tabla nftables.
Para su funcionamiento no es necesario tener plugins habilitados, sin embargo la directiva cap_add: NET_ADMIN debe estar obligatoriamente habilitada.
Block IPs
El comando está destinado al bloqueo temporal de direcciones IP. Puede especificar varias direcciones y la duración del bloqueo en segundos. 0 – significa hasta el momento del reinicio de Remnawave Node o el cambio de la configuración del plugin vinculado a este nodo.
Por favor, no use este comando para el bloqueo permanente de direcciones IP. Use el plugin Ingress Filter para eso.
Unblock IPs
El comando está destinado al desbloqueo de direcciones IP. Al ejecutarlo, se enviará una solicitud para eliminar la dirección IP de la tabla nftables.
Reset nftables
El comando está destinado al restablecimiento de la tabla nftables. Al ejecutarlo, se enviará una solicitud para recrear la tabla nftables.