Traefik
نظرة عامة
في هذا الدليل سنستخدم Traefik كبروكسي عكسي للوصول إلى لوحة Remnawave. سنوجّه اسم النطاق إلى خادمنا ونُعدّ Traefik. سيتولى Traefik إصدار شهادات SSL بنفسه.
تحتاج إلى امتلاك اسم نطاق مسجّل للمتابعة.
توجيه النطاق إلى خادمك
تحقق من عنوان IP الخاص بخادمك. من الأفضل استخدام عنوان IPv4 ثابت.
الآن، تحتاج إلى توجيه اسم نطاقك إلى هذا العنوان IP.
على سبيل المثال، سيكون my-super-panel.com -> 193.122.122.122.
هناك طريقتان للقيام بذلك:
- استخدام مزوّد DNS (مثل Cloudflare، Google Cloud، إلخ.)
- استخدام مسجّل النطاق (مثل Namecheap، إلخ.)
مزوّد DNS
إذا كنت تستخدم Cloudflare، فتحتاج إلى إضافة سجل A/AAAA (لـ IPv4 وIPv6 على التوالي) إلى سجلات DNS الخاصة بك.
سجّل الدخول إلى حساب Cloudflare الخاص بك هنا وحدد النطاق المطلوب.
على الجانب الأيسر من الصفحة، انقر على DNS ثم انقر على Records. انقر على Create record.
اضبط Type على A وName على @.
إذا كنت تريد استخدام نطاقات فرعية، يجب إدخال اسم النطاق الفرعي (مثل panel) في حقل Name.
أدخل عنوان IP الخاص بخادمك في حقل IPv4 address وانقر على Save.
الآن تحتاج إلى الانتظار قليلاً حتى يتم تحديث سجلات DNS.
هناك فرق كبير بين السحابة الصفراء (النطاق يمر عبر وكيل Cloudflare) والسحابة الرمادية (النطاق لا يمر عبر وكيل Cloudflare) في لوحة تحكم Cloudflare.
إذا كان Cloudflare يعمل بشكل جيد في منطقتك، فمن الأفضل توجيه النطاق من خلال Cloudflare. (السحابة الصفراء)

بعض مزودي DNS لديهم واجهة مختلفة، لكن العملية العامة هي نفسها.
إعداد Traefik
إنشاء docker-compose.yml
أنشئ ملف docker-compose.yml في المجلد /opt/remnawave/traefik.
mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano docker-compose.yml
الصق الإعداد التالي.
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- remnawave-network
ports:
- '0.0.0.0:80:80'
- '0.0.0.0:443:443'
environment:
- TZ=UTC
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
- ./config:/config:ro
- ./logs:/var/log/traefik
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true
إنشاء ملف الإعداد الثابت
أنشئ ملف إعداد ثابت باسم traefik.yml في المجلد /opt/remnawave/traefik.
cd /opt/remnawave/traefik && nano traefik.yml
الصق الإعداد التالي.
يُرجى استبدال REPLACE_WITH_YOUR_EMAIL ببريدك الإلكتروني.
راجع الإعداد أدناه، ابحث عن الأسطر المميّزة باللون الأصفر.
api:
dashboard: true
debug: true
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
serversTransport:
insecureSkipVerify: true
providers:
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: REPLACE_WITH_YOUR_EMAIL
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: http
log:
level: "INFO"
filePath: "/var/log/traefik/traefik.log"
accessLog:
filePath: "/var/log/traefik/access.log"
إنشاء ملف الإعداد الديناميكي
أنشئ ملفاً باسم remnawave.yml في المجلد /opt/remnawave/traefik/config.
mkdir -p /opt/remnawave/traefik/config && cd /opt/remnawave/traefik/config && nano remnawave.yml
الصق الإعداد التالي.
يُرجى استبدال REPLACE_WITH_YOUR_DOMAIN باسم نطاقك.
راجع الإعداد أدناه، ابحث عن الأسطر المميّزة باللون الأصفر.
http:
routers:
remnawave:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
tls:
certResolver: letsencrypt
service: remnawave
middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https
services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"
تشغيل الحاوية
docker compose up -d && docker compose logs -f -t
تقييد الوصول إلى اللوحة بالعنوان IP
إذا أردت تقييد الوصول إلى اللوحة بعنوان IP معين، يمكنك إنشاء ملف middleware باسم ip_allow_list.yml.
cd /opt/remnawave/traefik/config && nano ip_allow_list.yml
الصق الإعداد التالي.
يُرجى استبدال REPLACE_WITH_YOUR_IP بعنوان IP المسموح به (أو نطاقات IP باستخدام ترميز CIDR).
راجع الإعداد أدناه، ابحث عن الأسطر المميّزة باللون الأصفر.
إذا كان اسم نطاقك مُوجَّهاً عبر Cloudflare، فيجب تحديد نطاقات IP الخاصة بـ Cloudflare في قائمة excludedIPs.
تُحدِّث Cloudflare نطاقات IP بانتظام، لذا يُنصح بمراجعة صفحة Cloudflare الرسمية للحصول على قائمة محدَّثة.
http:
middlewares:
ip-allow-list:
ipAllowList:
sourceRange:
- "REPLACE_WITH_YOUR_IP"
ipStrategy:
excludedIPs:
- 73.245.48.0/20
- 103.21.244.0/22
- 103.22.200.0/22
- 103.31.4.0/22
- 141.101.64.0/18
- 108.162.192.0/18
- 190.93.240.0/20
- 188.114.96.0/20
- 197.234.240.0/22
- 198.41.128.0/17
- 162.158.0.0/15
- 104.16.0.0/13
- 104.24.0.0/14
- 172.64.0.0/13
- 131.0.72.0/22
ثم تحتاج إلى إضافة middleware ip-allow-list إلى ملف الإعداد remnawave.yml.
nano remnawave.yml
انتبه إلى السطر الأخضر الذي يجب إضافته.
http:
routers:
remnawave:
rule: 'Host(`REPLACE_WITH_YOUR_DOMAIN`)'
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
tls:
certResolver: letsencrypt
service: remnawave
middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https
services:
remnawave:
loadBalancer:
servers:
- url: 'http://remnawave:3000'
السماح بالوصول العام لمسار الاشتراك
لكي يعمل نظام الاشتراك بشكل صحيح، يجب أن يكون مسار /api/sub/ متاحاً للعامة.
في نفس الوقت، يجب أن تظل بقية اللوحة محمية بالقيود القائمة على IP.
لتحقيق ذلك، تحتاج إلى تعريف موجِّهَين منفصلَين لنفس النطاق — أحدهما لـ /api/sub/ (وصول مفتوح)، والآخر لكل شيء آخر (مقيَّد).
افتح ملف remnawave.yml مرة أخرى:
nano /opt/remnawave/traefik/config/remnawave.yml
وحدِّث إعداد الموجِّه كما يلي:
http:
routers:
remnawave-sub:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`) && PathPrefix(`/api/sub/`)"
middlewares:
- remnawave-https-redirect
entrypoints:
- https
service: remnawave
tls:
certResolver: letsencrypt
remnawave-secure:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
service: remnawave
tls:
certResolver: letsencrypt
middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https
services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"
يجعل هذا الإعداد مسار /api/sub/ متاحاً للعموم، بينما تظل بقية اللوحة مقيَّدة بعنوان IP.
افتح اللوحة في المتصفح
افتح اسم النطاق المُعدَّ في المتصفح وستظهر لك صفحة تسجيل الدخول.
