STUN Server: ما هو، كيف يعمل وأين يُستخدم

المؤلف: IT Sectr نُشر: 2026-06-02 وقت القراءة: 8 دق

STUN Server هو خادم بروتوكول Session Traversal Utilities for NAT (STUN) الذي يسمح للعميل بتحديد عنوان IP الخارجي والمنفذ الخاص به، بالإضافة إلى نوع ترجمة عناوين الشبكة (NAT) الذي يوجد خلفه. وفقًا IETF RFC 5389, 2008، فإن STUN هو مكون إلزامي في البنية التحتية لـ WebRTC، حيث يُمكّن من إنشاء اتصال مباشر من نظير إلى نظير بين العملاء خلف NAT.

الرئيسية

  • STUN Server — عقدة شبكة تساعد العميل على تحديد عنوان IP العام الخاص به ونوع NAT لتنظيم اتصالات P2P.
  • المبدأ — يرسل العميل طلب STUN، ويستجيب الخادم بعنوان IP والمنفذ الذي جاء منه الطلب، كاشفًا عن بيانات العنوان الخارجي للعميل.
  • الدور في WebRTC — يُستخدم خادم STUN في مرحلة جمع مرشحي ICE لجمع المرشحين والتحقق من إمكانية الاتصال المباشر.
  • القيود — لا يعمل STUN مع NAT المتماثل (Symmetric NAT)، حيث يتغير العنوان الخارجي لكل مضيف وجهة.
  • البديل — عند فشل STUN، يُستخدم خادم TURN الذي يعيد توجيه حركة المرور عبر عقدة ترحيل.

ما هو STUN Server

STUN Server (Session Traversal Utilities for NAT) هي خدمة شبكة تعمل وفقًا للبروتوكول المحدد في RFC 5389 والمُحدّث في RFC 8489. المهمة الرئيسية لخادم STUN هي تزويد العميل بمعلومات حول عنوان IP العام والمنفذ الخاصين به كما يُرى من الشبكة الخارجية، بالإضافة إلى تحديد نوع جهاز NAT بين العميل والإنترنت.

تتضمن بنية STUN مكونين: عميل STUN مدمج في التطبيق (مثل المتصفح أو تطبيق WebRTC الأصلي) وخادم STUN منشور في الشبكة العامة. يرسل العميل طلب ربط (Binding Request) إلى الخادم، الذي يشير في استجابته إلى عنوان IP والمنفذ المصدر للطلب — أي العناوين العامة للعميل كما يراها الخادم. من خلال مقارنة هذه البيانات مع عناوينه المحلية، يمكن للعميل تحديد نوع NAT المستخدم في شبكته.

بروتوكول STUN

STUN يعمل عبر UDP (المنفذ 3478 افتراضيًا) أو TCP (المنفذ 3478 أو 5349 لـ TLS). تتكون رسالة STUN من رأس 20 بايت وعدد متغير من السمات. يحتوي الرأس على نوع الرسالة (Binding Request، Binding Response، Binding Error Response)، الطول، ومعرف معاملة فريد (96 بت) يسمح بمطابقة الطلبات والاستجابات. تحتوي كل Binding Response على سمة XOR-MAPPED-ADDRESS — العنوان الخارجي للعميل، المشفر مع الإخفاء للحماية من الهجمات القائمة على اعتراض حركة مرور STUN.

كيف يعمل خادم STUN

يعمل خادم STUN وفقًا لبروتوكول بسيط من طلب واستجابة. يقوم العميل الموجود خلف NAT بتشكيل Binding Request وإرسالها إلى خادم STUN. يستقبل الخادم الحزمة، ويستخرج عنوان IP المصدر ومنفذ المرسل من رأس UDP، ثم يشكل Binding Response، معبأً هذا العنوان في سمة XOR-MAPPED-ADDRESS. يتم إرسال الاستجابة مرة أخرى إلى عنوان مصدر الطلب.

يتلقى العميل الاستجابة ويستخرج XOR-MAPPED-ADDRESS التي تحتوي على عنوان IP الخارجي والمنفذ المعينين بواسطة جهاز NAT. ثم يقارن العميل هذا العنوان مع عنوانه المحلي (RFC 1919 — الخاص). إذا تطابقت العناوين — فإن العميل ليس خلف NAT. إذا اختلفت — فإن العميل خلف NAT، ويُستخدم العنوان الخارجي كمرشح لـ ICE (Interactive Connectivity Establishment) في WebRTC.

عملية اكتشاف NAT

يسمح خادم STUN بتحديد نوع NAT من خلال سلسلة من طلبات الاختبار. يرسل العميل طلبات بأعلام مختلفة (CHANGE-REQUEST) ويحلل الاستجابات. دورة الاكتشاف الكاملة تتضمن إرسال طلبات إلى عناوين IP ومنافذ مختلفة لخادم STUN. إذا استجاب الخادم لطلب بمنفذ متغير — فإن NAT من نوع Restricted Cone. إذا لم يستجب لطلب بمنفذ وعنوان IP متغيرين — فإن NAT من نوع Symmetric. هذه المعلومات ضرورية لاختيار استراتيجية ICE في WebRTC.

