Saltar al contenido principal

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.

tip

Los plugins para nodos están disponibles a partir de la versión Remnawave Panel & Remnawave Node v2.7.0.

Node Plugins

Requisitos

Para el correcto funcionamiento de los plugins, es obligatorio agregar la directiva cap_add: NET_ADMIN a la configuración de Remnawave Node.

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

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.

Verificar la versión de nftables
nft --version

Versión del kernel de Linux

Se requiere la versión del kernel 5.7 o superior.

Verificar la versión del kernel
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.

peligro

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?
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
}
}

Soporte CIDR

info

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

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": []
}
tip

El editor de configuración de plugins admite sugerencias (pase el cursor sobre un objeto para leer la descripción) y autocompletado.

Torrent Blocker

peligro

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.

aviso

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
},
FieldTypeDescription
enabledbooleanHabilita o deshabilita el plugin, deshabilitado por defecto
ignoreListsobjectLista de direcciones IP e IDs de usuario que serán ignorados por el plugin
blockDurationnumberDuración del bloqueo en segundos
includeRuleTagsarrayCampo opcional. Array de valores ruleTag de sus reglas de enrutamiento, según los cuales también se bloqueará las IPs.
ignoreLists
{
"ip": [],
"userId": []
}
FieldTypeDescription
iparrayLista de direcciones IP que serán ignoradas por el plugin (CIDR no soportado). Se pueden usar listas de la configuración de Shared Lists.
userIdarrayLista 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:

Reglas de enrutamiento personalizadas en 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"
}

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:

Configuración de Torrent Blocker con 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.

aviso

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í:

  1. Remnawave Node agrega los cambios necesarios a la configuración de Xray-Core.
  2. El usuario usa torrents.
  3. Su tráfico cae bajo la regla agregada por Remnawave Node a la configuración de Xray-Core.
  4. Xray-Core envía información del paquete al webhook.
  5. Remnawave Node bloquea la IP e interrumpe la conexión.
  6. En ~15-30 segundos esta información será transmitida a Remnawave Panel.
  7. Remnawave Panel enviará una notificación al administrador en Telegram y también enviará un webhook (torrent_blocker.report, scope: torrent_blocker).
info

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
}
FieldTypeDescription
enabledbooleanHabilita o deshabilita el plugin, deshabilitado por defecto
blockedIpsarrayLista 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.

peligro

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
}
FieldTypeDescription
blockedIpsarrayLista 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.
blockedPortsarrayLista de puertos que serán bloqueados por el plugin.
enabledbooleanHabilita 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.

nota

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": []
}
FieldTypeDescription
enabledbooleanHabilita o deshabilita el plugin, deshabilitado por defecto
whitelistIpsarrayLista 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"]
}
]
FieldTypeDescription
namestringNombre de la lista, debe comenzar con ext:
typestringTipo de lista, debe ser ipList
itemsarrayLista 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

Executor le permite enviar comandos para ejecutar: bloqueo temporal de direcciones IP, desbloqueo de direcciones IP, restablecimiento de la tabla nftables.

aviso

Para su funcionamiento no es necesario tener plugins habilitados, sin embargo la directiva cap_add: NET_ADMIN debe estar obligatoriamente habilitada.

Block IPs

Node Plugins

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.

tip

Por favor, no use este comando para el bloqueo permanente de direcciones IP. Use el plugin Ingress Filter para eso.

Unblock IPs

Node Plugins

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.