docs: enhance node plugins documentation

This commit is contained in:
kastov
2026-03-15 07:53:47 +03:00
parent 7c9693276f
commit ef696a7dd4

View File

@@ -21,7 +21,7 @@ title: Node Plugins β
<img src={require('/node-plugins/plugins-preview.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node Plugins" />
## Требования
## Требования {#requirements}
Для корректной работы плагинов в обязательном порядке требуется добавить директиву `cap_add: NET_ADMIN` в конфигурацию Remnawave Node.
@@ -46,12 +46,24 @@ services:
- SECRET_KEY=<SECRET_KEY>
```
Так же вы должны убедиться, что на хостовой машине доступен `nftables`. Впрочем, он уже установлен по умолчанию на большинстве дистрибутивов.
#### nftables {#nftables}
Убедитесь, что на хостовой машине доступен `nftables`. На большинстве современных дистрибутивов он уже установлен по умолчанию.
```bash title="Проверка версии nftables"
nft --version
```
#### Linux-ядро {#linux-kernel-version}
Требуется версия ядра **5.17** или выше.
```bash title="Проверка версии ядра"
uname -r
```
> **Примечание:** если версия ядра ниже 5.17, плагин работать не будет. Обновите ядро или обратитесь к документации вашего дистрибутива.
:::danger
Отнеситесь к настройке плагинов с осторожностью, плагины Torrent Blocker и Blacklist будут работать напрямую с фаерволом на вашем сервере.
@@ -63,49 +75,133 @@ nft --version
```nftables title="nftables"
table ip remnanode {
counter processed {
packets 53172 bytes 7154272
}
counter blacklist {
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 blacklist {
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;
ip saddr @blacklist log prefix "blacklist: " drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " drop
counter name "processed"
ip saddr @blacklist log prefix "blacklist: " counter name "blacklist" 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;
ip saddr @blacklist log prefix "blacklist: " drop
ip saddr @torrent-blocker log prefix "torrent-blocker: " drop
counter name "processed"
ip saddr @blacklist log prefix "blacklist: " counter name "blacklist" 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 blacklist6 {
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 blacklist6 {
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;
ip6 saddr @blacklist6 log prefix "blacklist: " drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " drop
counter name "processed"
ip6 saddr @blacklist6 log prefix "blacklist: " counter name "blacklist6" 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;
ip6 saddr @blacklist6 log prefix "blacklist: " drop
ip6 saddr @torrent-blocker6 log prefix "torrent-blocker: " drop
counter name "processed"
ip6 saddr @blacklist6 log prefix "blacklist: " counter name "blacklist6" 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
}
}
@@ -113,7 +209,7 @@ table ip6 remnanode6 {
</details>
## Структура конфигурации
## Структура конфигурации {#configuration-structure}
<img src={require('/node-plugins/configuration.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node Plugins" />
@@ -135,6 +231,11 @@ table ip6 remnanode6 {
"enabled": false,
"whitelistIps": []
},
"egressFilter": {
"enabled": false,
"blockedIps": [],
"blockedPorts": []
},
"sharedLists": []
}
```
@@ -145,7 +246,7 @@ table ip6 remnanode6 {
:::
## Torrent Blocker
## Torrent Blocker {#torrent-blocker}
:::danger
@@ -155,7 +256,7 @@ table ip6 remnanode6 {
Torrent Blocker это плагин, который блокирует IP-адрес, с которого был обнаружен Torrent-трафик.
### Конфигурация
### Конфигурация {#torrent-blocker-configuration}
```json
"torrentBlocker": {
@@ -186,7 +287,7 @@ Torrent Blocker это плагин, который блокирует IP-а
| `ip` | array | Список IP-адресов, которые будут игнорироваться плагином. Можно использовать списки из конфигурации Shared Lists. |
| `userId` | array | Список ID пользователей, которые будут игнорироваться плагином |
### Техническая информация
### Техническая информация {#technical-information}
Плагин использует одно из нововведений в Xray-Core `webhook` (PR: [#5722](https://github.com/XTLS/Xray-core/pull/5722)). Поэтому для работы плагина необходима версия Xray-Core **??.??.??** или выше.
@@ -252,7 +353,7 @@ Torrent Blocker это плагин, который блокирует IP-а
</details>
### Принцип работы
### Принцип работы {#principle-of-operation}
В рамках Xray-Core **невозможно** полностью блокировать Torrent-трафик. Xray-Core способен отслеживать только ~10-30% torrent-трафика, поэтому под "блокировкой" имеется в виду то, что после изначального обнаружения хотя бы одного `пакета` IP-адрес, с которого пришел этот пакет, будет заблокирован на время, указанное в конфигурации.
@@ -318,11 +419,11 @@ Torrent Blocker это плагин, который блокирует IP-а
</details>
## Blacklist
## Blacklist {#blacklist}
Blacklist это плагин, который перманентно блокирует IP-адрес, который находится в списке.
Blacklist это плагин, который перманентно блокирует IP-адрес, который находится в списке. **Blacklist фильтрует входящий (ingress) трафик**.
### Конфигурация
### Конфигурация {#blacklist-configuration}
```json
"blacklist": {
@@ -336,7 +437,7 @@ Blacklist это плагин, который перманентно бло
| `enabled` | boolean | Включает или выключает плагин, по умолчанию выключен |
| `ip` | array | Список IP-адресов, которые будут заблокированы плагином. Можно использовать списки из конфигурации Shared Lists. |
### Принцип работы
### Принцип работы {#blacklist-about}
IP-адреса, указанные в списке будут заблокированы в `nftables`.
@@ -346,7 +447,7 @@ Blacklist это очень опасный инструмент. Будьт
:::
## Connection Drop
## Connection Drop {#connection-drop}
Connection Drop это не полноценный плагин, а небольшая надстройка для того, чтобы была возможность добавлять IP-адреса в whitelist для функционала Connection Drop.
@@ -360,7 +461,7 @@ Connection Drop это не полноценный плагин, а небо
:::
### Конфигурация
### Конфигурация {#connection-drop-configuration}
```json
"connectionDrop": {
@@ -374,11 +475,32 @@ Connection Drop это не полноценный плагин, а небо
| `enabled` | boolean | Включает или выключает плагин, по умолчанию выключен |
| `whitelistIps` | array | Список IP-адресов, которые будут добавлены в whitelist для функционала Connection Drop. |
## Shared Lists
## Egress 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)_.
### Конфигурация {#egress-filter-configuration}
```json
"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
```
| Field | Type | Description |
| -------------- | ------- | ---------------------------------------------------------------------------------------------------------------- |
| `blockedIps` | array | Список IP-адресов, которые будут заблокированы плагином. Можно использовать списки из конфигурации Shared Lists. |
| `blockedPorts` | array | Список портов, которые будут заблокированы плагином. |
| `enabled` | boolean | Включает или выключает плагин, по умолчанию выключен |
## Shared Lists {#shared-lists}
Shared Lists это список IP-адресов, которые могут быть использованы в других плагинах.
### Конфигурация
### Конфигурация {#shared-lists-configuration}
```json
"sharedLists": [
@@ -408,7 +530,7 @@ Shared Lists это список IP-адресов, которые могу
}
```
## Executor
## Executor {#executor}
<img src={require('/node-plugins/executor.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Executor" />
@@ -418,7 +540,7 @@ Shared Lists это список IP-адресов, которые могу
Для его работы **необязательно** иметь включенные плагины, однако директива `cap_add: NET_ADMIN` должна быть **обязательно** включена.
:::
### Block IPs
### Block IPs {#block-ips}
<img src={require('/node-plugins/executor-ip-block.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node Plugins" />
@@ -430,12 +552,12 @@ Shared Lists это список IP-адресов, которые могу
:::
### Unblock IPs
### Unblock IPs {#unblock-ips}
<img src={require('/node-plugins/executor-ip-unblock.webp').default} width="100%" style={{borderRadius: '8px'}} alt="Node Plugins" />
Команда предназначена для **снятия блокировки IP-адресов**. При ее выполнении будет отправлен запрос на снятие IP-адреса из таблицы `nftables`.
### Reset nftables
### Reset nftables {#reset-nftables}
Команда предназначена для **сброса таблицы `nftables`**. При ее выполнении будет отправлен запрос на пересоздание таблицы `nftables`.