خادم STUN وأنواع NAT

يمكن لـ خادم STUN اكتشاف أربعة أنواع رئيسية من NAT، كل منها يؤثر بشكل مختلف على إمكانية إنشاء اتصال P2P. يحدد نوع NAT ما إذا كان STUN يمكنه تمكين اتصال مباشر بين عميلين. كما يحدد أي مرشح ICE — host أو server reflexive أو relay — سيُستخدم للاتصال.

نوع NATالسلوكSTUN يعملالبديل ICE
Full Coneأي مضيف خارجي يمكنه إرسال حزمة إلى العميلنعمServer Reflexive
Restricted Coneفقط المضيفون الذين أرسل إليهم العميل حزمًانعمServer Reflexive
Port Restrictedمثل Restricted، ولكن يُرشح أيضًا حسب منفذ المصدرنعمServer Reflexive
Symmetric NATالعنوان الخارجي فريد لكل زوج مضيف:منفذلاRelay (TURN)

Symmetric NAT هو النوع الوحيد الذي لا يستطيع STUN التعامل معه. مع Symmetric NAT، كل طلب جديد إلى مضيف وجهة جديد يحصل على عنوان خارجي مختلف (IP و/أو منفذ). نظرًا لأن خادم STUN يُبلغ عن العنوان للاتصال بخادم STUN نفسه، فإن هذا العنوان غير مناسب للاتصال بعميل آخر. في مثل هذه الحالات، يستخدم WebRTC خادم TURN لترحيل حركة المرور. وفقًا للبحث (Ford et al., RFC 3489, 2003)، حوالي 8-10% من جميع أجهزة NAT على الإنترنت متناظرة.

استخدام خادم STUN في WebRTC

يتم دمج خادم STUN في WebRTC من خلال تكوين RTCPeerConnection. يستخدم المتصفح أو التطبيق الأصلي STUN لجمع مرشحي ICE، الذين يتم تبادلهم بعد ذلك عبر خادم الإشارات (Signaling Server). في تكوين WebRTC، يتم تحديد خادم STUN في مصفوفة iceServers بالبادئة stun: لـ UDP أو stuns: لاتصالات TLS.

لننظر إلى مثال لإعداد خادم STUN في JavaScript عند إنشاء RTCPeerConnection لتطبيق WebRTC.

js
const config = {
    iceServers: [
        {
            urls: "stun:stun.l.google.com:19302"
        },
        {
            urls: "stun:stun1.l.google.com:19302"
        }
    ]
};

const pc = new RTCPeerConnection(config);

pc.onicecandidate = (event) => {
    if (event.candidate) {
        console.log("مرشح ICE:", event.candidate.candidate);
    }
};

const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

يستخدم هذا المثال خوادم STUN العامة من Google (stun.l.google.com:19302). عند إنشاء offer أو answer، يرسل المتصفح تلقائيًا Binding Request STUN إلى الخوادم المحددة، ويتلقى العنوان الخارجي (مرشح server reflexive) ويضيفه إلى قائمة مرشحي ICE. بعد جمع جميع المرشحين، يتم إرسالهم إلى النظير البعيد عبر خادم الإشارات لمحاولة إنشاء اتصال P2P مباشر.

أنواع مرشحي ICE و STUN

في عملية ICE، هناك ثلاثة أنواع من المرشحين: host (عنوان محلي)، srflx (server reflexive — تم الحصول عليه من STUN) وrelay (تم ترحيله عبر TURN). يتيح خادم STUN إنشاء مرشحين srflx، الذين لديهم أولوية أعلى من مرشحي relay لأن الاتصال القائم على STUN هو اتصال مباشر ولا يتطلب ترحيلًا. تتحقق عملية ICE من جميع مجموعات المرشحين (المحلية والتي تم الحصول عليها من STUN) لكلا النظيرين، بدءًا من الأعلى أولوية.

قيود بروتوكول STUN

خادم STUN لديه قيود أساسية تتعلق ببنية البروتوكول. القيد الرئيسي هو عدم القدرة على العمل مع Symmetric NAT، حيث يحصل كل طلب جديد إلى مضيف خارجي على منفذ خارجي فريد. في هذه الحالة، لا يمكن استخدام العنوان الذي تم الحصول عليه من خادم STUN للاتصال بنظير آخر لأن NAT أنشأ ربطًا فقط للتواصل مع خادم STUN نفسه.

