دليل عمليات DRA
جدول المحتويات
- توجيه القطر القياسي
- تكوين DRA الأساسي
- جداول المرجع
- وحدة التوجيه المتقدمة
- وحدة التحويل المتقدمة
- معالجة القواعد
- وحدة القياسات الموسعة
- استكشاف الأخطاء وإصلاحها
نظرة عامة على بنية DRA
توجيه القطر القياسي
بدون وحدات التوجيه المتقدم أو التحويل المتقدم�� يقوم DRA بتنفيذ توجيه القطر القياسي بناءً على بروتوكول القطر الأساسي (RFC 6733):
توجيه الطلبات
يقوم DRA بتوجيه رسائل الطلب باستخدام آلية قائمة على الأولويات كما هو محدد في RFC 6733 القسم 6.1:
-
AVP المضيف الوجهة (293) - إذا كان موجودًا، يقوم DRA بالتوجيه مباشرة إلى القرين المحدد
- هذه هي آلية التوجيه ذات الأولوية الأعلى
- إذا لم يكن القرين متصلًا، يفشل التوجيه
- يوفر تحكمًا صريحًا في التوجيه على مستوى المضيف
-
AVP المجال الوجهة (283) - إذا كان AVP المضيف الوجهة غائبًا، يتم التوجيه بناءً على المجال
- يختار DRA قرينًا متصلًا يعلن عن دعمه للمجال المستهدف
- يتم تطبيق موازنة الحمل عندما تتطابق عدة أقران مع المجال
- يسمح التوجيه القائم على المجال بالمرونة عبر مضيفين متعددين
-
معرف التطبيق - يتم تصفية الأقران حسب التطبيقات المدعومة من القطر
- يتم اعتبار الأقران التي تعلن عن دعمها لمعرف التطبيق للرسالة فقط
- بناءً على ��بادل القدرات (CER/CEA) أثناء إنشاء اتصال القرين
- انظر معرفات التطبيقات الشائعة 3GPP للرجوع إليها
توجيه الإجابات
تستخدم حزم الإجابة آلية توجيه مختلفة تمامًا عن الطلبات:
- التوجيه القائم على الجلسة: تتبع حزم الإجابة دائمًا المسار العكسي للطلب
- الحفاظ على معرف من طرف إلى طرف: يبقى معرف من طرف إلى طرف دون تغيير عبر جميع القفزات
- التوجيه من طرف إلى طرف: يستخدم DRA معرف من طرف إلى طرف للحفاظ على حالة التوجيه (يتغير في كل قفزة)
- لا تقييم للقواعد: لا يقوم DRA بتقييم قواعد التوجيه أو محتويات AVP للإجابات
- الارتباط القائم على الحالة: تتبع الجداول الداخلية للتوجيه أي قرين أرسل كل طلب
لماذا لا يتم توجيه الإجابات بواسطة الوحدات المتقدمة:
- توجيه الإجابات حتمي ويجب أن يعود إلى القرين الأصلي
- يتطلب بروتوكول القطر أن تتبع الإجابات المسار الذي تم إنشاؤه للطلب
- يتم اتخاذ قرارات التوجيه للإجابات بناءً على سياق الطلب الأصلي، وليس محتوى الإجابة
- يضمن ذلك إدارة الجلسات بشكل صحيح ويمنع حلقات التوجيه
انظر RFC 6733 القسم 6.2 للحصول على تفاصيل توجيه رسائل الإجابة.
اختيار القرين
عندما تتطابق عدة أقران مع معايير التوجيه، تحدد peer_selection_algorithm المختارة:
:عشوائي- يختار عشوائيًا من الأقران المتاحة (افتراضي):فشل- يختار دائمًا أول قرين في القائمة (قائم على الأولوية)- يجب أن تكون الأقران في حالة متصلة ليتم اختيارها
- يتم استبعاد الأقران غير المتصلة أو المعطلة تلقائيًا
قيود التوجيه القياسي
- لا توجد قواعد توجيه مخصصة بناءً على قيم AVP (مثل أنماط IMSI)
- لا توجد ترجمة للمجال أو تعديل لـ AVP
- لا يمكن التوجيه بناءً على القرين الأصلي
- تحكم محدود في توزيع الحركة
تقوم وحدات التوجيه المتقدم والتحويل المتقدم بتمديد هذا السلوك القياسي مع قدرات التوجيه القائم على القواعد وتلاعب الحزم.
تكوين DRA الأساسي
يتطلب DRA تكوينًا أساسيًا يحدد هويته وإعدادات الشبكة واتصالات الأقران. يؤسس هذا التكوين الأساس ��جميع عمليات التوجيه.
هيكل التكوين
%{
host: "dra01.example.com",
realm: "example.com",
listen_ip: "192.168.1.10",
listen_port: 3868,
service_name: :example_dra,
product_name: "OmniDRA",
vendor_id: 10415,
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: false,
log_unauthorized_peer_connection_attempts: true,
peers: [
# تكوينات الأقران...
]
}
معلمات هوية DRA
| المعلمة | النوع | الوصف |
|---|---|---|
host | سلسلة | هوية DRA القطرية (اسم المجال المؤهل بالكامل) |
realm | سلسلة | مجال DRA القطري |
product_name | سلسلة | اسم المنتج المعلن عنه في رسائل CER/CEA |
vendor_id | عدد صحيح | معرف البائع كما هو محدد في RFC 6733 القسم 5.3.3 (10415 = 3GPP) |
إعدادات الشبكة
| المعلمة | النوع | الوصف |
|---|---|---|
listen_ip | سلسلة | عنوان IP الذي يستمع عليه DRA للاتصالات الواردة |
listen_port | عدد صحيح | منفذ TCP/SCTP لاتصالات القطر (القياسي: 3868) |
service_name | ذرة | معرف الخدمة الداخلية في إيرلانغ |
request_timeout | عدد صحيح | مهلة بالمللي ثانية لزوج الطلب/الإجابة (الافتراضي: 5000) |
إعدادات اختيار القرين
| المعلمة | النوع | الوصف |
|---|---|---|
peer_selection_algorithm | ذرة | خوارزمية موازنة الحمل: :random (اختيار عشوائي) أو :failover (أولوية أول قرين) |
allow_undefined_peers_to_connect | منطقي | السماح بالاتصالات من الأقران غير الموجودين في التكوين (الافتراضي: false) |
log_unauthorized_peer_connection_attempts | منطقي | تسجيل محاولات الاتصال من الأقران غير المصرح بها |
تكوين القرين
يحدد كل قرين في قائمة peers اتصالًا قطريًا:
%{
host: "mme01.operator.com",
realm: "operator.com",
ip: "192.168.1.20",
port: 3868,
transport: :diameter_tcp,
tls: false,
initiate_connection: false
}
معلمات القرين
| المعلمة | النوع | الوصف |
|---|---|---|
host | سلسلة | هوية القرين القطرية (FQDN) - يجب أن تتطابق تمامًا للتوجيه |
realm | سلسلة | مجال القرين القطري |
ip | سلسلة | عنوان IP للقرين من أجل الاتصال |
port | عدد صحيح | منفذ القطر للقرين (عادة 3868) |
transport | ذرة | بروتوكول النقل: :diameter_tcp أو :diameter_sctp |
tls | منطقي | تمكين تشفير TLS (إذا كانت true، عادةً ما يستخدم المنفذ 3869) |
initiate_connection | منطقي | true: يتصل DRA بالقرين، false: ينتظر DRA اتصال القرين |
أوضاع الاتصال
بدء الاتصال (initiate_connection: true)
- يعمل DRA كعميل قطر
- يبدأ DRA اتصال TCP/SCTP بالقرين
- يستخدم للاتصال بـ HSS أو PCRF أو أنظمة خلفية أخرى
- سيعيد DRA محاولة الاتصالات إذا كان القرين غير متاح
قبول الاتصال (initiate_connection: false)
- يعمل DRA كخادم قطر
- ينتظر DRA اتصال القرين
- يستخدم لاتصالات MME وSGSN وP-GW
- ��جب أن يكون القرين في التكوين أو
allow_undefined_peers_to_connect: true
مثال على التكوين
%{
host: "dra01.mvno.example.com",
realm: "mvno.example.com",
listen_ip: "10.100.1.10",
listen_port: 3868,
service_name: :mvno_dra,
product_name: "OmniDRA",
vendor_id: 10415,
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: false,
log_unauthorized_peer_connection_attempts: true,
peers: [
# MME - ينتظر حتى يتصل MME
%{
host: "mme01.operator.example.com",
realm: "operator.example.com",
ip: "10.100.2.15",
port: 3868,
transport: :diameter_sctp,
tls: false,
initiate_connection: false
},
# HSS - DRA يبدأ الاتصال
%{
host: "hss01.mvno.example.com",
realm: "mvno.example.com",
ip: "10.100.3.141",
port: 3868,
transport: :diameter_tcp,
tls: false,
initiate_connection: true
},
# PCRF مع TLS - DRA يبدأ اتصال آمن
%{
host: "pcrf01.mvno.example.com",
realm: "mvno.example.com",
ip: "10.100.3.22",
port: 3869,
transport: :diameter_tcp,
tls: true,
initiate_connection: true
}
]
}
ملاحظات هامة
- مطابقة اسم المضيف: يجب أن تتطابق أسماء مضيفي الأقران في قواعد التوجيه المتقدم تمامًا مع قيمة
hostالمكونة هنا (حساسة لحالة الأحرف) - تبادل القدرات: عند الاتصال، يتبادل الأقران التطبيقات المدعومة عبر رسائل CER/CEA
- دعم التطبيق: يعلن DRA عن جميع التطبيقات المدعومة من 3GPP (انظر معرفات التطبيقات الشائعة 3GPP)
- معرف البائع 10415: قيمة قياسية لتطبيقات 3GPP
- مهلة الطلب: تؤثر على TTL القياسات الموسعة (مهلة + 5 ثوانٍ)
- اختيار القرين: عندما تتطابق عدة أقران مع معايير التوجيه، تحدد
peer_selection_algorithmأي منها يتم اختياره
اعتبارات الأمان
- تعيين
allow_undefined_peers_to_connect: falseفي الإنتاج - تمكين
log_unauthorized_peer_connection_attempts: trueلمراقبة الأمان - التأكد من أن قواعد جدار الحماية تتطابق مع إعدادات
listen_ipوlisten_port - التحقق من شهادات الأقران عند استخدام TLS
جداول المرجع
معرفات التطبيقات الشائعة 3GPP
| معرف التطبيق | الواجهة | الوصف |
|---|---|---|
| 16777251 | S6a/S6d | مصادقة MME/SGSN وبيانات الاشتراك إلى HSS |
| 16777252 | S13/S13' | تحقق من هوية المعدات MME إلى EIR |
| 16777238 | Gx | التحكم في السياسة والفوترة من PCEF إلى PCRF |
| 16777267 | S9 | سياسة التجوال من PCRF المنزل إلى PCRF الزائر |
| 16777272 | Sy | ربط جلسة PCRF إلى OCS |
| 16777216 | Cx | تسجيل IMS من I-CSCF/S-CSCF إلى HSS |
| 16777217 | Sh | بيانات مستخدم IMS من AS إلى HSS |
| 16777236 | SLg | خدمات الموقع من MME/SGSN إلى GMLC |
| 16777291 | SLh | معلومات المشترك الموقع من GMLC إلى HSS |
| 16777302 | S6m | MTC-IWF إلى HSS/HLR للأجهزة M2M |
| 16777308 | S6c | توجيه SMS من SMS-SC/IP-SM-GW إلى HSS |
| 16777343 | S6t | أحداث المراقبة من SCEF إلى HSS |
| 16777334 | Rx | تفويض الوسائط من AF إلى PCRF |
أكواد AVP الشائعة
| الرمز | اسم AVP | النوع | الاستخدام |
|---|---|---|---|
| 1 | اسم المستخدم | UTF8String | معرف المشترك (IMSI في 3GPP) |
| 264 | المضيف الأصلي | DiameterIdentity | اسم مضيف القرين الأصلي |
| 268 | رمز النتيجة | Unsigned32 | رمز النتيجة القياسي |
| 283 | المجال الوجهة | DiameterIdentity | المجال المستهدف |
| 293 | المضيف الوجهة | DiameterIdentity | المضيف المستهدف (اختياري) |
| 296 | المجال الأصلي | DiameterIdentity | المجال المصدر |
| 297 | نتيجة تجريبية | Grouped | رمز نتيجة محدد من البائع |
أكواد الأوامر الشائعة
أكواد الأوامر هي جزء من رأس رسالة القطر، وليست AVPs:
| الرمز | اسم الأمر | الوصف |
|---|---|---|
| 257 | CER/CEA | طلب/إجابة تبادل القدرات |
| 258 | RAR/RAA | طلب/إجابة إعادة المصادقة |
| 274 | ASR/ASA | طلب/إجابة إنهاء الجلسة |
| 275 | STR/STA | طلب/إجابة إنهاء الجلسة |
| 280 | DWR/DWA | طلب/إجابة مراقبة الجهاز |
| 282 | DPR/DPA | طلب/إجابة فصل القرين |
| 316 | ULR/ULA | طلب/إجابة تحديث الموقع (S6a) |
| 317 | CLR/CLA | طلب/إجابة إلغاء الموقع (S6a) |
| 318 | AIR/AIA | طلب/إجابة معلومات المصادقة (S6a) |
| 321 | PUR/PUA | طلب/إجابة تطهير UE (S6a) |
وحدة التوجيه المتقدمة
توفر وحدة التوجيه المتقدمة قدرات توجيه رسائل مرنة قائمة على القواعد مع دعم لظروف مطابقة معقدة.
مهم: تقوم هذه الوحدة بتقييم حزم طلب القطر الواردة فقط (وليس حزم الإجابة). تتبع حزم الإجابة مسار الجلسة المحدد مرة أخرى إلى القرين الأصلي - انظر توجيه الإجابة للحصول على التفاصيل.
التكوين
قم بتمكين الوحدة وحدد قواعد التوجيه في تكوينك:
dra_module_advanced_routing:
enabled: True
rules:
- rule_name: <rule_identifier>
match: <match_scope>
filters: [<filter_list>]
route:
peers: [<peer_list>]
المعلمات
| المعلمة | الوصف |
|---|---|
enabled | تعيين إلى True لتفعيل الوحدة |
rule_name | معرف فريد لقواعد التوجيه |
match | كيفية دمج الفلاتر: :all (منطق AND - ��جب أن تتطابق جميع الفلاتر)، :any (منطق OR - يجب أن تتطابق على الأقل فلتر واحد)، :none (منطق NOR - لا يمكن أن تتطابق أي فلاتر) |
filters | قائمة من شروط الفلترة (انظر الفلاتر المتاحة) |
route.peers | قائمة بأسماء مضيفي الأقران المستهدفة (يجب أن تكون أقران القطر المعرفة مسبقًا في تكوين DRA الخاص بك)، أو استخدم الوجهة الخاصة :destination_host للتوجيه بناءً على AVP المضيف الوجهة (293) |
مهم: يجب أن تكون الأقران المحددة في route.peers:
- معرفة في تكوين قرين القطر الخاص بـ DRA
- اسم المضيف بالضبط كما هو مكون (حساسة لحالة الأحرف)
- متصلة حاليًا لكي ينجح التوجيه (يتم تخطي الأقران غير المتصلة)
الفلاتر المتاحة
الفلاتر القياسية
متاحة في كل من التوجيه المتقدم والتحويل المتقدم:
-
:application_id- مطابقة معرف ��طبيق القطر (انظر مرجع معرف التطبيق)- قيمة واحدة:
{:application_id, 16777251}(S6a/S6d) - قيم متعددة:
{:application_id, [16777251, 16777252]}(S6a أو S6b)
- قيمة واحدة:
-
:command_code- مطابقة رمز أمر القطر- قيمة واحدة:
{:command_code, 318}(طلب AIR) - قيم متعددة:
{:command_code, [317, 318]}(ULR أو AIR)
- قيمة واحدة:
-
:avp- مطابقة قيمة AVP (انظر مرجع رمز AVP)- مطابقة دقيقة:
{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}} - مطابقة Regex:
{:avp, {1, ~r"999001.*"}} - أنماط متعددة:
{:avp, {1, ["505057001313606", ~r"999001.*", ~r"505057.*"]}} - أي قيمة (تحقق من الوجود):
{:avp, {264, :any}}
- مطابقة دقيقة:
فلتر خاص بالتوجيه
متاح فقط في التوجيه المتقدم:
:via_peer- مطابقة القرين الذي تم استلام الطلب منه- قرين واحد:
{:via_peer, "omnitouch-lab-dra01.epc.mnc001.mcc001.3gppnetwork.org"} - أقران متعددة:
{:via_peer, ["omnitouch-lab-dra01.epc.mnc001.mcc001.3gppnetwork.org", "omnitouch-lab-dra02.epc.mnc001.mcc001.3gppnetwork.org"]} - أي قرين:
{:via_peer, :any}
- قرين واحد:
فلاتر خاصة بالتحويل
متاحة فقط في التحويل المتقدم:
-
:to_peer- مطابقة على القرين الوجهة المحدد مسبقًا (حزم الطلب فقط)- قرين واحد:
{:to_peer, "dra01.omnitouch.com.au"} - أقران متعددة:
{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}
- قرين واحد:
-
:from_peer- مطابقة القرين الذي أرسل الإجابة (حزم الإجابة فقط)- قرين واحد:
{:from_peer, "hss-01.example.com"} - أقران متعددة:
{:from_peer, ["hss-01.example.com", "hss-02.example.com"]}
- قرين واحد:
-
:packet_type- مطابقة اتجاه الحزمة- طلب:
{:packet_type, :request} - إجابة:
{:packet_type, :answer}
- طلب:
ملاحظات هامة حول الفلاتر
-
فلاتر AVP: موصى بها فقط لـ AVPs البسيطة (اسم المستخدم، المضيف الأصلي، المجال الوجهة، إلخ.)
- AVPs المجمعة غير مدعومة ولن تتطابق
- القيم الثنائية المعقدة غير مدعومة
- استخدم التنسيق:
{:avp, {code, value}}
-
عوامل القائمة: مدعومة لجميع قيم الفلتر باستثناء
:packet_type- عند استخدام قائمة، يتم تطبيق منطق OR داخل القائمة
- مثال:
{:command_code, [317, 318]}تتطابق مع رمز الأمر 317 أو 318
-
القيم الخاصة:
:any- تتطابق مع أي قيمة (يتحقق من وجود AVP)- مثال:
{:avp, {264, :any}}تتطابق إذا كان AVP المضيف الأصلي موجودًا بأي قيمة
أمثلة على التوجيه
المثال 1: توجيه عبر القرين
توجيه الرسائل بناءً على أي DRA وصلت منها:
dra_module_advanced_routing:
enabled: True
rules:
- rule_name: temporary_until_cutover_s6a_via_to_local_hss
match: ":all"
filters:
- '{:application_id, 16777251}'
- '{:via_peer, ["omnitouch-lab-dra01.epc.mnc001.mcc001.3gppnetwork.org", "omnitouch-lab-dra02.epc.mnc001.mcc001.3gppnetwork.org"]}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
route:
peers: [omnitouch-lab-hss01.epc.mnc001.mcc001.3gppnetwork.org, omnitouch-lab-hss02.epc.mnc001.mcc001.3gppnetwork.org]
كيف يعمل: يوجه حركة S6a التي تصل عبر أقران DRA محددة إلى عقد HSS المحلية.
المثال 2: التجوال الوارد مع مطابقة الأنماط
توجيه حركة التجوال بناءً على أنماط IMSI:
dra_module_advanced_routing:
enabled: True
rules:
- rule_name: inbound_s6a_roaming_to_dcc
match: ":all"
filters:
- '{:application_id, 16777251}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
- '{:avp, {1, ["505571234567", ~r"999001.*"]}}'
route:
peers: [dra01.omnitouch.com.au, dra02.omnitouch.com.au]
كيف يعمل: يوجه رسائل S6a من المجال الأصلي المحدد مع أنماط IMSI المتطابقة إلى أقران DRA المعينة.
المثال 3: توجيه ديناميكي باستخدام :destination_host
توجيه إلى قيمة AVP المضيف الوجهة في الرسالة:
dra_module_advanced_routing:
enabled: True
rules:
- rule_name: route_to_specified_destination_host
match: ":all"
filters:
- '{:avp, {1, [~r"90199.*"]}}' # مطابقة نمط IMSI
route: :destination_host
كيف يعمل:
- عندما تتطابق الفلاتر، يتم التوجيه إلى القرين المحدد في AVP المضيف الوجهة (293)
- إذا كان AVP المضيف الوجهة مفقودًا، يعتبر المطابقة فاشلة وتعود إلى التوجيه العادي
- مفيد لتوجيه الشرف عندما يحدد المرسل الوجهة الدقيقة
وحدة التحويل المتقدمة
تمكن وحدة التحويل المتقدمة من التعديل الديناميكي لقيم AVP في رسائل القطر بناءً على معايير المطابقة. انظر معالجة القواعد للحصول على تفاصيل حول كيفية تقييم القواعد.
التكوين
قم بتمكين الوحدة وحدد قواعد التحويل:
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: <rule_identifier>
match: <match_scope>
filters: [<filter_list>]
transform:
action: <transform_action>
avps: [<avp_modifications>]
المعلمات
| المعلمة | الوصف |
|---|---|
enabled | تعيين إلى True لتفعيل الوحدة |
rule_name | معرف فريد لقواعد التحويل |
match | كيفية دمج الفلاتر: :all (منطق AND)، :any (منطق OR)، :none (منطق NOR) - انظر منطق الفلتر |
filters | قائمة من شروط الفلترة (انظر الفلاتر المتاحة) |
transform.action | نوع التحويل (:edit، :remove، أو :overwrite) |
transform.avps | قائمة من تعديلات AVP التي سيتم تطبيقها (انظر مرجع رمز AVP) |
إجراءات التحويل
حزم الطلبات (طلبات القطر)
:edit- تعديل قيم AVP الموجودة- يعدل فقط AVPs التي توجد في الرسالة
- إذا لم يكن AVP موجودًا، فلا يتم إجراء أي تغيير
:remove- إزالة AVPs من الرسالة:overwrite- استبدال هياكل AVP بالكامل- يتطلب معلمة
dictionaryتحدد قاموس القطر (مثل:diameter_gen_3gpp_s6a)
- يتطلب معلمة
حزم الإجابة (إجابات القطر)
:remove- إزالة AVPs من الرسالة:overwrite- استبدال هياكل AVP بالكامل- يتطلب معلمة
dictionary
- يتطلب معلمة
مهم: إذا لم تتطابق أي قواعد، يتم تمرير الحزمة عبر الشفافية دون أي تحويلات.
بناء جملة تعديل AVP
تعديل قياسي:
{:avp, {<code>, <new_value>}}- تعيين AVP إلى قيمة جديدة
إزالة AVPs:
{:avp, {<code>, :any}}- إزالة AVP حسب المعرف (تزيل بغض النظر عن القيمة الحالية)- ملاحظة: إزالة بناءً على avp_id مدعومة؛ إزالة بناءً على محتويات AVP غير مدعومة
استبدال باستخدام القاموس:
transform: %{
action: :overwrite,
dictionary: :diameter_gen_3gpp_s6a,
avps: [{:avp, {:"s6a_Supported-Features", {:"s6a_Supported-Features", 10415, 1, 3221225470, []}}}]
}
أمثلة على التحويل
المثال 1: إعادة كتابة المجال الوجهة بناءً على القرين
إعادة كتابة المجال الوجهة بناءً على المكان الذي يتم توجيه الرسالة إليه:
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: rewrite_s6a_destination_realm_for_Operator_X
match: ":all"
filters:
- '{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
- '{:avp, {1, [~r"9999999.*"]}}'
transform:
action: ":edit"
avps:
- '{:avp, {283, "epc.mnc999.mcc999.3gppnetwork.org"}}'
كيف يعمل: عندما يتم توجيه طلبات S6a إلى أقران DRA محددة وتطابق نمط IMSI، يعيد كتابة المجال الوجهة لشبكة المشغل X.
المثال 2: توجيه متعدد الناقلين مع التحويلات
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: rewrite_s6a_destination_realm_for_roaming_partner_ausie
match: ":all"
filters:
- '{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}'
- '{:avp, {296, "epc.mnc057.mcc505.3gppnetwork.org"}}'
- '{:avp, {1, [~r"50557.*"]}}'
transform:
action: ":edit"
avps:
- '{:avp, {283, "epc.mnc030.mcc310.3gppnetwork.org"}}'
كيف يعمل: يوجه نطاقات مشتركي IMSI المختلفة إلى المجالات الشبكية المناسبة بناءً على أنماط IMSI. تفوز أول قاعدة مطابقة (انظر ترتيب التنفيذ).
المثال 3: إعادة كتابة المجال لـ MVNO
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: rewrite_s6a_destination_realm_for_single_sub
match: ":all"
filters:
- '{:to_peer, ["dra01.omnitouch.com.au", "dra02.omnitouch.com.au"]}'
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}'
- '{:avp, {1, ["505057000003606"]}}' # مطابقة IMSI دقيقة
transform:
action: ":edit"
avps:
- '{:avp, {283, "epc.mnc001.mcc001.3gppnetwork.org"}}'
كيف يعمل: يقوم بتحويل المجال الوجهة لمشترك MVNO محدد إلى شبكة النواة المستضافة الخاصة بهم.
المثال 4: تحويل خاص بالطلبات مع فلتر نوع الحزمة
تحويل حزم الطلب فقط (وليس الإجابات):
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: Tutorial_Rule_AIR
match: ":all"
filters:
- '{:application_id, 16777251}'
- '{:command_code, 318}'
- '{:packet_type, :request}'
- '{:avp, {1, "999999000000001"}}'
- '{:avp, {264, :any}}' # يجب أن يوجد المضيف الأصلي بأي قيمة
transform:
action: ":edit"
avps:
- '{:avp, {1, "999999000000002"}}'
كيف يعمل:
- يتطابق فقط مع حزم S6a AIR الطلبات (وليس حزم الإجابة)
- يتحقق من أن اسم المستخدم (AVP 1) يساوي "999999000000001"
- يتحقق من أن المضيف ا��أصلي (AVP 264) موجود بأي قيمة
- يعيد كتابة اسم المستخدم إلى "999999000000002"
- إذا لم يكن AVP موجودًا، فلا يتم إجراء أي تغيير
المثال 5: إزالة AVP
إزالة AVP محدد من الرسائل:
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: remove_user_name_avp
match: ":all"
filters:
- '{:application_id, 16777251}'
transform:
action: ":remove"
avps:
- '{:avp, {1, :any}}' # إزالة اسم المستخدم بغض النظر عن القيمة
كيف يعمل: يزيل AVP اسم المستخدم (الرمز 1) من جميع رسائل S6a، بغض النظر عن قيمته الحالية.
المثال 6: استبدال AVP مجمعة في حزم الإجابة
تعديل AVPs مجمعة معقدة في حزم الإجابة باستخدام إجراء :overwrite مع دعم القاموس:
dra_module_advanced_transform:
enabled: True
rules:
- rule_name: add_sos_apn_to_ula
match: ":all"
filters:
- '{:application_id, 16777251}' # S6a/S6d
- '{:command_code, 316}' # ULA (إجابة تحديث الموقع)
- '{:packet_type, :answer}' # حزم الإجابة فقط
- '{:avp, {296, "epc.mnc001.mcc001.3gppnetwork.org"}}' # المجال الأصلي
transform:
action: ":overwrite"
dictionary: ":diameter_gen_3gpp_s6a"
avps:
- '{:avp, {:"s6a_APN-Configuration-Profile",
{:"s6a_APN-Configuration-Profile", 1, 0, [
{:"s6a_APN-Configuration", 1, 0, "internet", [],
[{:"s6a_EPS-Subscribed-QoS-Profile", 9,
{:"s6a_Allocation-Retention-Priority", 1, [0], [0], []}, []}],
[1], [], [], [1], ["0800"],
[{:s6a_AMBR, 4200000000, 4200000000, [], [], []}],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], []},
{:"s6a_APN-Configuration", 2, 0, "ims", [],
[{:"s6a_EPS-Subscribed-QoS-Profile", 5,
{:"s6a_Allocation-Retention-Priority", 1, [0], [1], []}, []}],
[0], [], [], [1], ["0800"],
[{:s6a_AMBR, 4200000000, 4200000000, [], [], []}],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], []},
{:"s6a_APN-Configuration", 3, 0, "sos", [],
[{:"s6a_EPS-Subscribed-QoS-Profile", 5,
{:"s6a_Allocation-Retention-Priority", 1, [0], [1], []}, []}],
[1], [], [], [1], ["0800"],
[{:s6a_AMBR, 4200000000, 4200000000, [], [], []}],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], []}
], []}
}}'
كيف يعمل:
- يتطابق مع حزم S6a إجابة تحديث الموقع (ULA) من مجال أصلي محدد
- يستخدم إجراء
:overwriteلاستبدال AVP المجمعة بالكامل - يتطلب معلمة
dictionaryلترميز هياكل AVP المجمعة المعقدة بشكل صحيح - يضيف ثلاث تكوينات APN: "internet" (السياق 1)، "ims" (السياق 2)، و"sos" (السياق 3)
- يتضمن كل APN ملفات تعريف QoS، وحدود النطاق الترددي (AMBR)، وإعدادات نوع PDN
- يضمن التحويل توفير APN خدمات الطوارئ (SOS) لجميع المشتركين من هذا المجال
متى تستخدم :overwrite مع القاموس:
- تعديل AVPs مجمعة مع هياكل متداخلة (مثل APN-Configuration-Profile)
- إضافة أو إعادة هيكلة بيانات الاشتراك المعقدة 3GPP
- عندما لا يمكن لإجراء
:editالتعامل مع تعقيد AVP - يجب أن يتطابق القاموس مع تطبيق القطر (
:diameter_gen_3gpp_s6aلـ S6a، إلخ.)
ملاحظات هامة:
:overwriteيستبدل AVP بالكامل، وليس فقط الحقول الفردية- يجب أن تتطابق هيكل AVP مع تعريف القاموس تمامًا
- الهيكل غير الصحيح سيؤدي إلى فشل الترميز وسقوط الحزم
- هذه ميزة متقدمة - تحقق بدقة في بيئة الاختبار أولاً
حالات الاستخدام
- دعم MVNO: توجيه حركة مشغل افتراضي إلى الشبكات الأساسية المستضافة
- ترحيل الشبكة: إعادة توجيه المشتركين تدريجيًا إلى بنية تحتية جديدة
- ترجمة المجال: تحويل بين أنظمة التسمية المختلفة لشركاء التجوال
- تعدد المستأجرين: عزل مجموعات المشتركين حسب المجال
- توجيه الناقل: توجيه الحركة إلى الشبكات الصحيحة بناءً على نطاقات IMSI
معالجة القواعد
تنطبق على كل من وحدات التوجيه المتقدم والتحويل المتقدم.
ترتيب التنفيذ
- يتم تقييم القواعد بالترتيب من الأعلى إلى الأسفل كما هو محدد في التكوين
- يتم تقييم الفلاتر داخل القاعدة بناءً على معلمة
match(:allأو:anyأو:none) - تفوز أول قاعدة مطابقة - لا يتم تقييم القواعد اللاحقة
- إذا لم تتطابق أي قواعد، يتم استخدام سلوك التوجيه/التمرير الافتراضي
منطق الفلتر
تحدد معلمة match كيفية دمج الفلاتر:
match: :all (منطق AND)
يجب أن تتطابق جميع الفلاتر لكي تنجح القاعدة.
مثال: مع 3 فلاتر، يجب أن تكون filter1 AND filter2 AND filter3 جميعها صحيحة.
match: :any (منطق OR)
يجب أن تتطابق على الأقل فلتر واحد لكي تنجح القاعدة.
مثال: مع 3 فلاتر، يجب أن تكون filter1 OR filter2 OR filter3 (أي واحدة تمر).
match: :none (منطق NOR)
لا يمكن أن تتطابق أي فلاتر لكي تنجح القاعدة (مطابقة عكسية).
مثال: مع 3 فلاتر، NOT filter1 AND NOT filter2 AND NOT filter3 (يجب أن تفشل جميعها).
ملاحظات إضافية:
عند استخدام عوامل القائمة داخل قيمة فلتر (مثل {:avp, {1, ["value1", "value2"]}})، تستخدم القيم منطق OR (يمكن أن تتطابق أي منها).
أنماط التعبير العادي
استخدم بناء جملة ~r"pattern" لمطابقة regex:
~r"999001.*"- تتطابق مع IMSI التي تبدأ بـ 999001~r"^310[0-9]{3}.*"- تتطابق مع IMSI التي تحتوي على أنماط MNC محددة~r".*test$"- تتطابق مع القيم التي تنتهي بـ "test"
أفضل الممارسات
- التحديد: ترتيب القواعد من الأكثر تحديدًا إلى الأكثر عمومية
- الأداء: وضع المطابقات الأكثر شيوعًا أولاً لتقليل الحمل المعالج
- الاختبار: تحقق من أنماط regex قبل النشر
- التوثيق: استخدم قيم
rule_nameالوصفية لزيادة وضوح العمليات - المراقبة: تتبع معدلات مطابقة القواعد للتحقق من السلوك المتوقع
وحدة القياسات الموسعة
توفر وحدة القياسات الموسعة قدرات متقدمة في القياس والتحليلات لتحليل أنماط حركة القطر بما يتجاوز القياسات القياسية.
التكوين
قم بتمكين الوحدة وتكوين أنواع القياسات المحددة:
module_extended_metrics:
enabled: true
attach_attempt_reporting_enabled: true
المعلمات
| المعلمة | الوصف |
|---|---|
enabled | تعيين إل�� true لتفعيل وحدة القياسات الموسعة |
attach_attempt_reporting_enabled | تمكين تتبع وتقرير محاولات الاتصال LTE (S6a AIR/AIA) |
القياسات المتاحة
تتبع محاولات الاتصال
يتتبع محاولات الاتصال لمشتركي LTE من خلال مراقبة أزواج رسائل طلب معلومات المصادقة (AIR) والإجابة (AIA):
القياس: attach_attempt_count
الحقول:
imsi- IMSI المشترك (من AVP اسم المستخدم - انظر أكواد AVP)
العلامات:
origin_host- القرين الذي نشأ منه طلب الاتصالresult_code- رمز النتيجة من استجابة HSS
كيف يعمل:
- عند استلام AIR (رمز الأمر 318، تطبيق S6a 16777251 - انظر معرفات التطبيقات)، تستخرج الوحدة:
- معرف من طرف إلى طرف للربط بين الطلب والاستجابة
- IMSI (AVP اسم المستخدم الرمز 1)
- المضيف الأصلي (AVP الرمز 264)
- يتم تخزين بيانات الطلب في ETS مع TTL
- عند استلام AIA المطابقة، تقوم الوحدة:
- بربط باستخدام معرف من طرف إلى طرف
- استخراج رمز النتيجة (AVP 268 أو AVP رمز النتيجة التجريبية 297)
- إصدار القياس مع IMSI، المضيف الأصلي، ورمز النتيجة
حالات الاستخدام
- تحليل معدل نجاح الاتصال - تتبع محاولات الاتصال الناجحة مقابل الفاشلة حسب رمز النتيجة
- استكشاف الأخطاء على مستوى IMSI - تحديد المشتركين الذين يواجهون فشل الاتصال
- مراقبة أداء الشبكة - مراقبة أنماط محاولات الاتصال حسب الأصل (MME/SGSN)
- تحليلات التجوال - تحليل معدلات نجاح الاتصال للتجوال الوارد
التكامل
يتم تصدير القياسات الموسعة عبر تكامل InfluxDB:
DRA.Metrics.InfluxDB.write(%{
measurement: "attach_attempt_count",
fields: %{imsi: "505057000000001"},
tags: %{origin_host: "mme-01.example.com", result_code: 2001}
})
رموز النتيجة هي رموز قطر قياسية:
2001- النجاح (DIAMETER_SUCCESS)5001- فشل المصادقة (DIAMETER_AUTHENTICATION_REJECTED)5004- AVP غير مدعوم من Diameter- انظر RFC 6733 للحصول على قائمة كاملة برموز النتيجة
ملاحظات هامة
- تتبع قياسات محاولات الاتصال تتبع أزواج S6a AIR/AIA فقط (معرف التطبيق 16777251، رمز الأمر 318)
- تنتهي صلاحية بيانات الطلب بناءً على مهلة الطلب المكونة + 5 ثوانٍ
- معالجة القياس غير متزامنة (عملية منفصلة) لتجنب حجب تدفق الرسائل
- تعمل الوحدة بشكل مستقل عن وحدات التوجيه والتحويل
استكشاف الأخطاء وإصلاحها
القاعدة لا تتطابق
- تحقق من صحة جميع شروط الفلترة
- تحقق من تطابق أكواد AVP مع تطبيق القطر الخاص بك (انظر مرجع أكواد AVP)
- اختبر أنماط regex بشكل مستقل (انظر أنماط التعبير العادي)
- تأكد من أن نوع الرسالة يتطابق مع نطاق
match(انظر منطق الفلتر) - راجع الفلاتر المتاحة للتأكد من أنك تستخدم نوع الفلتر الصحيح لوحدتك
توجيه غير متوقع
- راجع ترتيب القواعد - تفوز أول مطابقة
- تحقق من صحة أسماء الأقران وقابليتها للوصول
- تحقق من وجود قواعد متعارضة مع فلاتر متداخلة
- تأكد من سلوك توجيه القطر القياسي عندما لا تتطابق أي قواعد
التحويل غير مطبق
- تأكد من أن أكواد AVP صحيحة لحالتك (انظر مرجع أكواد AVP)
- بالنسبة لإجراء
:edit: تحقق من وجود AVP في الرسالة (لن ينشئ التعديل AVPs جديدة) - تحقق من أن الفلاتر تتطابق مع تدفق الرسالة المقصود
- تحقق من فلتر نوع الحزمة إذا تم استخدامه (
:requestمقابل:answer) - تأكد من أن الإجراء مدعوم لنوع الحزمة (
:editيعمل فقط على الطلبات - انظر إجراءات التحويل) - راجع معالجة القواعد لترتيب التنفيذ