انتقل إلى المحتوى الرئيسي

اكتشاف ومراقبة P-CSCF

اكتشاف خادم P-CSCF الديناميكي مع المراقبة في الوقت الحقيقي

OmniPGW من خدمات شبكة أومنيتاتش


نظرة عامة

اكتشاف ومراقبة P-CSCF (وظيفة التحكم في جلسة الاتصال الوكيلة) يوفر اكتشافًا ديناميكيًا لخوادم IMS P-CSCF باستخدام استعلامات DNS SRV مع فحص صحة SIP OPTIONS في الوقت الحقيقي. تتيح هذه الميزة:

  • اكتشاف P-CSCF حسب القاعدة: خوادم P-CSCF مختلفة لأنواع حركة المرور المختلفة
  • المراقبة التلقائية: عملية خلفية تراقب باستمرار حل DNS (كل 60 ثانية)
  • فحوصات صحة SIP OPTIONS: تتحقق من أن خوادم P-CSCF نشطة عبر إشارات SIP OPTIONS
    • TCP أولاً: تحاول SIP OPTIONS عبر TCP (مفضل من حيث الموثوقية)
    • العودة إلى UDP: تعود إلى UDP إذا فشل TCP
    • تتبع الحالة: تعين كل خادم كـ :up أو :down بناءً على الاستجابة
  • تتبع الصحة في الوقت الحقيقي: تعرض واجهة الويب حالة الحل، وعناوين IP المكتشفة، وحالة الصحة
  • العودة السلسة: استراتيجية عودة من ثلاث طبقات لتحقيق أقصى موثوقية
  • مقاييس بروميثيوس: رؤية كاملة عبر مقاييس بروميثيوس

جدول المحتويات

  1. بدء سريع
  2. التكوين
  3. كيف يعمل
  4. مراقبة واجهة الويب
  5. المقاييس والرؤية
  6. استراتيجية العودة
  7. تكوين DNS
  8. استكشاف الأخطاء وإصلاحها
  9. أفضل الممارسات

بدء سريع

التكوين الأساسي

# config/runtime.exs

# تكوين PCO العالمي (خادم DNS لاكتشاف P-CSCF)
config :pgw_c,
pco: %{
p_cscf_discovery_dns_server: "10.179.2.177",
p_cscf_discovery_enabled: true,
p_cscf_discovery_timeout_ms: 5000
},

upf_selection: %{
rules: [
# حركة مرور IMS - اكتشاف P-CSCF الديناميكي
%{
name: "IMS Traffic",
priority: 20,
match_field: :apn,
match_regex: "^ims",
upf_pool: [
%{remote_ip_address: "10.100.2.21", remote_port: 8805, weight: 80}
],
# FQDN لاكتشاف P-CSCF (انظر دليل التكوين لمزيد من قواعد اختيار UPF)
p_cscf_discovery_fqdn: "pcscf.mnc380.mcc313.3gppnetwork.org",
# العودة الثابتة (انظر دليل تكوين PCO)
pco: %{
p_cscf_ipv4_address_list: ["10.101.2.100", "10.101.2.101"]
}
}
]
}

انظر دليل التكوين للحصول على تكوين كامل لقواعد اختيار UPF و تكوين PCO لخيارات العودة الثابتة لـ P-CSCF.

