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

تكوين ملف المضيفين

نظرة عامة

ملف المضيفين (المعروف أيضًا بملف الجرد) هو الوثيقة المركزية للتكوين التي تحدد نشر شبكة الهاتف المحمول بالكامل. يحدد:

  • وظائف الشبكة التي يجب نشرها
  • أماكن تشغيلها (عناوين IP، شرائح الشبكة)
  • كيفية تكوينها (معلمات محددة للخدمة)
  • إعدادات خاصة بالعميل (PLMN، بيانات الاعتماد، الميزات)

موقع الملف

تُنظم ملفات المضيفين حسب العميل والبيئة:

services/hosts/
└── Customer_Name/
└── host_files/
├── production.yml
├── staging.yml
└── lab.yml

مثال على هيكل ملف المضيفين

إليك مثال مبسط يوضح الأقسام الرئيسية:

# مكونات EPC
mme:
hosts:
customer-mme01:
ansible_host: 10.10.1.15
gateway: 10.10.1.1
host_vm_network: "vmbr1"
mme_code: 1
network_name_short: Customer
tac_list: [600, 601, 602]

sgw:
hosts:
customer-sgw01:
ansible_host: 10.10.1.25
gateway: 10.10.1.1
cdrs_enabled: true

pgwc:
hosts:
customer-pgw01:
ansible_host: 10.10.1.21
gateway: 10.10.1.1
ip_pools:
- '100.64.16.0/24'

# مكونات IMS
pcscf:
hosts:
customer-pcscf01:
ansible_host: 10.10.4.165

# خدمات الدعم
license_server:
hosts:
customer-licenseserver:
ansible_host: 10.10.2.150

# المتغيرات العالمية
all:
vars:
ansible_connection: ssh
ansible_password: password
customer_name_short: customer
plmn_id:
mcc: '001'
mnc: '01'

معلمات المضيفين الشائعة

تكوين الشبكة

عادةً ما يتضمن كل مضيف:

pcscf:
hosts:
customer-pcscf01:
ansible_host: 10.10.1.15 # عنوان IP للوصول عبر SSH
gateway: 10.10.1.1 # البوابة الافتراضية
host_vm_network: "vmbr1" # اسم NIC للاستخدام على Hypervisor

ملاحظة: للحصول على إرشادات حول تخطيط عنوان IP واستراتيجيات تقسيم الشبكة، راجع معيار تخطيط IP الذي يحدد بنية الشبكة الموصى بها ذات الأربعة شرائح لنشر OmniCore.

مستخدمو Proxmox: تحدد معلمة host_vm_network الجسر الذي يجب استخدامه. راجع نشر Proxmox VM/LXC للتوفير التلقائي.

تخصيص موارد VM

بالنسبة للخدمات التي تحتاج إلى موارد محددة:

num_cpus: 4                    # نوى المعالج
memory_mb: 8192 # الذاكرة العشوائية بالميغابايت
proxmoxLxcDiskSizeGb: 50 # حجم القرص بالجيجابايت

معلمات محددة للخدمة

لكل وظيفة شبكة معلماتها الخاصة. أمثلة:

MME:

mme_code: 1                    # معرف MME (1-255)
mme_gid: 1 # معرف مجموعة MME
network_name_short: Customer # اسم الشبكة (المعروض على الهواتف)
network_name_long: Customer Network
tac_list: [600, 601, 602] # رموز منطقة التتبع

PGW:

ip_pools:                      # تجمعات IP للمشتركين
- '100.64.16.0/24'
- '100.64.17.0/24'
combined_CP_UP: false # فصل التحكم / خطة المستخدم

للحصو�� على شرح مفصل لما يتحكم فيه كل متغير، راجع: مرجع التكوين

خادم التطبيق:

online_charging_enabled: true  # تمكين تكامل OCS
tas_branch: "main" # فرع البرمجيات للنشر
gateways_folder: "gateways_prod" # تكوين بوابة SIP

قسم المتغيرات العالمية

يحتوي قسم all:vars على إعدادات تنطبق على النشر بالكامل:

all:
vars:
# المصادقة
ansible_connection: ssh
ansible_password: password
ansible_become_password: password

# هوية العميل
customer_name_short: customer
customer_legal_name: "Customer Inc."
site_name: "Chicago DC1"
region: US

