دليل ترجمة عنوان الشبكة العالمية (NAT)
نظرة عامة
ترجمة عنوان الشبكة العالمية (GT NAT) هي ميزة تسمح لـ OmniSS7 بالاستجابة بعناوين GT عالمية مختلفة بناءً على بادئة GT للجهة المتصلة أو بادئة GT للجهة المتصلة بها أو مزيج من كلاهما. هذه الميزة ضرورية عند العمل مع عدة عناوين عالمية وتحتاج إلى ضمان أن تستخدم الاستجابات GT الصحيح بناءً على الشبكة أو النظير الذي يتصل و/أو أي GT تم الاتصال به.
ما الجديد (GT NAT المحسن)
تم تحسين ميزة GT NAT بقدرات جديدة قوية:
الميزات الجديدة
- مطابقة بادئة الجهة المتصلة: يمكن الآن للقواعد المطابقة على
called_prefixبالإضافة إلىcalling_prefix - المطابقة المجمعة: يمكن للقواعد المطابقة على كلا ال��ادئين المتصلين والمستقبلين في نفس الوقت
- أولوية قائمة على الوزن: تستخدم القواعد الآن حقل
weight(أقل = أولوية أعلى) بدلاً من مجرد طول البادئة - مطابقة مرنة: يمكنك الآن إنشاء قواعد مع:
- بادئة متصلة فقط
- بادئة متصلة بها فقط
- كلا البادئين المتصلين والمستقبلين
- لا شيء (قاعدة بديلة/عامة)
تنسيق القاعدة الجديدة
الحقول المطلوبة:
weight: أولوية عددية (أقل = أولوية أعلى)response_gt: GT للاستجابة به
الحقول الاختيارية (يوصى بوجود واحد على الأقل للمطابقة المحددة):
calling_prefix: المطابقة على بادئة GT للجهة المتصلةcalled_prefix: المطابقة على بادئة GT للجهة المتصلة بها
مثال:
gt_nat_rules: [
# قاعدة محددة مع كلا البادئين - أعلى أولوية
%{calling_prefix: "8772", called_prefix: "555", weight: 1, response_gt: "111111"},
# قواعد محددة - أولوية متوسطة
%{calling_prefix: "8772", weight: 10, response_gt: "222222"},
%{called_prefix: "555", weight: 10, response_gt: "333333"},
# بديل عام - أقل أولوية
%{weight: 100, response_gt: "999999"}
]
حالات الاستخدام
التشغيل عبر شبكات متعددة
عندما يكون لديك عدة شبكات نظيرة وكل منها يتوقع استجابات من GT محدد:
- الشبكة A تتصل بـ GT الخاص بك
111111وتتوقع استجابات من111111 - الشبكة B تتصل بـ GT الخاص بك
222222وتتوقع استجابات من222222
بدون GT NAT، ستحتاج إلى مثيلات منفصلة أو توجيه معقد. مع GT NAT، يمكن لمثيل واحد من OmniSS7 التعامل مع هذا بذكاء.
سيناريوهات التجوال
عند العمل كـ HLR أو SMSc مع اتفاقيات تجوال:
- مشتركو الشبكة المنزلية يستخدمون GT
555000 - الشريك المتجول 1 يستخدم GT
555001 - الشريك المتجول 2 يستخدم GT
555002
يضمن GT NAT أن يتلقى كل شريك استجابات من GT الصحيح الذي تم تكوينه للتوجيه إليه.
الاختبار والترحيل
أثناء ترحيل الشبكات أو الاختبار:
- ترحيل حركة المرور تدريجياً من GT القديم إلى GT الجديد
- الحفاظ على كلا GTs خلال فترة الانتقال
- توجيه الاستجابات بناءً على GT الذي استخدمه المتصل
كيف يعمل
تدفق ترجمة العنوان
-
طلب وارد: يتلقى OmniSS7 رسالة SCCP مع:
- GT الجهة المتصلة:
55512341112(GT الخاص بك) - GT الجهة المتصلة بها:
877234567(GT الخاص بهم)
- GT الجهة المتصلة:
-
بحث GT NAT: يتحقق النظام من GT المتصل
877234567مقابل قواعد البادئة المكونة -
مطابقة البادئة: يجد أطول بادئة مطابقة (على سبيل المثال،
8772تطابق877234567) -
اختيار GT للاستجابة: يستخدم
response_gtمن القاعدة المطابقة (على سبيل المثال،55512341112) -
إرسال الاستجابة: تستخدم استجابة SCCP:
- GT الجهة المتصلة:
877234567(معكوس - GT الخاص بهم) - GT الجهة المتصلة بها:
55512341112(GT المعاد توجيهه)
- GT الجهة المتصلة:
أنواع الاستجابة المتأثرة
يطبق GT NAT على عدة طبقات من كومة SS7:
طبقة SCCP (جميع الاست��ابات)
- عناوين GT للجهة المتصلة/المتصل بها في جميع رسائل الاستجابة
- تأكيدات ISD (InsertSubscriberData)
- استجابات UpdateLocation
- استجابات الأخطاء
طبقة MAP (محددة بالعملية)
- استجابات SRI-for-SM:
networkNode-Number(عنوان GT لـ SMSc) - UpdateLocation:
hlr-Numberفي الاستجابات - InsertSubscriberData: GT HLR في رسائل ISD
التكوين
التكوين الأساسي
أضف إلى config/runtime.exs:
config :omniss7,
# تفعيل GT NAT
gt_nat_enabled: true,
# تعريف قواعد GT NAT
gt_nat_rules: [
# القاعدة 1: المكالمات من البادئة "8772" تحصل على استجابة من "55512341112"
%{calling_prefix: "8772", response_gt: "55512341112"},
# القاعدة 2: المكالمات من البادئة "8773" تحصل على استجابة من "55512341111"
%{calling_prefix: "8773", response_gt: "55512341111"},
# القاعدة الافتراضية (بادئة فارغة تطابق كل شيء)
%{calling_prefix: "", response_gt: "55512311555"}
]
معلمات التكوين
للحصول على مرجع تكوين كامل، راجع معلما�� GT NAT في مرجع التكوين.
| المعلمة | النوع | مطلوب | الوصف |
|---|---|---|---|
gt_nat_enabled | Boolean | نعم | تفعيل/تعطيل ميزة GT NAT |
gt_nat_rules | قائمة من الخرائط | نعم (إذا تم التفعيل) | قائمة بقواعد مطابقة البادئة |
تنسيق القاعدة
كل قاعدة هي خريطة تحتوي على المفاتيح التالية:
%{
calling_prefix: "8772", # (اختياري) بادئة للمطابقة مع GT المتصل
called_prefix: "555", # (اختياري) بادئة للمطابقة مع GT المتصل به
weight: 10, # (مطلوب) قيمة الأولوية (أقل = أولوية أعلى)
response_gt: "55512341112" # (مطلوب) GT للاستخدام في الاستجابات
}
حقول القاعدة:
-
calling_prefix(اختياري): بادئة سلسلة للمطابقة مع GT المتصل الوارد- تتم المطابقة بواسطة
String.starts_with?/2 - السلسلة الفارغة
""أوnilتعمل كبديل (تطابق أي GT متصل) - يمكن حذفها لمطابقة أي GT متصل
- تتم المطابقة بواسطة
-
called_prefix(اختياري): بادئة سلسلة للمطابقة مع GT المتصل به الوارد- تتم المطابقة بواسطة
String.starts_with?/2 - السلسلة الفارغة
""أوnilتعمل كبديل (تطابق أي GT متصل به) - يمكن حذفها لمطابقة أي GT متصل به
- تتم المطابقة بواسطة
-
weight(مطلوب): قيمة أولوية عددية- وزن أقل = أولوية أعلى (يتم معالجتها أولاً)
- يجب أن تكون >= 0
- تستخدم كمعيار فرز أساسي لقواعد المطابقة
-
response_gt(مطلوب): عنوان GT العالمي للاستخدام في الاستجابات- يجب أن تكون سلسلة رقم E.164 صالحة
- يجب أن تتطابق مع أحد GTs المكونة لديك
يجب تحديد واحد على الأقل من calling_prefix أو called_prefix للمطابقة المحددة. يمكن حذف كلاهما لقاعدة بديلة/عامة.
منطق مطابقة القاعدة
يتم تقييم القواعد بواسطة الوزن أولاً (تصاعدي)، ثم بواسطة خصوصية البادئة المجمعة:
خوارزمية المطابقة:
- تصفية القواعد حيث تتطابق جميع البادئات المحددة
- إذا تم تعيين
calling_prefix، يجب أن تتطابق مع GT المتصل - إذا تم تعيين
called_prefix، يجب أن تتطابق مع GT المتصل به - إذا تم تعيين كلاهما، يجب أن تتطابق كلاهما
- إذا لم يتم تعيين أي منهما، تعمل القاعدة كبديل
- إذا تم تعيين
- فرز القواعد المطابقة بواسطة:
- أساسي: الوزن (تصاعدي - القيم الأقل أولاً)
- ثانوي: طول البادئة المجمعة (تنازلي - الأطول = الأكثر تحديدًا)
- إرجاع أول قاعدة مطابقة
أمثلة:
# أمثلة القواعد
gt_nat_rules: [
# الوزن 1: أعلى أولوية - تطابق كلا البادئين
%{calling_prefix: "8772", called_prefix: "555", weight: 1, response_gt: "111111"},
# الوزن 10: أولوية متوسطة - قواعد محددة
%{calling_prefix: "8772", weight: 10, response_gt: "222222"}, # المتصل فقط
%{called_prefix: "555", weight: 10, response_gt: "333333"}, # المتصل به فقط
# الوزن 100: أقل أولوية - بديل عام
%{weight: 100, response_gt: "444444"} # تطابق كل شيء
]
# أمثلة المطابقة:
# المتصل: "877234567"، المتصل به: "555123" -> "111111" (الوزن 1، كلاهما يتطابق)
# المتصل: "877234567"، المتصل به: "999999" -> "222222" (الوزن 10، المتصل فقط)
# المتصل: "999999999"، المتصل به: "555123" -> "333333" (الوزن 10، المتصل به فقط)
# المتصل: "999999999"، المتصل به: "888888" -> "444444" (الوزن 100، بديل)
أمثلة
المثال 1: شريكان في الشبكة
السيناريو: أنت تدير SMSc مع شريكين في الشبكة. كل منهما يتوقع استجابات من GT مختلف.
config :omniss7,
gt_nat_enabled: true,
# GT الافتراضي لـ SMSc (يستخدم عندما يكون GT NAT معطلاً أو لا تطابق قاعدة)
smsc_service_center_gt_address: "5551000",
# قواعد GT NAT للشركاء
gt_nat_rules: [
# الشريك A (بادئة 4412) يتوقع استجابات من GT 5551001
%{calling_prefix: "4412", weight: 10, response_gt: "5551001"},
# الشريك B (بادئة 4413) يتوقع استجابات من GT 5551002
%{calling_prefix: "4413", weight: 10, response_gt: "5551002"},
# الافتراضي: استخدام GT القياسي لـ SMSc (بديل عام)
%{weight: 100, response_gt: "5551000"}
]
تدفق الحركة:
طلب وارد SRI-for-SM من 44121234567:
GT المتصل به: 5551001 (GT الخاص بك الذي يستخدمه الشريك A)
GT المتصل: 44121234567 (GT الخاص بالشريك A)
بحث GT NAT:
"44121234567" تطابق بادئة "4412"
GT للاستجابة المحددة: "5551001"
استجابة SRI-for-SM إلى 44121234567:
GT المتصل: 44121234567 (معكوس)
GT المتصل: 5551001 (معاد توجيهه)
networkNode-Number: 5551001 (في استجابة MAP)
المثال 2: HLR مع GTs إقليمية
السيناريو: HLR وطني مع GTs مختلفة لكل منطقة.
config :omniss7,
gt_nat_enabled: true,
hlr_service_center_gt_address: "555000", # GT الافتراضي لـ HLR
gt_nat_rules: [
# VLRs في المنطقة الشمالية (بادئة 5551)
%{calling_prefix: "5551", weight: 10, response_gt: "555100"},
# VLRs في المنطقة الجنوبية (بادئة 5552)
%{calling_prefix: "5552", weight: 10, response_gt: "555200"},
# VLRs في المنطقة الغربية (بادئة 5553)
%{calling_prefix: "5553", weight: 10, response_gt: "555300"},
# الافتراضي للمناطق الأخرى (بديل عام)
%{weight: 100, response_gt: "555000"}
]
المثال 3: سيناريو الترحيل
السيناريو: الترحيل من GT القديم إلى GT الجديد تدريجياً.
config :omniss7,
gt_nat_enabled: true,
hlr_service_center_gt_address: "123456789", # GT القديم (افتراضي)
gt_nat_rules: [
# الشبكات المهاجرة (قامت بتحديث تكويناتها بالفعل)
%{calling_prefix: "555", weight: 10, response_gt: "987654321"}, # GT الجديد
%{calling_prefix: "666", weight: 10, response_gt: "987654321"}, # GT الجديد
# الجميع لا يزال يستخدم GT القديم (بديل عام)
%{weight: 100, response_gt: "123456789"} # GT القديم
]
المثال 4: مطابقة بادئة الجهة المتصلة (جديد)
السيناريو: لديك عدة GTs لخدمات مختلفة، وتريد الاستجابة بـ GT الصحيح بناءً على GT الذي تم الاتصال به.
config :omniss7,
gt_nat_enabled: true,
gt_nat_rules: [
# عندما يتصلون بـ GT الرسائل القصيرة الخاص بك (5551xxx)، استجب بتلك GT
%{called_prefix: "5551", weight: 10, response_gt: "555100"},
# عندما يتصلون بـ GT الصوت الخاص بك (5552xxx)، استجب بتلك GT
%{called_prefix: "5552", weight: 10, response_gt: "555200"},
# عندما يتصلون بـ GT البيانات الخاص بك (5553xxx)، استجب بتلك GT
%{called_prefix: "5553", weight: 10, response_gt: "555300"},
# بديل عام
%{weight: 100, response_gt: "555000"}
]
تدفق الحركة:
طلب وارد إلى GT المتصل به: 555100 (GT الرسائل القصيرة الخاص بك)
GT المتصل: 441234567 (أي متصل)
بحث GT NAT:
GT المتصل به "555100" تطابق بادئة "5551"
GT للاستجابة المحددة: "555100"
تستخدم الاستجابة GT المتصل: 555100 (تطابق ما اتصلوا به)
المثال 5: المطابقة المجمعة للبادئات المتصلة والمستقبلين (متقدم)
السيناريو: يتصل شركاء مختلفون بـ GTs مختلفة، وتريد تحكمًا دقيقًا.
config :omniss7,
gt_nat_enabled: true,
gt_nat_rules: [
# الشريك A يتصل بـ GT الرسائل القصيرة الخاصة بك - أعلى أولوية (الوزن 1)
%{calling_prefix: "4412", called_prefix: "5551", weight: 1, response_gt: "555101"},
# الشريك B يتصل بـ GT الرسائل القصيرة الخاصة بك - أعلى أولوية (الوزن 1)
%{calling_prefix: "4413", called_prefix: "5551", weight: 1, response_gt: "555102"},
# أي شخص يتصل بـ GT الرسائل القصيرة الخاصة بك - أولوية متوسطة (الوزن 10)
%{called_prefix: "5551", weight: 10, response_gt: "555100"},
# الشريك A يتصل بأي GT - أولوية متوسطة (الوزن 10)
%{calling_prefix: "4412", weight: 10, response_gt: "555200"},
# بديل عام - أولوية منخفضة (الوزن 100)
%{weight: 100, response_gt: "555000"}
]
أمثلة المطابقة:
# الشريك A يتصل بـ GT الرسائل القصيرة
المتصل: "441234567"، المتصل به: "555100"
→ تطابق القاعدة ذات الوزن 1 (كلا البادئين) → "555101"
# الشريك A يتصل بـ GT الصوت
المتصل: "441234567"، المتصل به: "555200"
→ تطابق القاعدة ذات الوزن 10 (المتصل فقط) → "555200"
# متصل غير معروف يتصل بـ GT الرسائل القصيرة
المتصل: "999999999"، المتصل به: "555100"
→ تطابق القاعدة ذات الوزن 10 (المتصل به فقط) → "555100"
# متصل غير معروف يتصل بـ GT الصوت
المتصل: "999999999"، المتصل به: "555200"
→ تطابق القاعدة ذات الوزن 100 (بديل) → "555000"
أوضاع التشغيل
يعمل GT NAT عبر جميع أوضاع التشغيل لـ OmniSS7:
وضع HLR
يؤثر GT NAT على:
- استجابات UpdateLocation (GT HLR في الاستجابة)
- رسائل InsertSubscriberData (GT HLR كجهة متصلة)
- استجابات SendAuthenticationInfo
- استجابات Cancel Location
لمزيد من المعلومات حول عمليات HLR، راجع دليل تكوين HLR.
التكوين:
config :omniss7,
hlr_mode_enabled: true,
hlr_service_center_gt_address: "5551234567", # GT الافتراضي لـ HLR
gt_nat_enabled: true,
gt_nat_rules: [
%{calling_prefix: "331", weight: 10, response_gt: "5551234568"}, # فرنسا
%{calling_prefix: "44", weight: 10, response_gt: "5551234569"}, # المملكة المتحدة
%{weight: 100, response_gt: "5551234567"} # بديل عام
]
وضع SMSc
يؤثر GT NAT على:
- استجابات SRI-for-SM (
networkNode-Numberالحقل) - انظر تفاصيل SRI-for-SM - تأكيدات MT-ForwardSM
لمزيد من المعلومات حول عمليات SMSc، راجع دليل تكوين SMSc.
التكوين:
config :omniss7,
smsc_mode_enabled: true,
smsc_service_center_gt_address: "5559999", # GT الافتراضي لـ SMSc
gt_nat_enabled: true,
gt_nat_rules: [
%{calling_prefix: "1", weight: 10, response_gt: "5559991"}, # أمريكا الشمالية
%{calling_prefix: "44", weight: 10, response_gt: "5559992"}, # المملكة المتحدة
%{calling_prefix: "86", weight: 10, response_gt: "5559993"}, # الصين
%{weight: 100, response_gt: "5559999"} # بديل عام
]
وضع بوابة CAMEL
يؤثر GT NAT على:
- جميع استجابات مستوى SCCP (GT gsmSCF كجهة متصلة)
- استجابات عمليات CAMEL/CAP (InitialDP، EventReportBCSM، إلخ.)
- تأكيدات RequestReportBCSMEvent
- استجابات ApplyCharging
- استجابات Continue
التكوين:
config :omniss7,
camelgw_mode_enabled: true,
camel_gsmscf_gt_address: "55512341112", # GT الافتراضي لـ gsmSCF
gt_nat_enabled: true,
gt_nat_rules: [
%{calling_prefix: "555", weight: 10, response_gt: "55512341111"}, # الشبكة A
%{calling_prefix: "666", weight: 10, response_gt: "55512311555"}, # الشبكة B
%{weight: 100, response_gt: "55512341112"} # بديل عام
]
حالة الاستخدام: عند العمل كـ gsmSCF (وظيفة التحكم في الخدمة) لعدة شبكات، قد يتوقع كل gsmSSF استجابات من GT gsmSCF محدد. يضمن GT NAT استخدام GT الصحيح بناءً على أي gsmSSF يتصل.
السجلات واستكشاف الأخطاء وإصلاحها
تفعيل سجلات GT NAT
يتضمن GT NAT تسجيلًا تلقائيًا لجميع الترجمات:
# في السجلات، سترى:
[info] GT NAT [استجابة SRI-for-SM]: GT المتصل 877234567 -> GT الاستجابة 55512341112
[info] GT NAT [UpdateLocation ISD]: GT المتصل 331234567 -> GT الاستجابة 55512341111
[info] GT NAT [استجابة MAP BEGIN]: GT المتصل 441234567 -> GT الاستجابة 55512311555
يظهر حقل السياق المكان الذي تم فيه تطبيق NAT:
"استجابة SRI-for-SM"- في معالج SRI-for-SM"UpdateLocation ISD"- في رسائل InsertSubscriberData"UpdateLocation END"- في استجابة UpdateLocation END"استجابة MAP BEGIN"- استجابات MAP BEGIN العامة"ISD ACK"- تأكيد ISD"استجابة خطأ HLR"- استجابة خطأ من HLR"استجابة CAMEL"- استجابات عمليات CAMEL/CAP (gsmSCF)
التحقق
يتحقق النظام من تكوين GT NAT عند بدء التشغيل:
# تحقق من تكوين GT NAT
iex> GtNat.validate_config()
{:ok, [
%{calling_prefix: "8772", weight: 10, response_gt: "55512341112"},
%{calling_prefix: "8773", weight: 10, response_gt: "55512341111"}
]}
# تحقق مما إذا كان مفعلًا
iex> GtNat.enabled?()
true
# احصل على جميع القواعد
iex> GtNat.get_rules()
[
%{calling_prefix: "8772", weight: 10, response_gt: "55512341112"},
%{calling_prefix: "8773", weight: 10, response_gt: "55512341111"}
]
اختبار GT NAT
اختبر منطق GT NAT برمجيًا:
# اختبار الترجمة مع GT المتصل فقط (called_gt هو nil)
iex> GtNat.translate_response_gt("877234567", nil, "default_gt")
"55512341112"
# اختبار الترجمة مع كل من GT المتصل وGT المتصل به
iex> GtNat.translate_response_gt("877234567", "555123", "default_gt")
"55512341112"
# اختبار مع السجلات (GT المتصل به هو nil)
iex> GtNat.translate_response_gt_with_logging("877234567", nil, "default_gt", "test")
# السجلات: GT NAT [test]: GT المتصل 877234567 -> GT الاستجابة 55512341112
"55512341112"
# اختبار مع السجلات (كلا GTs)
iex> GtNat.translate_response_gt_with_logging("877234567", "555123", "default_gt", "test")
# السجلات: GT NAT [test]: GT المتصل 877234567، GT المتصل به 555123 -> GT الاستجابة 55512341112
"55512341112"
# اختبار عدم المطابقة (يعود إلى الافتراضي)
iex> GtNat.translate_response_gt("999999999", "888888", "default_gt")
"default_gt"
استكشاف الأخطاء وإصلاحها
المشكلة: GT NAT لا يعمل
التحقق 1: هل هو مفعل؟
iex> Application.get_env(:omniss7, :gt_nat_enabled)
true # يجب أن يكون true
التحقق 2: هل تم تكوين القواعد؟
iex> Application.get_env(:omniss7, :gt_nat_rules)
[%{calling_prefix: "8772", response_gt: "55512341112"}, ...] # يجب أن تعيد قائمة
التحقق 3: تحقق من السجلات ابحث عن "GT NAT" في السجلات لمعرفة ما إذا كانت الترجمات تحدث.
المشكلة: GT خاطئ في الاستج��بات
الأعراض: تستخدم الاستجابات عنوان GT غير المتوقع
السبب: قد تكون مطابقة بادئة القاعدة واسعة جدًا أو أن القاعدة الافتراضية تلتقط الحركة
الحل: مراجعة أوزان القواعد والبادئات:
# سيء: بديل مع وزن منخفض (يلتقط كل شيء أولاً)
gt_nat_rules: [
%{weight: 1, response_gt: "111111"}, # هذا يطابق كل شيء أولاً!
%{calling_prefix: "8772", weight: 10, response_gt: "222222"} # لا تصل أبدًا
]
# جيد: قواعد محددة مع وزن أقل، بديل مع وزن أعلى
gt_nat_rules: [
%{calling_prefix: "8772", weight: 10, response_gt: "222222"}, # محدد، وزن منخفض
%{weight: 100, response_gt: "111111"} # بديل، وزن عالي (بديل)
]
المشكلة: لم يتم تطبيق GT NAT على نوع رسالة محدد
الأعراض: تستخدم بعض الاستجابات GT المعاد توجيهه، والبعض الآخر لا
التغطية الحالية:
- ✅ GT المتصل SCCP (جميع الاستجابات)
- ✅ استجابات SRI-for-SM (networkNode-Number)
- ✅ رسائل UpdateLocation ISD (GT HLR)
- ✅ استجابات UpdateLocation END
- ✅ تأكيدات ISD
- ✅ استجابات MAP BEGIN
إذا لم يكن نوع رسالة محدد يستخدم GT NAT، فقد لا يتم تنفيذه بعد. تحقق من الشيفرة المصدرية أو اتصل بالدعم.
اعتبارات الأداء
أداء البحث
يستخدم GT NAT مطابقة بادئة بسيطة مع تعقيد O(n) حيث n هو عدد القواعد.
نصائح الأداء:
- احتفظ بعدد القواعد أقل من 100 لأفضل أداء
- استخدم بادئات محددة لتقليل عدد القواعد
- يجب أن تكون القاعدة الافتراضية (بادئة فارغة) في النهاية
اختبار الأداء (نظام نموذجي):
- 10 قواعد: < 1µs لكل بحث
- 50 قاعدة: < 5µs لكل بحث
- 100 قاعدة: < 10µs لكل بحث
استخدام الذاكرة
تتطلب كل قاعدة حوالي 100 بايت من الذاكرة:
- 10 قواعد ≈ 1 KB
- 100 قاعدة ≈ 10 KB
أفضل الممارسات
1. دائمًا تضمين قاعدة بديلة عامة
gt_nat_rules: [
%{calling_prefix: "8772", weight: 10, response_gt: "111111"},
%{calling_prefix: "8773", weight: 10, response_gt: "222222"},
%{weight: 100, response_gt: "default_gt"} # دائمًا يجب أن يكون لديك بديل بوزن عالي
]
2. استخدم بادئات وأوزان ذات معنى
# جيد: بادئات واضحة ومحددة مع أوزان مناسبة
%{calling_prefix: "331", weight: 10, response_gt: "..."} # فرنسا
%{calling_prefix: "44", weight: 10, response_gt: "..."} # المملكة المتحدة
# سيء: بادئات واسعة جدًا أو أوزان مربكة
%{calling_prefix: "3", weight: 5, response_gt: "..."} # العديد من البلدان
%{calling_prefix: "331", weight: 100, response_gt: "..."} # الوزن يجب أن يكون أقل للقواعد المحددة
3. وثق قواعدك
gt_nat_rules: [
# الشريك XYZ - شبكة المملكة المتحدة (نطاق GT: 4412xxxxxxx)
# الوزن 10: أولوية الشريك القياسية
%{calling_prefix: "4412", weight: 10, response_gt: "5551001"},
# الشريك ABC - شبكة فرنسا (نطاق GT: 33123xxxxxx)
# الوزن 10: أولوية الشريك القياسية
%{calling_prefix: "33123", weight: 10, response_gt: "5551002"}
]
4. اختبر قبل النشر
# اختبر في iex قبل النشر
iex> GtNat.translate_response_gt("44121234567", nil, "default")
"5551001" # النتيجة المتوقعة
# اختبار مع GT المتصل به
iex> GtNat.translate_response_gt("44121234567", "555123", "default")
"5551001" # النتيجة المتوقعة
5. راقب السجلات
قم بتمكين تسجيل مستوى INFO لرؤية جميع ترجمات GT NAT في الإنتاج.
التكامل مع ميزات أخرى
وضع STP
يعمل GT NAT بشكل مستقل عن توجيه STP. تقوم STP بتوجيه بناءً على رموز النقاط وعناوين GT الوجهة، بينما يتعامل GT NAT مع عناوين الاستجابة.
لمزيد من المعلومات حول توجيه STP، راجع دليل تكوين STP.
تكامل CAMEL
GT NAT مكامل تمامًا مع عمليات CAMEL/CAP:
طبقة SCCP:
- GT الجهة المتصلة في جميع استجابات CAMEL
- يتم تطبيقه تلقائيًا بناءً على GT gsmSSF الوارد
التكوين:
camel_gsmscf_gt_address- GT الافتراضي لـ gsmSCF (اختياري)- إذا لم يتم تكوينه، يستخدم GT الجهة المتصلة من الطلب الوارد
- تتجاوز قواعد GT NAT الافتراضي بناءً على بادئة الجهة ��لمتصلة
مثال:
# عندما يتصل gsmSSF 555123456 بـ gsmSCF الخاص بك
# الوارد: المتصل به=55512341112، المتصل=555123456
# بحث GT NAT: "555" -> GT الاستجابة="55512341111"
# الاستجابة: المتصل به=555123456، المتصل=55512341111
توازن الحمل
يمكن دمج GT NAT مع توازن الحمل M3UA لإدارة حركة المرور المتقدمة.
دليل الترحيل
تفعيل GT NAT على النظام الحالي
-
تحضير التكوين
# أضف إلى runtime.exs (احتفظ به معطل في البداية)
config :omniss7,
gt_nat_enabled: false, # ابدأ معطلاً
gt_nat_rules: [
# قواعدك هنا مع الأوزان
%{calling_prefix: "877", weight: 10, response_gt: "111111"},
%{weight: 100, response_gt: "999999"} # بديل عام
] -
اختبار التكوين
# تحقق من تجميع التكوين
mix compile
# اختبار في iex
iex -S mix
iex> GtNat.validate_config() -
تفعيل في البيئة التجريبية
gt_nat_enabled: true # تغيير إلى true -
راقب السجلات
tail -f log/omniss7.log | grep "GT NAT" -
نشر في الإنتاج
- نشر خلال نافذة الصيانة
- راقب الساعات الـ 24 الأولى عن كثب
- يجب أن يكون لديك خطة للعودة (تعيين
gt_nat_enabled: false)
الدعم
للمشاكل أو الأسئلة:
- تحقق من السجلات للحصول على رسائل "GT NAT"
- تحقق من التكوين باستخدام
GtNat.validate_config() - راجع قسم استكشاف الأخطاء وإصلاحها في هذا الدليل
- اتصل بدعم OmniSS7 مع مقتطفات السجلات