Node Plugins β
Плагины – это дополнительные модули, которые можно активировать на Remnawave Node для дополнительных функций: Torrent Blocker, Ingress Filter, Egress Filter, настройка Connection Drop.
🚧 Эта страница находится в стадии разработки.
Плагины для нод доступны начиная с версии Remnawave Panel & Remnawave Node v2.7.0.
Требования
Для корректной работы плагинов в обязательном порядке требуется добавить директиву cap_add: NET_ADMIN в конфигурацию 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
Убедитесь, что на хостовой машине доступен nftables. На большинстве современных дистрибутивов он уже установлен по умолчанию.
nft --version
Linux-ядро
Требуется версия ядра 5.7 или выше.
uname -r
Примечание: если версия ядра ниже 5.7, плагин работать не будет. Обновите ядро или обратитесь к документации вашего дистрибутива.
Отнеситесь к настройке плагинов с осторожностью, плагины Torrent Blocker, Ingress Filter, Egress Filter будут работать напрямую с фаерволом на вашем сервере.
Какую именно таблицу создаст Remnawave Node для работы плагинов?
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
CIDR-нотация (IPv4 и IPv6) поддерживается в следующих плагинах: Ingress Filter, Egress Filter и Shared Lists.
В плагинах Torrent Blocker (ignoreLists.ip) и Connection Drop (whitelistIps) CIDR-нотация не поддерживается — указывайте только конкретные IP-адреса.
Примеры допустимых CIDR-значений: 192.168.1.1, 10.0.0.0/8, 172.16.0.0/12, 2001:db8::1, 2001:db8::/32.
Структура конфигурации
{
"ingressFilter": {
"enabled": false,
"blockedIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
Редактор конфигурации плагинов поддерживает подсказки (наведитесь на объект, чтобы прочитать описание), а так же автокомплит.
Torrent Blocker
Для работы этого плагина необходима минимальная версия Xray-Core – ??.??.??. Эта версия ядра идет по умолчанию с Remnawave Node v2.7.0.
Torrent Blocker – это плагин, который блокирует IP-адрес, с которого был обнаружен Torrent-трафик.
Конфигурация
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
| Field | Type | Description |
|---|---|---|
enabled | boolean | Включает или выключает плагин, по умолчанию выключен |
ignoreLists | object | Список IP-адресов и ID пользователей, которые будут игнорироваться плагином |
blockDuration | number | Время блокировки в секундах |
{
"ip": [],
"userId": []
}
| Field | Type | Description |
|---|---|---|
ip | array | Список IP-адресов, которые будут игнорироваться плагином (CIDR не поддерживается). Можно использовать списки из конфигурации Shared Lists. |
userId | array | Список ID пользователей, которые будут игнорироваться плагином |
Техническая информация
Плагин использует одно из нововведений в Xray-Core – webhook (PR: #5722). Поэтому для работы плагина необходима версия Xray-Core ??.??.?? или выше.
Как включение плагина влияет на конфигурацию Xray-Core
Если этот плагин включен, Remnawave Node автоматически применит необходимые изменения в конфигурацию Xray-Core, с вашей стороны кроме включения плагина ничего делать не требуется.
Как и написано выше – здесь описывается лишь то, что именно будет изменено в конфигурации Xray-Core. Не добавляйте эти изменения вручную, они будут применены автоматически.
{
"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": 30
}
}
]
}
}
Правило всегда будет помещаться в начало массива rules, перед остальными правилами. А outbound будет всегда добавляться в конец массива outbounds.
Принцип работы
В рамках Xray-Core невозможно полностью блокировать Torrent-трафик. Xray-Core способен отслеживать только ~10-30% torrent-трафика, поэтому под "блокировкой" имеется в виду то, что после изначального обнаружения хотя бы одного пакета – IP-адрес, с которого пришел этот пакет, будет заблокирован на время, указанное в конфигурации.
После получения пакета, Xray-Core отправит информацию о нем в webhook, который будет обрабатываться Remnawave Node. После его получения – Remnawave Node моментально блокирует IP-адрес (в nftables), а так же обрывает соединение (аналог команды ss -k, conntrack -D).
Итак, принцип работы по пунктам можно описать вот так:
- Remnawave Node добавляет необходимые изменения в конфигурацию Xray-Core.
- Пользователь использует торрент
- Его трафик попадает под правило, добавленное Remnawave Node в конфигурацию Xray-Core.
- Xray-Core отправляет информацию о пакете в
webhook. - Remnawave Node блокирует IP-адрес и обрывает соединение.
- В течении ~15-30 секунд эта информация будет передана в Remnawave Panel.
- Remnawave Panel отправит уведомление администратору в Telegram и так же отправит вебхук (
torrent_blocker.report, scope:torrent_blocker).
Важно заметить, что дальнейшие действия относительно нарушителя вам необходимо реализовать самостоятельно. Remnawave Panel предоставляет все возможности для этого. После получения вебука от панели – вы можете перевести пользователя в статус DISABLED, если хотите чтобы пользователь не смог подключаться ко всем серверам.
Что придет в вебхуке (torrent_blocker.report)
Вебхук будет содержать полный объект уже знакомых нам объектов node и user, а так же объект report, который содержит всю доступную информацию.
{
"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 – это плагин, который перманентно блокирует IP-адрес, который находится в списке. Ingress Filter фильтрует входящий (ingress) трафик.
Конфигурация
"ingressFilter": {
"blockedIps": [],
"enabled": false
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Включает или выключает плагин, по умолчанию выключен |
blockedIps | array | Список IP-адресов или CIDR-подсетей (IPv4/IPv6), которые будут заблокированы плагином. Можно использовать списки из конфигурации Shared Lists. Примеры: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32. |
Принцип работы
IP-адреса, указанные в списке – будут заблокированы в nftables.
Ingress Filter – это очень опасный инструмент. Будьте внимательны и осторожны при составлении списков.
Egress Filter
Egress Filter — плагин для блокировки исходящего трафика. Позволяет запретить подключения к определённым IP-адресам или портам на стороне назначения.
Например, можно заблокировать доступ к конкретным IP-адресам внутренних (например, 10.0.0.1, 10.0.0.2) или внешних сервисов (например, 8.8.8.8, 8.8.4.4) или закрыть нежелательные порты (например, 25, 465, 587).
Конфигурация
"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
| Field | Type | Description |
|---|---|---|
blockedIps | array | Список IP-адресов или CIDR-подсетей (IPv4/IPv6), которые будут заблокированы плагином. Можно использовать списки из конфигурации Shared Lists. Примеры: 192.168.1.1, 10.0.0.0/8, 2001:db8::/32. |
blockedPorts | array | Список портов, которые будут заблокированы плагином. |
enabled | boolean | Включает или выключает плагин, по умолчанию выключен |
Connection Drop
Connection Drop – это не полноценный плагин, а небольшая надстройка для того, чтобы была возможность добавлять IP-адреса в whitelist для функционала Connection Drop.
Начиная с версии Remnawave Node v2.6.0 – и при включении директивы cap_add: NET_ADMIN – Remnawave Node автоматически сбрасывает соединения при удалении пользователя из Xray-Core. В случае использования мостов – это могло привести к тому, что мостовое соединение могло быть разорвано в результате работы этой функции.
Начиная с версии Remnawave Node v2.7.0 – вы можете включить whitelist для функционала Connection Drop.
Функции Connection Drop будут работать всегда, здесь настраивается только включение или выключение whitelist для этого функционала.
Конфигурация
"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | Включает или выключает плагин, по умолчанию выключен |
whitelistIps | array | Список IP-адресов, которые будут добавлены в whitelist для функционала Connection Drop. |
Shared Lists
Shared Lists – это список IP-адресов, которые могут быть использованы в других плагинах.
Конфигурация
"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 | Имя списка, должно начинаться с ext: |
type | string | Тип списка, должен быть ipList |
items | array | Список IP-адресов или CIDR-подсетей (IPv4/IPv6). Примеры: 127.0.0.1, 10.0.0.0/8, 2001:db8::/32. |
Пример использования в конфигурации Torrent Blocker:
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}
Executor
Executor позволяет вам отправлять команды на выполнение: временная блокировка IP-адресов, снятие блокировки IP-адресов, сброс таблицы nftables.
Для его работы необязательно иметь включенные плагины, однако директива cap_add: NET_ADMIN должна быть обязательно включена.
Block IPs
Команда предназначена для временной блокировки IP-адресов. Вы можете указать несколько адресов и время блокировки в секундах. 0 – означает до момента перезапуска Remnawave Node или изменения конфигурации плагина, который привязан на этой ноде.
Пожалуйста, не используйте эту команду для перманентной блокировки IP-адресов. Используйте плагин Ingress Filter для этого.
Unblock IPs
Команда предназначена для снятия блокировки IP-адресов. При ее выполнении – будет отправлен запрос на снятие IP-адреса из таблицы nftables.
Reset nftables
Команда предназначена для сброса таблицы nftables. При ее выполнении – будет отправлен запрос на пересоздание таблицы nftables.