# معرف PLMN (شبكة الهاتف المحمول)
plmn_id:
mcc: '001' # رمز الدولة المحمول
mnc: '01' # رمز شبكة الهاتف المحمول
mnc_longform: '001' # MNC مع صفر مضاف

# أسماء الشبكات
network_name_short: Customer
network_name_long: Customer Network

# مستودع APT
# ملاحظة: إذا تم تعريف مجموعة apt_cache_servers مع ��لمضيفين،
# فإن use_apt_cache تكون افتراضية على true و apt_repo.apt_server
# تكون افتراضية على عنوان IP لأحد خوادم التخزين المؤقت تلقائيًا
apt_repo:
apt_server: "10.254.10.223"
apt_repo_username: "customer"
apt_repo_password: "secure-password"
use_apt_cache: false

# المنطقة الزمنية
TZ: America/Chicago

فهم مجموعات المضيفين

تنظم Ansible المضيفين في مجموعات تتوافق مع الأدوار:

عند تشغيل كتاب اللعب المستهدف mme، فإنه ينطبق على جميع المضيفين في قسم mme:hosts:.

التكوين باستخدام قوالب Jinja2

تستخدم Ansible قوالب Jinja2 لإنشاء ملفات التكوين من المتغيرات المحددة في ملف المضيفين وgroup_vars.

كيفية عمل Jinja2

مثال على استخدام القالب

يحدد ملف المضيفين:

plmn_id:
mcc: '001'
mnc: '01'
customer_name_short: acme

قالب Jinja2 (في الدور):

# mme_config.yml.j2
network:
plmn:
mcc: {{ plmn_id.mcc }}
mnc: {{ plmn_id.mnc }}
operator: {{ customer_name_short }}
realm: epc.mnc{{ plmn_id.mnc_longform }}.mcc{{ plmn_id.mcc }}.3gppnetwork.org

ملف التكوين الناتج:

network:
plmn:
mcc: 001
mnc: 01
operator: acme
realm: epc.mnc001.mcc001.3gppnetwork.org

أنماط Jinja2 الشائعة

الوصول إلى المتغيرات المتداخلة:

{{ plmn_id.mcc }}
{{ apt_repo.apt_server }}

المنطق الشرطي:

{% if online_charging_enabled %}
charging:
enabled: true
ocs_ip: {{ ocs_ip }}
{% endif %}

الحلقات:

tracking_areas:
{% for tac in tac_list %}
- {{ tac }}
{% endfor %}

التنسيق:

# إضافة صفر إلى 3 أرقام
mnc{{ '%03d' | format(plmn_id.mnc|int) }}

تجاوز المتغيرات باستخدام group_vars

بينما يحدد ملف المضيفين البنية التحتية وإعدادات المضيف المحددة، يمكن أن تتجاوز group_vars القيم الافتراضية لمجموعات المضيفين.

راجع: تكوين متغيرات المجموعة

مثال كامل على ملف المضيفين

إليك مثال أكثر اكتمالًا (مع بيانات حساسة مخفية):

# EPC Core
mme:
hosts:
customer-mme01:
ansible_host: 10.10.1.15
gateway: 10.10.1.1
host_vm_network: "vmbr1"
mme_code: 1
mme_gid: 1
network_name_short: Customer
network_name_long: Customer Network
tac_list: [600, 601, 602, 603]
omnimme:
sgw_selection_method: "random_peer"
pgw_selection_method: "random_peer"

sgw:
hosts:
customer-sgw01:
ansible_host: 10.10.1.25
gateway: 10.10.1.1
host_vm_network: "vmbr1"
cdrs_enabled: true

pgwc:
hosts:
customer-pgw01:
ansible_host: 10.10.1.21
gateway: 10.10.1.1
host_vm_network: "vmbr1"
ip_pools:
- '100.64.16.0/24'
combined_CP_UP: false

hss:
hosts:
customer-hss01:
ansible_host: 10.10.2.140
gateway: 10.10.2.1
host_vm_network: "vmbr2"

# IMS Core
pcscf:
hosts:
customer-pcscf01:
ansible_host: 10.10.4.165
gateway: 10.10.4.1
host_vm_network: "vmbr4"

icscf:
hosts:
customer-icscf01:
ansible_host: 10.10.3.55
gateway: 10.10.3.1
host_vm_network: "vmbr3"