مراقبة الوصول

  1. ابدأ OmniPGW
  2. انتقل إلى واجهة الويب → مراقب P-CSCF (https://localhost:8086/pcscf_monitor)
  3. عرض حالة الحل في الوقت الحقيقي وعناوين IP المكتشفة

التكوين

إعدادات اكتشاف P-CSCF العالمية

قم بتكوين خادم DNS المستخدم لاكتشاف P-CSCF في قسم PCO:

pco: %{
# خادم DNS لاكتشاف P-CSCF (مختلف عن DNS المقدم لـ UE)
p_cscf_discovery_dns_server: "10.179.2.177",

# تمكين ميزة اكتشاف DNS لـ P-CSCF
p_cscf_discovery_enabled: true,

# مهلة لاستعلامات DNS SRV (بالملي ثانية)
p_cscf_discovery_timeout_ms: 5000,

# عناوين P-CSCF الثابتة (عودة عالمية)
p_cscf_ipv4_address_list: ["10.101.2.146"]
}

FQDNs لـ P-CSCF حسب القاعدة

يمكن لكل قاعدة اختيار UPF تحديد FQDN اكتشاف P-CSCF الخاص بها:

upf_selection: %{
rules: [
# حركة مرور IMS - P-CSCF خاص بـ IMS
%{
name: "IMS Traffic",
match_field: :apn,
match_regex: "^ims",
upf_pool: [...],
p_cscf_discovery_fqdn: "pcscf.ims.mnc380.mcc313.3gppnetwork.org",
pco: %{
p_cscf_ipv4_address_list: ["10.101.2.100"] # العودة
}
},

# المؤسسة - P-CSCF خاص بالمؤسسة
%{
name: "Enterprise Traffic",
match_field: :apn,
match_regex: "^enterprise",
upf_pool: [...],
p_cscf_discovery_fqdn: "pcscf.enterprise.example.com",
pco: %{
p_cscf_ipv4_address_list: ["192.168.1.50"] # العودة
}
},

# الإنترنت - لا يوجد اكتشاف P-CSCF (يستخدم التكوين العالمي)
%{
name: "Internet Traffic",
match_field: :apn,
match_regex: "^internet",
upf_pool: [...]
# لا يوجد p_cscf_discovery_fqdn - يستخدم تكوين PCO العالمي
}
]
}

كيف يعمل

عملية بدء التشغيل

  1. بدء التطبيق

    • يتم تهيئة P-CSCF Monitor GenServer
    • يقوم محلل التكوين باستخراج جميع FQDNs الفريدة لـ P-CSCF من قواعد اختيار UPF
  2. تسجيل FQDN

    • يتم تسجيل كل FQDN فريد مع المراقب
    • يقوم المراقب بإجراء استعلام DNS SRV أولي لكل FQDN
    • فحص صحة SIP OPTIONS (بالتوازي لجميع الخوادم المكتشفة):
      • حاول TCP أولاً (SIP/2.0/TCP على المنفذ 5060)
      • إذا فشل TCP، انتقل إلى UDP (SIP/2.0/UDP على المنفذ 5060)
      • قم بتعيين كل خادم كـ :up (يستجيب) أو :down (لا استجابة/مهلة)
    • يتم تخزين النتائج (عناوين IP، حالة الصحة، أو الأخطاء) مع الطوابع الزمنية
  3. المراقبة الدورية (كل 60 ثانية)

    • يقوم المراقب بتحديث جميع FQDNs
    • يتم تشغيل استعلامات DNS في الخلفية دون حظر
    • لكل خادم مكتشف:
      • إرسال SIP OPTIONS عبر TCP (مهلة: 5 ثواني)
      • إذا فشل TCP، حاول UDP (مهلة: 5 ثواني)
      • تحديث حالة الصحة بناءً على الاستجابة
    • يتم تحديث التخزين المؤقت بأحدث نتائج DNS وحالة الصحة

تدفق إنشاء الجلسة

عملية استعلام DNS

يستخدم المراقب سجلات DNS SRV للاكتشاف المباشر لـ P-CSCF:

  1. استعلام SRV: استعلام سجلات SRV في _sip._tcp.{fqdn}
  2. فرز الأولويات: فرز حسب الأولوية والوزن
  3. استخراج الهدف: استخراج أسماء المضيفين من سجلات SRV
  4. حل اسم المضيف: حل أسماء المضيفين المستهدفة إلى عناوين IP (سجلات A/AAAA)
  5. التخزين المؤقت: تخزين عناوين IP المحلولة مع الحالة والطابع الزمني

أولوية اختيار عنوان P-CSCF

عندما يتم تكوين كل من FQDN و PCO الثابت على قاعدة، فإن FQDN يأخذ الأولوية:

%{
name: "IMS Traffic",
p_cscf_discovery_fqdn: "pcscf.mnc380.mcc313.3gppnetwork.org", # ← تم التجربة أولاً
pco: %{
p_cscf_ipv4_address_list: ["10.101.2.100", "10.101.2.101"] # ← العودة
}
}

منطق الاختيار:

الشرطمصدر P-CSCFالعناوين المستخدمةرسالة السجل
تم حل FQDN بنجاحاكتشاف DNS (المراقب)عناوين IP المكتشفة من DNS"Using P-CSCF addresses from FQDN pcscf.example.com"
فشل FQDN في الحلتجاوز PCO للقاعدةعناوين IP الثابتة من pco.p_cscf_ipv4_address_list"Failed to get P-CSCF IPs from FQDN..., falling back to static config"
FQDN يعيد قائمة فارغةتجاوز PCO للقاعدةعناوين IP الثابتة من pco.p_cscf_ipv4_address_listتم تفعيل العودة
المراقب غير متاحتجاوز PCO للقاعدةعناوين IP الثابتة من pco.p_cscf_ipv4_address_listخطأ يؤدي إلى العودة
لا يوجد FQDN تم تكوينهتجاوز PCO للقاعدة أو عالميعناوين IP من القاعدة أو التكوين العالمييستخدم التكوين الثابت مباشرة

تدفق المثال:

إنشاء جلسة لقانون حركة IMS:
┌─────────────────────────────────────┐
│ 1. تحقق مما إذا كان FQDN تم تكوينه؟ │
│ ✓ نعم: "pcscf.mnc380.mcc313..." │
└──────────────┬──────────────────────┘


┌─────────────────────────────────────┐
│ 2. استعلام المراقب عن عناوين IP المخزنة │
│ Monitor.get_ips(fqdn) │
└──────────────┬──────────────────────┘

┌───────┴────────┐
▼ ▼
┌─────────────┐ ┌��─────────────────┐
│ نجاح │ │ فشل/فارغ │
│ {:ok, ips} │ │ {:error, reason} │
└──────┬──────┘ └────────┬─────────┘
│ │
▼ ▼
┌─────────────┐ ┌──────────────────┐
│ استخدم عناوين DNS │ │ استخدم PCO الثابت │
│ [من DNS] │ │ [من التكوين] │
└─────────────┘ └──────────────────┘
│ │
└────────┬─────────┘

┌──────────────────┐
│ إرسال إلى UE في │
│ رسالة PCO │
└──────────────────┘

سيناريوهات العالم الحقيقي:

السيناريو 1: يعمل اكتشاف DNS

التكوين:
p_cscf_discovery_fqdn: "pcscf.ims.example.com"
pco.p_cscf_ipv4_address_list: ["10.101.2.100"]

نتيجة DNS: [10.101.2.150, 10.101.2.151]
يتلقى UE: [10.101.2.150, 10.101.2.151] ← ��ن DNS
ملاحظة: يتم تجاهل PCO الثابت عند نجاح DNS

السيناريو 2: فشل DNS، عودة سلسة ⚠️

التكوين:
p_cscf_discovery_fqdn: "pcscf.ims.example.com"
pco.p_cscf_ipv4_address_list: ["10.101.2.100"]

نتيجة DNS: ERROR :no_naptr_records
يتلقى UE: [10.101.2.100] ← من PCO الثابت
ملاحظة: تنجح الجلسة على الرغم من فشل DNS

السيناريو 3: لا يوجد FQDN تم تكوينه

التكوين:
# لا يوجد p_cscf_discovery_fqdn
pco.p_cscf_ipv4_address_list: ["192.168.1.50"]

يتلقى UE: [192.168.1.50] ← من PCO الثابت
ملاحظة: لم يتم محاولة اكتشاف DNS

لماذا هذا التصميم؟

  1. تفضيل الديناميكية: يوفر DNS المرونة، وتوازن الحمل، والتوجيه المدرك للموقع
  2. ضمان الموثوقية: تضمن العودة الثابتة أن الجلسات لا تفشل أبدًا بسبب مشكلات DNS
  3. عدم التدخل اليدوي: فشل تلقائي بدون تدخل المشغل
  4. آمن للإنتاج: أفضل ما في العالمين - الرشاقة مع الاستقرار

التوصية: قم دائمًا بتكوين كل من FQDN و PCO الث��بت للنشر في الإنتاج:

# ✓ موصى به: ديناميكي مع العودة
%{
p_cscf_discovery_fqdn: "pcscf.ims.example.com", # مفضل
pco: %{
p_cscf_ipv4_address_list: ["10.101.2.100"] # شبكة الأمان
}
}

# ⚠️ محفوف بالمخاطر: ديناميكي فقط (يعود إلى PCO العالمي)
%{
p_cscf_discovery_fqdn: "pcscf.ims.example.com"
# لا يوجد عودة خاصة بالقواعد!
}

# ✓ صالح: ثابت فقط (بدون عبء DNS)
%{
pco: %{
p_cscf_ipv4_address_list: ["192.168.1.50"]
}
}

مراقبة واجهة الويب

صفحة مراقب P-CSCF

يمكن الوصول إلى واجهة المراقبة على: https://localhost:8086/pcscf_monitor

مراقب P-CSCF

الميزات:

  • إحصائيات عامة

    • إجمالي FQDNs المراقبة
    • FQDNs التي تم حلها بنجاح
    • الحلول الفاشلة
    • إجمالي عناوين IP المكتشفة لـ P-CSCF
  • جدول FQDN

    • FQDN الذي يتم مراقبته
    • حالة الحل (✓ تم الحل / ✗ فشل / ⏳ قيد الانتظار)
    • عدد عناوين IP المكتشفة
    • قائمة عناوين IP المحلولة (مع تفاصيل الخادم القابلة للتوسيع)
    • الطابع الزمني لآخر تحديث
    • زر التحديث اليدوي لكل FQDN
    • حالة الصحة: يظهر كل خادم مكتشف:
      • عنوان IP والمنفذ
      • اسم المضيف (من هدف DNS SRV)
      • مؤشر صحة في الوقت الحقيقي (✓ نشط / ✗ غير نشط)
  • تحكمات التحديث

    • زر تحديث الكل: تفعيل إعادة استعلام فورية لجميع FQDNs
    • تحديث لكل FQDN: تحديث FQDNs فرديًا عند الطلب
    • التحديث التلقائي: يتم تحديث الصفحة كل 5 ثواني
  • لوحة تحكم مقاييس المراقبة

    • إجمالي FQDNs: عدد FQDNs الفريدة المسجلة للمراقبة
    • تم حلها بنجاح: FQDNs التي تم حلها بنجاح عبر DNS
    • فشل حلول DNS: FQDNs التي فشلت في الحل
    • إجمالي خوادم P-CSCF: إجمالي عدد الخوادم المكتشفة عبر جميع FQDNs
    • ✓ صحي (SIP OPTIONS نشطة): الخوادم التي تستجيب لفحوصات صحة SIP OPTIONS
    • ✗ غير صحي (SIP OPTIONS غير نشطة): الخوادم التي لا تستجيب لفحوصات SIP OPTIONS
    • معدل نجاح DNS: نسبة الحلول الناجحة لـ DNS
    • فترة فحص الصحة: تكرار فحوصات صحة SIP OPTIONS (60 ثانية، 5 ثواني مهلة)

لوحة تحكم مقاييس مراقب P-CSCF

توفر لوحة تحكم المقاييس رؤية في الوقت الحقيقي لكل من صحة حل DNS وتوافر خادم P-CSCF عبر SIP OPTIONS.

تكامل صفحة اختيار UPF

تعرض صفحة اختيار UPF (/upf_selection) حالة اكتشاف P-CSCF لكل قاعدة:

📌 حركة مرور IMS (الأولوية 20)
المطابقة: مطابقة APN ^ims
المجموعة: UPF-IMS-Primary (10.100.2.21:8805)

🔍 اكتشاف P-CSCF
FQDN: pcscf.mnc380.mcc313.3gppnetwork.org
الحالة: ✓ تم الحل (2 IPs)
عناوين IP المحلولة: 10.101.2.100، 10.101.2.101

⚙️ تجاوزات PCO
DNS الأساسي: 10.103.2.195
P-CSCF (عودة ثابتة): 10.101.2.100، 10.101.2.101

المقاييس والرؤية

مقاييس بروميثيوس

يقدم نظام مراقبة P-CSCF مقاييس عبر بروميثيوس (المنفذ 42069 بشكل افتراضي):

مقاييس Gauge

# مقاييس على مستوى FQDN
pcscf_fqdns_total # إجمالي عدد FQDNs المراقبة
pcscf_fqdns_resolved # FQDNs التي تم حلها بنجاح (نجح DNS)
pcscf_fqdns_failed # فشل حلول FQDN (فشل DNS)

# مقاييس على مستوى الخادم (مجمعة)
pcscf_servers_total # إجمالي خوادم P-CSCF المكتشفة عبر DNS SRV
pcscf_servers_healthy # الخوادم التي تستجيب لـ SIP OPTIONS (مجمعة)
pcscf_servers_unhealthy # الخوادم التي لا تستجيب لـ SIP OPTIONS (مجمعة)

# مقاييس على مستوى الخادم (لكل FQDN مع التسمية)
pcscf_servers_healthy{fqdn="..."} # خوادم صحية لـ FQDN محدد
pcscf_servers_unhealthy{fqdn="..."} # خوادم غير صحية لـ FQDN محدد

تفاصيل فحص الصحة:

  • healthy: الخادم استجاب لإشارة SIP OPTIONS (TCP أو UDP)
  • unhealthy: الخادم فشل في الاستجابة لإشارات SIP OPTIONS (مهلة 5 ثواني لكل وسيلة نقل)

أمثلة المقاييس

مقاييس حل DNS:

# استعلام FQDNs التي تم حلها بنجاح
pcscf_fqdns_resolved

# حساب معدل نجاح DNS
(pcscf_fqdns_resolved / pcscf_fqdns_total) * 100

# إجمالي الخوادم المكتشفة
pcscf_servers_total

مقاييس صحة SIP OPTIONS:

# إجمالي الخوادم الصحية عبر جميع FQDNs
pcscf_servers_healthy

# إجمالي الخوادم غير الصحية
pcscf_servers_unhealthy

# حساب معدل نجاح فحص الصحة
(pcscf_servers_healthy / pcscf_servers_total) * 100

# الخوادم الصحية لـ FQDN محدد
pcscf_servers_healthy{fqdn="pcscf.mnc380.mcc313.3gppnetwork.org"}

# تنبيه عند عدم وجود أي خوادم نشطة
pcscf_servers_healthy == 0 AND pcscf_servers_total > 0

أمثلة تنبيهات بروميثيوس:

# تنبيه عندما تكون جميع خوادم P-CSCF غير نشطة
- alert: AllPCSCFServersDown
expr: pcscf_servers_healthy == 0 AND pcscf_servers_total > 0
for: 5m
labels:
severity: critical
annotations:
summary: "جميع خوادم P-CSCF غير صحية"
description: "{{ $value }} خادم صحي (0) - جميع فشلت فحوصات SIP OPTIONS"

# تنبيه عندما تكون أكثر من 50% من الخوادم غير نشطة
- alert: MajorityPCSCFServersDown
expr: (pcscf_servers_healthy / pcscf_servers_total) < 0.5
for: 5m
labels:
severity: warning
annotations:
summary: "معظم خوادم P-CSCF غير صحية"
description: "فقط {{ $value }}% من الخوادم تستجيب لإشارات SIP OPTIONS"

# تنبيه عند فشل حلول DNS
- alert: PCSCFDNSResolutionFailed
expr: pcscf_fqdns_failed > 0
for: 5m
labels:
severity: warning
annotations:
summary: "فشل حلول DNS لـ P-CSCF"
description: "{{ $value }} FQDN(s) تفشل في الحل"

التسجيل

يسجل المراقب الأحداث الرئيسية:

[info] تم بدء مراقب P-CSCF
[info] تسجيل 2 FQDNs فريدة لمراقبتها: ["pcscf.ims.example.com", "pcscf.enterprise.example.com"]
[info] مراقب P-CSCF: تسجيل FQDN pcscf.ims.example.com
[debug] مراقب P-CSCF: تم حل pcscf.ims.example.com بنجاح إلى 2 IPs
[warning] مراقب P-CSCF: فشل في حل pcscf.enterprise.example.com: :nxdomain
[debug] استخدام عناوين P-CSCF من FQDN pcscf.ims.example.com: [{10, 101, 2, 100}, {10, 101, 2, 101}]

استراتيجية العودة

يستخدم النظام استراتيجية عودة من ثلاث طبقات لتحقيق أقصى موثوقية:

الطبقة 1: اكتشاف DNS (المفضل)

p_cscf_discovery_fqdn: "pcscf.ims.example.com"
  • يقوم المراقب باستعلام DNS ويخزن عناوين IP المحلولة
  • تستخدم الجلسة عناوين IP المخزنة إذا كانت متاحة
  • الميزة: ديناميكية، موزعة على الحمل، مدركة للموقع

الطبقة 2: PCO ثابت خاص بالقاعدة (عودة)

pco: %{
p_cscf_ipv4_address_list: ["10.101.2.100", "10.101.2.101"]
}
  • تستخدم إذا فشل اكتشاف DNS أو لم يعد أي عناوين IP
  • تكوين ثابت خاص بالقاعدة
  • الميزة: عودة خاصة بالقاعدة، متوقعة

الطبقة 3: تكوين PCO العالمي (ملاذ أخير)

# تكوين pco العالمي
pco: %{
p_cscf_ipv4_address_list: ["10.101.2.146"]
}
  • تستخدم إذا لم يكن هناك تكوين خاص بالقاعدة وفشل DNS
  • عناوين P-CSCF الافتراضية العالمية
  • الميزة: متاحة دائمًا، تمنع فشل الجلسة

مثال على منطق العودة

تطابق الجلسة مع قاعدة "حركة IMS":

1. حاول اكتشاف DNS لـ "pcscf.ims.example.com"
├─ النجاح → استخدم [10.101.2.100، 10.101.2.101] ✓
└─ الفشل → حاول الطبقة التالية

2. حاول تجاوز PCO للقاعدة
├─ تم تكوينه → استخدم [10.101.2.100، 10.101.2.101] ✓
└─ لم يتم تكوينه → حاول الطبقة التالية

3. استخدم تكوين PCO العالمي
└─ استخدم [10.101.2.146] ✓ (يحقق النجاح دائمًا)

تكوين DNS

إعداد خادم DNS

قم بتكوين خادم DNS مع سجلات SRV و A/AAAA لاكتشاف P-CSCF:

; سجلات SRV لـ P-CSCF (يتم استعلام بادئة _sip._tcp تلقائيًا)
_sip._tcp.pcscf.mnc380.mcc313.3gppnetwork.org. IN SRV 10 50 5060 pcscf1.example.com.
_sip._tcp.pcscf.mnc380.mcc313.3gppnetwork.org. IN SRV 20 50 5060 pcscf2.example.com.

; سجلات A
pcscf1.example.com. IN A 10.101.2.100
pcscf2.example.com. IN A 10.101.2.101

مهم: يقوم OmniPGW تلقائيًا بإضافة بادئة _sip._tcp. إلى FQDN المكون. إذا قمت بتكوين p_cscf_discovery_fqdn: "pcscf.mnc380.mcc313.3gppnetwork.org"، سيقوم النظام باستعلام _sip._tcp.pcscf.mnc380.mcc313.3gppnetwork.org.

تنسيق سجل SRV

تتبع سجلات SRV هذا التنسيق:

_service._proto.domain. IN SRV priority weight port target.
  • الأولوية: القيم الأقل لها أولوية أع��ى (10 قبل 20)
  • الوزن: لتوازن الحمل بين نفس الأولوية (أعلى = مزيد من الحركة)
  • المنفذ: منفذ SIP (عادة 5060 لـ TCP، 5060 لـ UDP)
  • الهدف: اسم المضيف الذي سيتم حله إلى عنوان IP

اختبار تكوين DNS

# استعلام سجلات SRV (لاحظ بادئة _sip._tcp)
dig SRV _sip._tcp.pcscf.mnc380.mcc313.3gppnetwork.org @10.179.2.177

# الناتج المتوقع:
# _sip._tcp.pcscf.mnc380.mcc313.3gppnetwork.org. 300 IN SRV 10 50 5060 pcscf1.example.com.

# حل اسم P-CSCF إلى IP
dig A pcscf1.example.com @10.179.2.177

# الناتج المتوقع:
# pcscf1.example.com. 300 IN A 10.101.2.100

استكشاف الأخطاء وإصلاحها

المشكلة: يظهر FQDN حالة "فشل"

الأعراض:

  • تظهر واجهة الويب حالة ✗ فشل
  • الخطأ: :nxdomain، :timeout، أو :no_naptr_records

الأسباب المحتملة:

  1. خادم DNS غير متاح
  2. FQDN غير موجود في DNS
  3. لا توجد سجلات NAPTR مكونة
  4. مهلة خادم DNS

الحل:

# 1. اختبار اتصال خادم DNS
ping 10.179.2.177

# 2. اختبار استعلام NAPTR يدويًا
dig NAPTR pcscf.mnc380.mcc313.3gppnetwork.org @10.179.2.177

# 3. تحقق من سجلات OmniPGW
grep "P-CSCF" /var/log/pgw_c.log

# 4. تحقق من التكوين
grep "p_cscf_discovery_dns_server" config/runtime.exs

# 5. تحديث يدوي في واجهة الويب
# انقر على زر "تحديث" بجوار FQDN الفاشل

المشكلة: لا يتم إرجاع أي IPs

الأعراض:

  • تظهر واجهة الويب "0 IPs"
  • قد تكون الحالة ✓ تم الحل أو ✗ فشل

الأسباب المحتملة:

  1. توجد سجلات NAPTR ولكن FQDNs البديلة لا تحل
  2. لا يتطابق حقل الخدمة مع نمط IMS/SIP
  3. سجلات A/AAAA مفقودة

الحل:

# تحقق من حقل خدمة سجل NAPTR
dig NAPTR pcscf.example.com @10.179.2.177

# تأكد من أن الخدمة تحتوي على "SIP" أو "IMS":
# صحيح: "SIP+D2U"، "x-3gpp-ims:sip"
# خاطئ: "HTTP"، "FTP"

# تحقق من وجود سجلات A/AAAA
dig pcscf1.example.com A @10.179.2.177

المشكلة: تستخدم الجلسات P-CSCF خاطئ

الأعراض:

  • يتلقى UE عناوين P-CSCF غير متوقعة
  • تم استخدام العودة الثابتة بدلاً من عناوين IP المكتشفة

الأسباب المح��ملة:

  1. فشل اكتشاف DNS لكن العودة تعمل
  2. مطابقة القاعدة غير صحيحة
  3. لم يتم تسجيل FQDN

الحل:

# 1. تحقق من صفحة مراقب P-CSCF
# تحقق مما إذا كان FQDN مسجلاً وتم حله

# 2. تحقق من سجلات الجلسة
grep "Using P-CSCF addresses from FQDN" /var/log/pgw_c.log

# 3. تحقق من صفحة اختيار UPF
# تحقق مما إذا كانت القاعدة تعرض FQDN الصحيح والحالة

# 4. اختبار مطابقة القاعدة
# إنشاء جلسة مع APN محدد والتحقق من القاعدة التي تطابق

المشكلة: ارتفاع زمن استعلام DNS

الأعراض:

  • بطء في إنشاء الجلسة
  • تظهر المقاييس زمن pcscf_discovery_query_duration_seconds مرتفع

الأسباب المحتملة:

  1. مشكلات في أداء خادم DNS
  2. زمن انتقال الشبكة إلى خادم DNS
  3. المهلة مرتفعة جدًا

الحل:

# تقليل زمن المهلة للاستعلام
pco: %{
p_cscf_discovery_timeout_ms: 2000 # تقليل من 5000 مللي ثانية
}

# النظر في استخدام خادم DNS أقرب
pco: %{
p_cscf_discovery_dns_server: "10.0.0.10" # DNS محلي
}

أفضل الممارسات

1. اختيار خادم DNS

استخدم خادم DNS مخصص

pco: %{
# DNS مخصص لاكتشاف P-CSCF (ليس نفس DNS الخاص بـ UE)
p_cscf_discovery_dns_server: "10.179.2.177",

# خوادم DNS لـ UE (المقدمة للأجهزة المحمولة)
primary_dns_server_address: "8.8.8.8",
secondary_dns_server_address: "8.8.4.4"
}

لماذا؟

  • فصل المخاوف: DNS الخاص بـ UE مقابل DNS IMS الداخلي
  • سياسات وصول وأمان مختلفة
  • توسيع وموثوقية مستقلة

2. قم دائمًا بتكوين العودة الثابتة

%{
p_cscf_discovery_fqdn: "pcscf.ims.example.com", # مفضل
pco: %{
p_cscf_ipv4_address_list: ["10.101.2.100"] # العودة المطلوبة
}
}

لماذا؟

  • يضمن نجاح الجلسات حتى إذا فشل DNS
  • تدهور سلس
  • يلبي متطلبات SLA

3. استخدم FQDNs محددة لكل نوع من حركة المرور

rules: [
# IMS
%{
name: "IMS",
match_regex: "^ims",
p_cscf_discovery_fqdn: "pcscf.ims.mnc380.mcc313.3gppnetwork.org"
},

# المؤسسة
%{
name: "Enterprise",
match_regex: "^enterprise",
p_cscf_discovery_fqdn: "pcscf.enterprise.example.com"
}
]

لماذا؟

  • مجموعات P-CSCF مختلفة لكل خدمة
  • توزيع أفضل للحمل
  • توجيه خاص بالخدمة

4. راقب أداء استعلام DNS

# تنبيه عند ارتفاع زمن استعلام P-CSCF
alert: HighPCSCFQueryLatency
expr: histogram_quantile(0.95, pcscf_discovery_query_duration_seconds_bucket) > 2
for: 5m
labels:
severity: warning
annotations:
summary: "استعلامات DNS لـ P-CSCF بطيئة (p95 > 2s)"

5. تحقق من صحة DNS بانتظام

  • واجهة الويب: تحقق من صفحة مراقب P-CSCF يوميًا
  • المقاييس: راقب المقياس pcscf_monitor_fqdns_failed
  • السجلات: راقب أخطاء DNS
  • الاختبار: تحقق دوريًا من وجود سجلات DNS

6. قم بتكوين المهلة المناسبة

# الإنتاج: توازن بين الموثوقية مقابل زمن الانتظار
pco: %{
p_cscf_discovery_timeout_ms: 5000 # 5 ثواني
}

# الأداء العالي: تفضيل السرعة، الاعتماد على العودة
pco: %{
p_cscf_discovery_timeout_ms: 2000 # 2 ثانية
}

7. استخدم تكرار DNS

قم بتكوين DNS أساسي وثانوي:

# DNS P-CSCF الأساسي
pcscf.mnc380.mcc313.3gppnetwork.org. IN NAPTR 10 50 "s" "SIP+D2U" "" _sip._udp.pcscf1.example.com.

# DNS P-CSCF الثانوي
pcscf.mnc380.mcc313.3gppnetwork.org. IN NAPTR 20 50 "s" "SIP+D2U" "" _sip._udp.pcscf2.example.com.

الوثائق ذات الصلة


العودة إلى الوثائق الرئيسية


مراقبة P-CSCF من OmniPGW - بواسطة خدمات شبكة أومنيتاتش