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 – 26.3.27. يأتي هذا الإصدار من النواة افتراضياً مع Remnawave Node v2.7.0.
لكي يعمل Torrent Blocker بشكل صحيح، يجب أن يكون sniffing مع destOverride الذي يشمل البروتوكولات اللازمة مفعّلاً في inbound الخاص بك بشكل إلزامي. بدون تفعيل الـsniffing، لن يتمكن Xray-Core من تحديد بروتوكول حركة المرور (بما في ذلك bittorrent)، ولن تُطبَّق قاعدة التوجيه الخاصة بـTorrent Blocker.
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
}
Torrent Blocker هو إضافة تحجب عنوان IP الذي اكتُشف منه حركة مرور التورنت.
الإعداد
"torrentBlocker": {
"enabled": false,
"ignoreLists": {
"ip": [],
"userId": []
},
"blockDuration": 3600
},
| Field | Type | Description |
|---|---|---|
enabled | boolean | تُفعّل الإضافة أو تُوقفها، معطّلة افتراضياً |
ignoreLists | object | قائمة عناوين IP ومعرّفات المستخدمين التي ستُتجاهل من قِبَل الإضافة |
blockDuration | number | مدة الحجب بالثواني |
includeRuleTags | array | حقل اختياري. مصفوفة من قيم ruleTag من قواعد التوجيه الخاصة بك، وفقها سيُنفَّذ حجب عناوين IP أيضاً. |
{
"ip": [],
"userId": []
}
| Field | Type | Description |
|---|---|---|
ip | array | قائمة عناوين IP التي ستُتجاهل من قِبَل الإضافة (CIDR غير مدعوم). يمكن استخدام القوائم من إعداد Shared Lists. |
userId | array | قائمة معرّفات المستخدمين التي ستُتجاهل من قِبَل الإضافة |
includeRuleTags — الحجب وفق قواعد التوجيه الإضافية
يُنشئ Torrent Blocker افتراضياً قاعدة توجيه خاصة به ويضيفها كـالعنصر الأول في مصفوفة routing.rules. تتتبع هذه القاعدة بروتوكول bittorrent فقط.
أما إذا كانت في إعداد Xray-Core الخاص بك قواعد توجيه مخصصة بعلامات (ruleTag) مرتبطة أيضاً بحركة مرور التورنت، يمكنك تحديدها في includeRuleTags. في هذه الحالة سيحجب Torrent Blocker عناوين IP المكتشفة ليس فقط عبر قاعدته، بل عبر جميع القواعد المحددة أيضاً.
مثال
لنفترض أن إعداد 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 Blocker تشغيل هذه القواعد ويحجب عناوين IP وفقها، حدّد قيم ruleTag الخاصة بها في includeRuleTags:
"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 عنوان IP المصدر تماماً كما لو أن قاعدته الخاصة ببروتوكول bittorrent قد اشتُغلت.
المعلومات التقنية
تستخدم الإضافة أحد المستجدات في 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 يستحيل حجب حركة مرور التورنت بشكل كامل. يستطيع Xray-Core تتبع 10-30% فقط من حركة مرور التورنت، لذا يعني "الحجب" هنا أنه بعد الاكتشاف المبدئي لحزمة واحدة على الأقل – سيُحجب عنوان 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 وكذلك تُرسل webhook (
torrent_blocker.report، النطاق:torrent_blocker).
من المهم ملاحظة أن الإجراءات التالية تجاه المخالف يتعين عليك تنفيذها بنفسك. توفر Remnawave Panel جميع الإمكانيات لذلك. بعد استقبال الـwebhook من اللوحة – يمكنك تغيير حالة المستخدم إلى DISABLED إذا أردت منعه من الاتصال بجميع الخوادم.
ما الذي سيرد في الـwebhook (torrent_blocker.report)
سيحتوي الـwebhook على الكائن الكامل للكائنين المعروفَين 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 إلى القائمة البيضاء لوظيفة Connection Drop.
اعتباراً من الإصدار Remnawave Node v2.6.0 – وعند تفعيل التوجيه cap_add: NET_ADMIN – يقوم Remnawave Node تلقائياً بإسقاط الاتصالات عند إزالة مستخدم من Xray-Core. في حالة استخدام الجسور، كان يمكن أن يؤدي هذا إلى انقطاع الاتصال الجسري نتيجة عمل هذه الوظيفة.
اعتباراً من الإصدار Remnawave Node v2.7.0 – يمكنك تفعيل القائمة البيضاء لوظيفة Connection Drop.
ستعمل وظائف Connection Drop دائماً، وهنا يُضبط فقط تفعيل أو تعطيل القائمة البيضاء لهذه الوظيفة.
الإعداد
"connectionDrop": {
"enabled": false,
"whitelistIps": []
}
| Field | Type | Description |
|---|---|---|
enabled | boolean | تُفعّل الإضافة أو تُوقفها، معطّلة افتراضياً |
whitelistIps | array | قائمة عناوين IP التي ستُضاف إلى القائمة البيضاء لوظيفة 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.