في هذا المثال، سنستعرض كيفية إعداد توجيه الخادم باستخدام مستخدمي الخدمة في لوحة Remnawave.
توجيه الخادم
قد يواجه بعض المستخدمين مشكلة تتمثل في أن Remnawave يقوم تلقائيًا بمسح مصفوفة clients من تكوين الخادم. هذا ليس خطأً أو عيبًا؛ فاللوحة تقوم تلقائيًا بمسح هذه المصفوفات لأن بعض وظائف اللوحة تتطلب التأكد من عدم وجود أي بيانات غير ضرورية في هذه المصفوفة.
لنفترض أن لدينا خادمين: RU-001 وDE-001.
سيتصل المستخدمون بالخادم RU-001، وسنقوم بـ توجيه حركة المرور: إرسال مواقع .ru مباشرةً، وكل شيء آخر إلى الخادم DE-001.
لحل هذه المهمة، نحتاج إلى إنشاء مستخدم خدمة سنجري من خلاله عملية التوجيه.
إنشاء ملف تعريف لـ DE-001
انتقل إلى قسم Config Profiles وأنشئ ملف تعريف جديدًا، وأعطه اسم Bridge Profile.
{
"log": {
"loglevel": "warning"
},
"dns": {},
"inbounds": [
{
"tag": "BRIDGE_DE_IN",
"port": 9999,
"listen": "0.0.0.0",
"protocol": "shadowsocks",
"settings": {
"clients": [],
"network": "tcp,udp"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls", "quic"]
}
}
],
"outbounds": [
{
"tag": "DIRECT",
"protocol": "freedom"
},
{
"tag": "BLOCK",
"protocol": "blackhole"
}
],
"routing": {
"rules": []
}
}
احفظ التكوين المحدَّث.
انتقل إلى قسم Internal Squad (لإنشاء فريق جديد انقر على علامة الجمع في الزاوية اليمنى). في هذا الفريق، قم بتفعيل الـ inbound المنشأ حديثًا BRIDGE_DE_IN من ملف التعريف Bridge Profile.
تأكد كذلك من تفعيل هذا الـ inbound وملف التعريف في بطاقة العقدة — في حالتنا، عقدة DE-001.
إنشاء مستخدم الخدمة
انتقل إلى قسم Users، وأنشئ مستخدمًا باسم bridge_user_001. تأكد من عدم وجود حد للبيانات لهذا المستخدم، وضع تاريخ انتهاء الاشتراك نحو عام 2099. (فنحن لا نريد أن تقوم اللوحة بتعطيل المستخدم بسبب بلوغ حد البيانات أو انتهاء صلاحية الاشتراك.)
لا تنسَ تفعيل الفريق لهذا المستخدم — في حالتنا، نفعّل الفريق الذي أنشأناه أعلاه.
بعد إنشاء المستخدم بنجاح، افتح بطاقته ومن القائمة (زر More Actions) انقر على قسم Detailed Info.
في هذا القسم، انزل إلى الأسفل وبحسب نوع الـ inbound لديك، انسخ المعلومات المطلوبة.
| البروتوكول | التسمية في اللوحة |
|---|---|
| Shadowsocks | SS Password |
| VLESS | VLESS UUID |
| Trojan | Trojan Password |
في النهاية، يجب أن يكون بحوزتك كلمة مرور للاتصال.
إعداد ملف التعريف العام
من المرجح أن هذا الملف موجود بالفعل لديك، ويستخدمه المستخدمون للاتصال. لا حاجة للمس قسم inbounds فيه؛ ما يهمنا هو قسم outbounds وrouting.rules.
{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "PUBLIC_RU_INBOUND",
"port": 443,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": { "clients": [], "decryption": "none" },
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] },
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"target": "USE OWN VALUE!",
"show": false,
"xver": 0,
"shortIds": [""],
"privateKey": "USE OWN KEY!",
"serverNames": ["REPLACE WITH OWN VALUES!"]
}
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "DIRECT" },
{ "protocol": "blackhole", "tag": "BLOCK" }
],
"routing": {
"rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{
"domain": ["geosite:private"],
"outboundTag": "BLOCK"
},
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" }
]
}
}
إذن، المهمة الأساسية أمامنا: يتصل المستخدمون بالخادم RU-001 عبر بروتوكول VLESS، ثم نعيد توجيه حركة المرور.
Outbound
أولًا، نحتاج إلى بناء الـ outbound.
{
"tag": "SS_OUTBOUND_TO_DE",
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "ADDRESS OF DE-001",
"password": "PASSWORD FROM PREVIOUS STEP",
"port": 9999,
"level": 0,
"method": "chacha20-ietf-poly1305"
}
]
}
}
| القيمة | ما يجب إدخاله |
|---|---|
| address | عنوان IP أو اسم النطاق الموجَّه نحو خادمك، مثلًا عنوان IP لخادم DE-001 |
| port | منفذ الـ inbound، في حالتنا هو منفذ BRIDGE_DE_IN |
| password | كلمة مرور المستخدم للاتصال (قد تختلف القيم بحسب البروتوكول، انظر أعلاه) |
في حالة Shadowsocks — لا تستخدم أي طريقة سوى chacha20-ietf-poly1305، لأن Remnawave يدعم هذه الطريقة فقط.
التوجيه
مثال على قاعدة تُرسل كل حركة المرور إلى الـ outbound المحدد أعلاه.
{
"inboundTag": ["PUBLIC_RU_INBOUND"],
"outboundTag": "SS_OUTBOUND_TO_DE"
}
مثال على قواعد تُرسل مواقع RU مباشرةً (خروجًا من عقدة RU-001)، وكل شيء آخر إلى DE-001.
{
"ip": [
"geoip:ru"
],
"outboundTag": "DIRECT"
},
{
"domain": [
"geosite:category-ru"
],
"outboundTag": "DIRECT"
}
الآن نجمع التكوين الكامل، وسيبدو هكذا.
{
"log": { "loglevel": "none" },
"inbounds": [
{
"tag": "PUBLIC_RU_INBOUND",
"port": 443,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": { "clients": [], "decryption": "none" },
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] },
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"target": "USE OWN VALUE!",
"show": false,
"xver": 0,
"shortIds": [""],
"privateKey": "USE OWN KEY!",
"serverNames": ["REPLACE WITH OWN VALUES!"]
}
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "DIRECT" },
{ "protocol": "blackhole", "tag": "BLOCK" },
{
"tag": "SS_OUTBOUND_TO_DE",
"protocol": "shadowsocks",
"settings": {
"servers": [
{
"address": "ADDRESS OF DE-001",
"password": "PASSWORD FROM PREVIOUS STEP",
"port": 9999,
"level": 0,
"method": "chacha20-ietf-poly1305"
}
]
}
}
],
"routing": {
"rules": [
{ "ip": ["geoip:private"], "outboundTag": "BLOCK" },
{ "domain": ["geosite:private"], "outboundTag": "BLOCK" },
{ "protocol": ["bittorrent"], "outboundTag": "BLOCK" },
{ "ip": ["geoip:ru"], "outboundTag": "DIRECT" },
{ "domain": ["geosite:category-ru"], "outboundTag": "DIRECT" },
{
"inboundTag": ["PUBLIC_RU_INBOUND"],
"outboundTag": "SS_OUTBOUND_TO_DE"
}
]
}
}
بذلك أضفنا SS_OUTBOUND_TO_DE إلى مصفوفة outbounds، وأضفنا القواعد إلى مصفوفة rules داخل كائن routing.
تعمل القواعد في Xray بمبدأ الترتيب. يمكن تفسير قواعدنا تقريبًا على النحو التالي:
- إذا كان عنوان IP ضمن
geoip:private— BLOCK (يُرسل إلى الـ outbound BLOCK الذي هو blackhole أي يُحجب). - إذا كان النطاق ضمن فئة
geosite:private— نفس الإجراء. - كذلك بالنسبة لحركة مرور
bittorrent. - إذا كان عنوان IP ضمن
geoip:ru— يُرسل إلىDIRECTOutbound، وبالتالي تخرج حركة المرور من خادمRU-001. - إذا كان النطاق ضمن فئة
geosite:category-ru— يُرسل أيضًا إلىDIRECT. - إذا جاءت حركة المرور من الـ inbound
PUBLIC_RU_INBOUND— نرسلها إلىSS_OUTBOUND_TO_DE(ثم تنتقل إلى خادمناDE-001).
الخاتمة
في هذا المثال حصلنا على المخطط التالي:
- يتصل المستخدم بالخادم
RU-001باستخدام بروتوكولVLESS - تخضع حركة المرور للقواعد:
- مواقع (أو IP) روسية — تخرج مباشرةً (DIRECT)
- كل حركة المرور الأخرى — تُرسل عبر بروتوكول
shadowsocksإلى الخادمDE-001
يمكن كذلك استخدام VLESS كبروتوكول عبور، والفرق الرئيسي سيكون في الـ outbound فقط.