scscf:
hosts:
customer-scscf01:
ansible_host: 10.10.3.45
gateway: 10.10.3.1
host_vm_network: "vmbr3"

applicationserver:
hosts:
customer-as01:
ansible_host: 10.10.3.60
gateway: 10.10.3.1
host_vm_network: "vmbr3"
online_charging_enabled: false
gateways_folder: "gateways_prod"

# خدمات الدعم
license_server:
hosts:
customer-licenseserver:
ansible_host: 10.10.2.150
gateway: 10.10.2.1
host_vm_network: "vmbr2"

monitoring:
hosts:
customer-oam01:
ansible_host: 10.10.2.135
gateway: 10.10.2.1
host_vm_network: "vmbr2"
num_cpus: 4
memory_mb: 8192

dns:
hosts:
customer-dns01:
ansible_host: 10.10.2.177
gateway: 10.10.2.1
host_vm_network: "vmbr2"

# المتغيرات العالمية
all:
vars:
ansible_connection: ssh
ansible_password: password
ansible_become_password: password

customer_name_short: customer
customer_legal_name: "Customer Network Inc."
site_name: "Primary DC"
region: US
TZ: America/Chicago

# تكوين PLMN
plmn_id:
mcc: '001'
mnc: '01'
mnc_longform: '001'
diameter_realm: epc.mnc{{ plmn_id.mnc_longform }}.mcc{{ plmn_id.mcc }}.3gppnetwork.org

# أسماء الشبكات
network_name_short: Customer
network_name_long: Customer Network
tac_list: [600, 601]

# تكوين APT
apt_repo:
apt_server: "10.254.10.223"
apt_repo_username: "customer"
apt_repo_password: "secure-password"
use_apt_cache: false

# تكوين الشحن
charging:
data:
online_charging:
enabled: false
voice:
online_charging:
enabled: true
domain: "mnc{{ plmn_id.mnc_longform }}.mcc{{ plmn_id.mcc }}.3gppnetwork.org"

# قواعد جدار الحماية
firewall:
allowed_ssh_subnets:
- '10.0.0.0/8'
- '192.168.0.0/16'
allowed_ue_voice_subnets:
- '10.0.0.0/8'
allowed_signaling_subnets:
- '10.0.0.0/8'

# تكوين Hypervisor (مثال Proxmox)
proxmoxServers:
customer-prxmx01:
proxmoxServerAddress: 10.10.0.100
proxmoxServerPort: 8006
proxmoxApiTokenName: Customer
proxmoxApiTokenSecret: "token-secret"
proxmoxTemplateName: ubuntu-24.04-cloud-init-template
proxmoxNodeName: pve01

راجع نشر Proxmox VM/LXC للحصول على تفاصيل إعداد وتكوين Proxmox الكاملة.

مراجع الوثائق الخاصة بالمنتج

للحصول على تكوين مفصل لكل مكون، راجع الوثائق الرسمية للمنتج:

مكونات OmniCore:

  • وثائق OmniCore: https://docs.omnitouch.com.au/docs/repos/OmniCore
  • OmniHSS - خادم المشتركين المنزلي
  • OmniSGW - بوابة الخدمة (خطة التحكم)
  • OmniPGW - بوابة الحزمة (خطة التحكم)
  • OmniUPF - وظيفة خطة المستخدم
  • OmniDRA - وكيل توجيه Diameter
  • OmniTWAG - بوابة الوصول WLAN الموثوقة

مكونات OmniCall:

  • وثائق OmniCall: https://docs.omnitouch.com.au/docs/repos/OmniCall
  • OmniTAS - خادم تطبيق IMS (VoLTE/VoNR)
  • OmniCall CSCF - وظائف التحكم في جلسات المكالمات
  • OmniMessage - م��كز الرسائل القصيرة
  • OmniMessage SMPP - دعم بروتوكول SMPP
  • OmniSS7 - كومة الإشارات SS7
  • VisualVoicemail - البريد الصوتي

OmniCharge/OmniCRM:

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

الخطوات التالية

  1. أنشئ ملف المضيفين الخاص بك بناءً على هذا القالب
  2. حدد PLMN وهويتك الشبكية
  3. قم بتكوين الوصول إلى مستودع APT
  4. إعداد خادم الترخيص
  5. تخصيص باستخدام group_vars حسب الحاجة
  6. نشر باستخدام كتب لعب Ansible