Files
panel/docs/learn/node-plugins.md
2026-03-07 20:03:30 +03:00

410 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebar_position: 99
title: Node Plugins β
---
Плагины это дополнительные модули, которые можно активировать на Remnawave Node для дополнительных функций: **Torrent Blocker**, **Blacklist**, настройка **Connection Drop**.
<!-- truncate -->
:::warning
🚧 Эта страница находится в стадии разработки.
:::
:::tip
Плагины для нод доступны начиная с версии Remnawave Panel & Remnawave Node **v2.7.0**.
:::
<img src={require('/node-plugins/plugins-preview.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node Plugins" />
## Требования
Для корректной работы плагинов в обязательном порядке требуется добавить директиву `cap_add: NET_ADMIN` в конфигурацию Remnawave Node.
```yaml title="docker-compose.yml"
services:
remnanode:
container_name: remnanode
hostname: remnanode
image: remnawave/node:latest
network_mode: host
restart: always
// highlight-next-line-green
cap_add:
// highlight-next-line-green
- NET_ADMIN
ulimits:
nofile:
soft: 1048576
hard: 1048576
environment:
- NODE_PORT=<NODE_PORT>
- SECRET_KEY=<SECRET_KEY>
```
Так же вы должны убедиться, что на хостовой машине доступен `nftables`. Впрочем, он уже установлен по умолчанию на большинстве дистрибутивов.
```bash title="Проверка версии nftables"
nft --version
```
:::danger
Отнеситесь к настройке плагинов с осторожностью, плагины Torrent Blocker и Blacklist будут работать напрямую с фаерволом на вашем сервере.
:::
<details>
<summary>Какую именно таблицу создаст Remnawave Node для работы плагинов?</summary>
```nftables title="nftables"
table ip remnanode {
set blacklist {
type ipv4_addr
flags timeout
}
set torrent-blocker {
type ipv4_addr
flags timeout
}
chain input {
type filter hook input priority filter - 10; policy accept;
ip saddr @blacklist log prefix "blacklist: " drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " drop
}
chain forward {
type filter hook forward priority filter - 10; policy accept;
ip saddr @blacklist log prefix "blacklist: " drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " drop
}
}
table ip6 remnanode6 {
set blacklist6 {
type ipv6_addr
flags timeout
}
set torrent-blocker6 {
type ipv6_addr
flags timeout
}
chain input {
type filter hook input priority filter - 10; policy accept;
ip6 saddr @blacklist6 log prefix "blacklist: " drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " drop
}
chain forward {
type filter hook forward priority filter - 10; policy accept;
ip6 saddr @blacklist6 log prefix "blacklist: " drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " drop
}
}
```
</details>
## Структура конфигурации
<img src={require('/node-plugins/configuration.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node Plugins" />
```json title="Plugin configuration"
{
"blacklist": {
"ip": [],
"enabled": false
},
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
"connectionDrop": {
"enabled": false,
"whitelistIps": []
},
"sharedLists": []
}
```
:::tip
Редактор конфигурации плагинов поддерживает подсказки (наведитесь на объект, чтобы прочитать описание), а так же автокомплит.
:::
## Torrent Blocker
:::danger
Для работы этого плагина необходима **минимальная** версия Xray-Core **??.??.??**. Эта версия ядра идет по умолчанию с Remnawave Node **v2.7.0**.
:::
Torrent Blocker это плагин, который блокирует IP-адрес, с которого был обнаружен Torrent-трафик.
### Конфигурация
```json
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
```
| Field | Type | Description |
| --------------- | ------- | --------------------------------------------------------------------------- |
| `enabled` | boolean | Включает или выключает плагин, по умолчанию выключен |
| `ignoreLists` | object | Список IP-адресов и ID пользователей, которые будут игнорироваться плагином |
| `blockDuration` | number | Время блокировки в секундах |
```jsonc title="ignoreLists"
{
"ip": [],
"userId": []
}
```
| Field | Type | Description |
| -------- | ----- | ----------------------------------------------------------------------------------------------------------------- |
| `ip` | array | Список IP-адресов, которые будут игнорироваться плагином. Можно использовать списки из конфигурации Shared Lists. |
| `userId` | array | Список ID пользователей, которые будут игнорироваться плагином |
### Техническая информация
Плагин использует одно из нововведений в Xray-Core `webhook` (PR: [#5722](https://github.com/XTLS/Xray-core/pull/5722)). Поэтому для работы плагина необходима версия Xray-Core **??.??.??** или выше.
<details>
<summary>Как включение плагина влияет на конфигурацию Xray-Core</summary>
Если этот плагин включен, Remnawave Node автоматически применит необходимые изменения в конфигурацию Xray-Core, с вашей стороны кроме включения плагина ничего делать не требуется.
:::warning
Как и написано выше здесь описывается лишь то, что именно будет изменено в конфигурации Xray-Core. **Не добавляйте эти изменения вручную**, они будут применены автоматически.
:::
```json
{
"inbounds": [],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
},
// highlight-next-line-green
{
// highlight-next-line-green
"tag": "RW_TB_OUTBOUND_BLOCK",
// highlight-next-line-green
"protocol": "blackhole"
// highlight-next-line-green
}
],
"routing": {
"rules": [
// highlight-next-line-green
{
// highlight-next-line-green
"protocol": [
// highlight-next-line-green
"bittorrent"
// highlight-next-line-green
],
// highlight-next-line-green
"outboundTag": "RW_TB_OUTBOUND_BLOCK",
// highlight-next-line-green
"webhook": {
// highlight-next-line-green
"url": "<REPLACED IN RUNTIME BY REMNAWAVE NODE>",
// highlight-next-line-green
"deduplication": 30
// highlight-next-line-green
}
}
]
}
}
```
Правило всегда будет помещаться в начало массива `rules`, перед остальными правилами. А `outbound` будет всегда добавляться в конец массива `outbounds`.
</details>
### Принцип работы
В рамках Xray-Core **невозможно** полностью блокировать Torrent-трафик. Xray-Core способен отслеживать только ~10-30% torrent-трафика, поэтому под "блокировкой" имеется в виду то, что после изначального обнаружения хотя бы одного `пакета` IP-адрес, с которого пришел этот пакет, будет заблокирован на время, указанное в конфигурации.
После получения `пакета`, Xray-Core отправит информацию о нем в `webhook`, который будет обрабатываться Remnawave Node. После его получения Remnawave Node моментально блокирует IP-адрес (в `nftables`), а так же обрывает соединение (аналог команды `ss -k`, `conntrack -D`).
Итак, принцип работы по пунктам можно описать вот так:
1. Remnawave Node добавляет необходимые изменения в конфигурацию Xray-Core.
2. Пользователь использует торрент
3. Его трафик попадает под правило, добавленное Remnawave Node в конфигурацию Xray-Core.
4. Xray-Core отправляет информацию о пакете в `webhook`.
5. Remnawave Node блокирует IP-адрес и обрывает соединение.
6. В течении ~15-30 секунд эта информация будет передана в Remnawave Panel.
7. Remnawave Panel отправит уведомление администратору в Telegram и так же отправит вебхук (`torrent_blocker.report`, scope: `torrent_blocker`).
:::info
Важно заметить, что дальнейшие действия относительно нарушителя вам необходимо реализовать самостоятельно. Remnawave Panel предоставляет все возможности для этого. После получения вебука от панели вы можете перевести пользователя в статус `DISABLED`, если хотите чтобы пользователь не смог подключаться ко всем серверам.
:::
<details>
<summary>Что придет в вебхуке (`torrent_blocker.report`)</summary>
Вебхук будет содержать полный объект уже знакомых нам объектов `node` и `user`, а так же объект `report`, который содержит всю доступную информацию.
```json
{
"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
}
}
}
}
```
</details>
## Blacklist
Blacklist это плагин, который перманентно блокирует IP-адрес, который находится в списке.
### Конфигурация
```json
"blacklist": {
"ip": [],
"enabled": false
}
```
| Field | Type | Description |
| --------- | ------- | ---------------------------------------------------------------------------------------------------------------- |
| `enabled` | boolean | Включает или выключает плагин, по умолчанию выключен |
| `ip` | array | Список IP-адресов, которые будут заблокированы плагином. Можно использовать списки из конфигурации Shared Lists. |
### Принцип работы
IP-адреса, указанные в списке будут заблокированы в `nftables`.
:::danger
Blacklist это очень опасный инструмент. Будьте внимательны и осторжожны при составлении списков.
:::
## 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.
:::note
Функции Connection Drop будут работать **всегда**, здесь настраиваться только включения или выключения белого списка для этого функционала.
:::
### Конфигурация
```json
"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
```
| Field | Type | Description |
| -------------- | ------- | --------------------------------------------------------------------------------------- |
| `enabled` | boolean | Включает или выключает плагин, по умолчанию выключен |
| `whitelistIps` | array | Список IP-адресов, которые будут добавлены в whitelist для функционала Connection Drop. |
## Shared Lists
Shared Lists это список IP-адресов, которые могут быть использованы в других плагинах.
### Конфигурация
```json
"sharedLists": [
{
"name": "ext:my-list",
"type": "ipList",
"items": ["127.0.0.1", "127.0.0.2"]
}
]
```
| Field | Type | Description |
| ------- | ------ | -------------------------------------- |
| `name` | string | Имя списка, должно начинаться с `ext:` |
| `type` | string | Тип списка, должен быть `ipList` |
| `items` | array | Список IP-адресов |
Пример использования в конфигурации Torrent Blocker:
```json
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}
```