القيد الثاني هو أن STUN لا يوفر ترحيل البيانات. إذا كان الاتصال P2P المباشر مستحيلًا (كلا النظيرين خلف Symmetric NAT)، فإن STUN لا يقدم مسارًا بديلًا لنقل البيانات. في هذه الحالة، يلزم خادم TURN، الذي يعمل كمرحل لحركة مرور الوسائط بين النظيرين، حيث يستقبل البيانات من أحد المشاركين ويرسلها إلى آخر عبر عنوان IP العام الخاص به.

  • Symmetric NAT — لا يعمل STUN مع NAT المتماثل لأن العنوان الخارجي فريد لكل مضيف وجهة ولا يمكن إعادة استخدامه لـ P2P.
  • جدار الحماية مع التفتيش العميق للحزم — تمنع بعض جدران الحماية حركة مرور STUN من خلال اكتشاف تواقيع البروتوكول في حزم UDP على المنفذ 3478.
  • IPv6 — في شبكات IPv6، لا يُستخدم NAT عادةً، لذلك لا يلزم STUN، لكن WebRTC على IPv6 يمكنه استخدام مرشحي host دون الحاجة إلى STUN أو TURN.
  • الاعتماد على التوفر — يجب أن يكون خادم STUN متاحًا للعميل خلال مرحلة إنشاء الاتصال، وإلا لن يتم جمع مرشحي srflx.
  • الأمان — بروتوكول STUN عرضة لهجمات التضخيم إذا تم تكوين الخادم بشكل غير صحيح واستجاب لطلبات بعنوان مصدر مزيف.

على الرغم من القيود، يظل خادم STUN مكونًا أساسيًا في البنية التحتية لـ WebRTC. في معظم الحالات (80-90%)، يمكن إنشاء اتصال P2P مباشر باستخدام STUN، مما يتجنب تكاليف ترحيل TURN ويقلل من زمن نقل بيانات الوسائط. لتطبيقات WebRTC العامة، يُوصى باستخدام مزيج من خوادم STUN و TURN مع التبديل التلقائي الاحتياطي.

الأسئلة الشائعة

ما هو خادم STUN بكلمات بسيطة؟

خادم STUN هو «مرآة» على الإنترنت تخبر العميل بعنوان IP الخارجي الخاص به. عندما يكون الكمبيوتر خلف جهاز توجيه (NAT)، فإنه لا يعرف عنوانه العام. يساعد خادم STUN في اكتشافه حتى تتمكن أجهزة الكمبيوتر الأخرى من الاتصال مباشرة.

كيف يُستخدم خادم STUN في WebRTC؟

في WebRTC، يُحدد خادم STUN في تكوين RTCPeerConnection. يرسل المتصفح طلب STUN للحصول على العنوان الخارجي للمرشح (srflx). يتم نقل هذا المرشح إلى النظير البعيد عبر خادم الإشارات، ويحاول ICE إنشاء اتصال مباشر بينهما.

ما الفرق بين خادمي STUN و TURN؟

STUN يساعد في اكتشاف العنوان الخارجي لاتصال P2P مباشر. TURN يعيد توجيه حركة المرور عبر خادمه عندما يكون P2P غير ممكن. STUN هو «مرآة»، TURN هو «وسيط». يخلق TURN حملاً على الخادم ويضيف زمن استجابة، لذلك يُفضل STUN.

ما هي خوادم STUN العامة التي يمكن استخدامها؟

Google يوفر خوادم STUN مجانية: stun.l.google.com:19302، stun1.l.google.com:19302. كما يوفر Twilio بنية تحتية STUN + TURN من خلال خدمة Network Traversal Service. لتطبيقات الإنتاج، من الأفضل استخدام خوادم STUN/TURN خاصة أو تجارية مع توفر مضمون.

لماذا لا يعمل STUN مع Symmetric NAT؟

Symmetric NAT ينشئ تعيين منفذ خارجي فريد لكل زوج «عنوان محلي:عنوان وجهة خارجي». العنوان الذي يتلقاه العميل من خادم STUN مرتبط بالاتصال مع خادم STUN ذلك. عندما يحاول نظير آخر استخدام هذا العنوان، يحظر Symmetric NAT الحزمة لأن تعيين المنفذ يختلف لعنوان الوجهة الجديد.

الخلاصة

  • STUN Server — عقدة شبكة تنفذ بروتوكول RFC 5389 لتحديد عنوان IP الخارجي ومنفذ العميل خلف NAT.
  • مبدأ العمل — يرسل العميل Binding Request، ويستجيب الخادم بـ XOR-MAPPED-ADDRESS الذي يحتوي على العنوان العام لمصدر الطلب.
  • أنواع NAT — يعمل STUN مع Full Cone و Restricted Cone و Port Restricted NAT، لكنه لا يستطيع التعامل مع Symmetric NAT.
  • الدور في WebRTC — يُستخدم STUN في مرحلة جمع مرشحي ICE لتشكيل مرشحين srflx بعنوان خارجي.
  • القيود — لا يعمل مع Symmetric NAT، قد يتم حظره بواسطة جدران الحماية DPI، لا يوفر ترحيل بيانات.
  • الخوادم المجانية — stun.l.google.com:19302 وخوادم STUN العامة الأخرى كافية للاختبار ومعظم السيناريوهات.
  • التوصية — استخدم دائمًا STUN مع خادم TURN كبديل احتياطي لضمان الاتصال في أي ظروف شبكة.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا