メインコンテンツまでスキップ

Node Plugins β

プラグインは、Remnawave Nodeで追加機能を有効にできる追加モジュールです:Torrent BlockerIngress FilterEgress FilterConnection Drop の設定。

ヒント

ノードプラグインはRemnawave Panel & Remnawave Node v2.7.0 バージョン以降で利用可能です。

Node Plugins

要件

プラグインが正しく動作するには、Remnawave Nodeの設定に cap_add: NET_ADMIN ディレクティブを必ず追加する必要があります。

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

ホストマシンで nftables が利用可能であることを確認してください。最近のほとんどのディストリビューションではデフォルトでインストールされています。

nftablesのバージョン確認
nft --version

Linuxカーネル

カーネルバージョン 5.7 以降が必要です。

カーネルバージョン確認
uname -r

注意: カーネルバージョンが5.7未満の場合、プラグインは動作しません。カーネルをアップデートするか、ディストリビューションのドキュメントを参照してください。

危険

プラグインの設定には注意が必要です。Torrent Blocker、Ingress Filter、Egress Filterプラグインはサーバーのファイアウォールに直接作用します。

Remnawave Nodeがプラグインのために作成するテーブルの詳細
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
}
}

CIDRサポート

備考

CIDR表記(IPv4およびIPv6)は次のプラグインでサポートされています:Ingress FilterEgress FilterShared Lists

Torrent BlockerignoreLists.ip)および Connection DropwhitelistIps)プラグインではCIDR表記はサポートされていません。具体的なIPアドレスのみを指定してください。

有効なCIDR値の例:192.168.1.110.0.0.0/8172.16.0.0/122001:db8::12001:db8::/32

設定構造

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": []
}
ヒント

プラグイン設定エディタはツールチップ(オブジェクトにカーソルを合わせると説明が表示されます)とオートコンプリートをサポートしています。

Torrent Blocker

危険

このプラグインの動作にはXray-Coreの最低バージョン – 26.3.27 が必要です。このカーネルバージョンはRemnawave Node v2.7.0 にデフォルトで含まれています。

警告

Torrent Blockerが正しく動作するために、必要なプロトコルを含む destOverridesniffinginboundで必ず有効になっている必要があります。sniffingが有効でない場合、Xray-Coreはトラフィックのプロトコル(bittorrentを含む)を特定できず、Torrent Blockerのルーティングルールは機能しません。

"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}

Torrent Blockerは、Torrentトラフィックが検出されたIPアドレスをブロックするプラグインです。

設定

"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
FieldTypeDescription
enabledbooleanプラグインを有効または無効にします。デフォルトで無効
ignoreListsobjectプラグインに無視されるIPアドレスとユーザーIDのリスト
blockDurationnumberブロック時間(秒単位)
includeRuleTagsarrayオプションフィールド。ルーティングルールの ruleTag 値の配列。これらに基づいてもIPアドレスのブロックが実行されます。
ignoreLists
{
"ip": [],
"userId": []
}
FieldTypeDescription
iparrayプラグインに無視されるIPアドレスのリスト(CIDRはサポートされていません)。Shared Lists設定のリストを使用できます。
userIdarrayプラグインに無視されるユーザーIDのリスト
includeRuleTags — 追加のルーティングルールによるブロック

デフォルトでは、Torrent Blockerは独自のルーティングルールを作成し、routing.rules 配列の最初の要素として追加します。このルールは bittorrent プロトコルのみを監視します。

しかし、Xray-Core設定にすでにTorrentトラフィックに関連するカスタムルーティングルールruleTag付き)がある場合、それらを includeRuleTags に指定できます。この場合、Torrent Blockerは自身のルールだけでなく、指定されたすべてのルールで検出されたIPアドレスもブロックします。

Xray-Core設定に次のルーティングルールがあると仮定します:

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

最初のルールはパブリックTorrentトラッカーのドメインでトラフィックをブロックし、2番目はTorrentクライアントが通常使用するポートでブロックします。

Torrent Blockerがこれらのルールのトリガーを処理してIPアドレスをブロックするには、includeRuleTags にそれらの ruleTag を指定します:

includeRuleTagsを使ったTorrent Blocker設定
"torrentBlocker": {
"enabled": true,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600,
"includeRuleTags": ["TORRENT_BY_DOMAIN", "TORRENT_BY_PORT"]
}

その結果、Xray-Coreが TORRENT_BY_DOMAIN または TORRENT_BY_PORT ルールに該当するトラフィックを検出すると、Torrent Blockerは bittorrent プロトコルの独自ルールがトリガーされた場合と同様に送信元IPアドレスをブロックします。

技術情報

プラグインはXray-Coreの新機能の一つ – webhook(PR:#5722)を使用します。そのため、プラグインの動作にはXray-Core 26.3.27 以降が必要です。

プラグインの有効化が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": 5
}
}
]
}
}

ルールは常に rules 配列の先頭(他のルールの前)に配置され、outbound は常に outbounds 配列の末尾に追加されます。

動作原理

Xray-Coreの枠組みでは、Torrentトラフィックを完全にブロックすることは不可能です。Xray-CoreはTorrentトラフィックの約10-30%しか追跡できないため、「ブロック」とは、少なくとも1つのパケットが最初に検出された後、そのパケットの送信元IPアドレスが設定で指定された時間だけブロックされることを意味します。

パケットを受信後、Xray-Coreはその情報をRemnawave Nodeが処理するwebhookに送信します。受信後、Remnawave Nodeは即座にIPアドレスを(nftablesで)ブロックし、接続も切断します(ss -kconntrack -Dコマンドと同等)。

動作原理を箇条書きで説明すると:

  1. Remnawave NodeがXray-Core設定に必要な変更を追加します。
  2. ユーザーがTorrentを使用します。
  3. そのトラフィックがRemnawave NodeがXray-Core設定に追加したルールに該当します。
  4. Xray-Coreがパケット情報をwebhookに送信します。
  5. Remnawave NodeがIPアドレスをブロックし、接続を切断します。
  6. 約15-30秒以内にこの情報がRemnawave Panelに送信されます。
  7. Remnawave PanelがTelegramで管理者に通知を送り、webhook(torrent_blocker.report、スコープ:torrent_blocker)も送信します。
備考

違反者に対するその後の対応はご自身で実装する必要があります。Remnawave Panelはそのためのすべての機能を提供しています。パネルからwebhookを受信した後、ユーザーがすべてのサーバーに接続できないようにするには、ユーザーのステータスを DISABLED に変更することができます。

webhook(torrent_blocker.report)で受信される内容

webhookには、既知の nodeuser オブジェクトの完全なオブジェクト、および利用可能なすべての情報を含む 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
}
FieldTypeDescription
enabledbooleanプラグインを有効または無効にします。デフォルトで無効
blockedIpsarrayプラグインによってブロックされるIPアドレスまたはCIDRサブネット(IPv4/IPv6)のリスト。Shared Lists設定のリストを使用できます。例:192.168.1.110.0.0.0/82001:db8::/32

動作原理

リストに指定されたIPアドレスは nftables でブロックされます。

危険

Ingress Filterは非常に危険なツールです。リストを作成する際は注意深く、慎重に行ってください。

Egress Filter

Egress Filterは送信トラフィックをブロックするプラグインです。宛先側の特定のIPアドレスやポートへの接続を禁止できます。 例えば、内部サービス(例:10.0.0.1、10.0.0.2)や外部サービス(例:8.8.8.8、8.8.4.4)の特定IPアドレスへのアクセスをブロックしたり、不要なポート(例:25、465、587)を閉じたりできます。

設定

"egressFilter": {
"blockedIps": [],
"blockedPorts": [],
"enabled": false
}
FieldTypeDescription
blockedIpsarrayプラグインによってブロックされるIPアドレスまたはCIDRサブネット(IPv4/IPv6)のリスト。Shared Lists設定のリストを使用できます。例:192.168.1.110.0.0.0/82001:db8::/32
blockedPortsarrayプラグインによってブロックされるポートのリスト。
enabledbooleanプラグインを有効または無効にします。デフォルトで無効

Connection Drop

Connection Dropは完全なプラグインではなく、Connection Drop機能のためにIPアドレスをホワイトリストに追加できる小さなアドオンです。

Remnawave Node v2.6.0 以降、cap_add: NET_ADMIN ディレクティブが有効な場合、Remnawave NodeはXray-CoreからユーザーをDELETEする際に自動的に接続を切断します。ブリッジを使用している場合、この機能によりブリッジ接続が切断される可能性がありました。

Remnawave Node v2.7.0 以降、Connection Drop機能のホワイトリストを有効にできます。

注記

Connection Drop機能は常に動作します。ここでは、この機能のホワイトリストの有効化または無効化のみを設定します。

設定

"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
FieldTypeDescription
enabledbooleanプラグインを有効または無効にします。デフォルトで無効
whitelistIpsarrayConnection Drop機能のホワイトリストに追加されるIPアドレスのリスト。

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"]
}
]
FieldTypeDescription
namestringリスト名。ext: で始まる必要があります
typestringリストのタイプ。ipList でなければなりません
itemsarrayIPアドレスまたはCIDRサブネット(IPv4/IPv6)のリスト。例:127.0.0.110.0.0.0/82001:db8::/32

Torrent Blocker設定での使用例:

"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": ["ext:my-list"]
},
"blockDuration": 3600
}

Executor

Executor

Executorを使用すると、コマンドを送信して実行できます:IPアドレスの一時的なブロック、IPアドレスのブロック解除、nftables テーブルのリセット。

警告

動作するためにプラグインを有効にする必要はありませんが、cap_add: NET_ADMIN ディレクティブは必ず有効にする必要があります。

Block IPs

Node Plugins

このコマンドはIPアドレスの一時的なブロックのためのものです。複数のアドレスとブロック時間(秒単位)を指定できます。0 – このノードに関連付けられたプラグイン設定の変更またはRemnawave Nodeの再起動まで。

ヒント

このコマンドをIPアドレスの永久的なブロックに使用しないでください。そのためには Ingress Filter プラグインを使用してください。

Unblock IPs

Node Plugins

このコマンドはIPアドレスのブロック解除のためのものです。実行すると、nftables テーブルからIPアドレスを削除するリクエストが送信されます。

Reset nftables

このコマンドは**nftables テーブルのリセット**のためのものです。実行すると、nftables テーブルを再作成するリクエストが送信されます。