HOMER یکی از کاربردیترین ابزارهای متنباز برای دیدن چیزی است که واقعاً در شبکه VoIP اتفاق افتاده است. بهجای اینکه فقط Log یک Asterisk یا SBC را بخوانید، HOMER پیامهای SIP را از چند نقطه جمع میکند، آنها را با HEP ذخیره میکند و بعد اجازه میدهد یک تماس را با Call-ID، شماره مبدا و مقصد، Response Code، IP، User-Agent و زمان جستوجو کنید و کل Call Flow را کنار هم ببینید.
این ابزار برای زمانی ارزش واقعی خود را نشان میدهد که کاربر میگوید «تماس ساعت ۱۰:۲۳ قطع شد» یا Provider میگوید «ما 200 OK فرستادیم». اگر Capture درست طراحی شده باشد، دیگر لازم نیست بین Log چند سرور حدس بزنید؛ INVITE، 100، 180/183، 200، ACK، re-INVITE و BYE را با زمان و مسیر واقعی آنها بررسی میکنید.
در بررسی منابع تا ۲۰ اکتبر ۲۰۲۶، شاخه فعال پروژه HOMER نسخه 11.x است و Releaseهای 11.0.x منتشر میشوند. HOMER 11 معماری جدیدی مبتنی بر Go، DuckDB/Arrow/Parquet و DuckLake دارد و همچنان با Capture Agentهای HEPv3 سازگار است.
خلاصه معماری: روی PBX، SBC یا نقطه Mirror یک Capture Agent قرار میدهید؛ Agent پیامهای SIP را به HEP تبدیل و برای HOMER میفرستد؛ HOMER آنها را ذخیره و Index میکند؛ سپس با Call-ID یا فیلترهای دیگر، Call Flow را در UI یا CLI بازسازی میکنید.
HOMER چیست و چه مشکلی را حل میکند؟
HOMER یک پلتفرم Open-Source برای Telecom Observability و SIP/VoIP/RTC Capture است. در HOMER 11 بخشهای Ingest، Storage، Node و Coordinator میتوانند در یک برنامه All-in-One یا بهصورت ماژولهای جدا اجرا شوند.
برخلاف Packet Capture موقت با tcpdump، HOMER برای نگهداری و جستوجوی مداوم طراحی شده است. به همین دلیل برای NOC، تیم VoIP، Provider، Call Center و محیطهایی که چند Asterisk، Kamailio، OpenSIPS، FreeSWITCH یا SBC دارند مفید است.
| روش | مزیت | محدودیت |
|---|---|---|
| Log Asterisk | جزئیات داخلی همان PBX | دید End-to-End محدود |
| tcpdump/PCAP | Packet واقعی و دقیق | جستوجوی تاریخی و نگهداری سخت |
| HOMER | Capture مرکزی، Search و Call Flow | نیازمند طراحی Capture، Retention و Privacy |
HEP چیست؟
HEP مخفف Homer Encapsulation Protocol است. Capture Agent پیام SIP یا دادههای مرتبط را همراه Metadata لازم داخل HEP قرار میدهد و به Collector میفرستد.
معماری ساده:
Asterisk / SBC / Proxy
|
| SIP messages
v
Capture Agent
|
| HEPv3
v
HOMER Ingest
|
v
DuckLake / Parquet
|
v
Search + Call Flow
مزیت HEP این است که Capture Source میتواند از HOMER جدا باشد. مثلاً سه شعبه، دو SBC و چند Asterisk همگی Capture خود را به یک HOMER مرکزی ارسال میکنند و هر Agent با Node ID/Name قابل تشخیص است.
چه Agentهایی میتوانند SIP را برای HOMER بفرستند؟
پروژه HOMER سه مدل اصلی را معرفی میکند:
🔹 Heplify: Agent سبک و Portable برای Capture ترافیک و ارسال HEP.
🔹 CaptAgent: مناسب Configurationهای پیچیدهتر Capture.
🔹 Native HEP: در محصولاتی مثل Asterisk، Kamailio، OpenSIPS، FreeSWITCH و RTPengine میتوان از Integration داخلی استفاده کرد.
Heplify فعلی میتواند SIP، RTCP مرتبط، DNS، Diameter و Log را به HOMER بفرستد و روی Linux، macOS و Windows اجرا شود. برای محیط VoIP معمول، شروع با Capture فقط SIP سادهتر و کمحجمتر است.
یک نمونه Heplify برای Capture فقط SIP
این نمونه روی همه Interfaceها SIP را در Port Range مشخص میگیرد و به HOMER میفرستد:
./heplify \
-i any \
-m SIP \
-pr 5060-5090 \
-hs 10.20.0.50:9060 \
-hi 2001 \
-hn pbx-a
در این مثال:
🔹 -m SIP فقط SIP را Capture میکند.
🔹 -pr 5060-5090 Port Range موردنظر Capture است.
🔹 -hs آدرس HEP Collector است.
🔹 -hi شناسه عددی Agent است.
🔹 -hn نام قابلفهم Node را مشخص میکند.
Portها و Interface را بر اساس شبکه واقعی خودتان تنظیم کنید؛ اگر SIP روی Port غیرمعمول است، Range پیشفرض را کورکورانه استفاده نکنید.
اگر HEP از شبکه عمومی عبور میکند
Heplify از Transportهای مختلف از جمله TLS پشتیبانی میکند. اگر HEP بین Siteها یا از اینترنت عبور میکند، HEP خام UDP انتخاب مناسبی برای داده حساس SIP نیست. TLS را روی Agent و Listener سمت HOMER تنظیم کنید و Certificate Verification را بیدلیل غیرفعال نکنید.
./heplify \
-i any \
-m SIP \
-hs homer.example.com:9060 \
-nt tls \
-hi 2001 \
-hn pbx-a
این دستور فقط زمانی درست است که Listener TLS متناظر در سمت HOMER برای همان Port فعال شده باشد.
Passive Capture یا Native HEP؟
اگر SIP شما UDP یا TCP معمولی است، Heplify میتواند Packetها را روی Interface ببیند. اما برای SIP/TLS یک Sniffer بیرون از Application فقط ترافیک رمزنگاریشده را میبیند.
در چنین محیطی Native HEP داخل SIP Stack میتواند انتخاب بهتری باشد، چون پیام در نقطهای Capture میشود که Application آن را پردازش کرده است. برای مثال در Asterisk میتوان از HEP/PJSIP Integration استفاده کرد؛ در Kamailio و OpenSIPS نیز ماژولهای Native Capture وجود دارند.
نکته طراحی: Capture Agent را فقط جایی قرار ندهید که «Packet هست». آن را جایی قرار دهید که برای سؤالهای عیبیابی شما معنا دارد. Capture روی Edge SBC، PBX و Provider Leg میتواند نشان دهد پیام کجا تغییر کرده است.
HOMER 11 دادهها را کجا ذخیره میکند؟
HOMER 11 نسبت به نسلهای قدیمی معماری Storage متفاوتی دارد. پروژه فعلی از DuckDB، Apache Arrow/IPC، Parquet و DuckLake استفاده میکند و Local Storage یا Object Storage را پشتیبانی میکند.
در Wizard رسمی، مسیرهای پیشفرض نمونه شامل این موارد هستند:
Catalog:
/data/homer/homer_catalog.sqlite
Parquet data:
/data/homer/parquet
همین معماری باعث میشود برای Captureهای بزرگ بتوانید Retention و Tiered Storage را جدا طراحی کنید.
Call-ID Search؛ مهمترین Workflow در HOMER
وقتی کاربر یک تماس خراب گزارش میدهد، بهترین Identifier معمولاً SIP Call-ID است. HOMER 11 در Search Mapping، call_id را به Session ID مربوط میکند و علاوه بر آن میتوانید بر اساس Caller، Callee، Method، Response Code، Source/Destination IP، Port و User-Agent جستوجو کنید.
مثلاً از CLI جدید HOMER:
homer search \
--host homer.example.com:8080 \
--user admin \
--pass 'YOUR_PASSWORD' \
--call-id 'abc-def-123@example.com' \
--from 2h \
--format callflow
Port Coordinator را با Configuration واقعی خودتان جایگزین کنید.
برای جستوجوی INVITEهای یک ساعت اخیر:
homer search \
--host homer.example.com:8080 \
--user admin \
--pass 'YOUR_PASSWORD' \
--method INVITE \
--from 1h
چه فیلترهایی برای عیبیابی واقعاً مفیدند؟
| فیلتر | کاربرد |
|---|---|
| Call-ID | بازسازی یک Session مشخص |
| From/Caller | تماسهای یک داخلی یا شماره |
| To/Callee | تماسهای یک مقصد |
| Method | INVITE، REGISTER، BYE، OPTIONS و… |
| Response Code | جستوجوی 403، 404، 408، 488، 503 و… |
| Source/Destination IP | تشخیص Leg و Node شبکه |
| User-Agent | پیداکردن Device/Firmware خاص |
| Node/Capture ID | تشخیص Capture Point |
چرا یک Call-ID گاهی فقط نصف تماس را نشان میدهد؟
در Proxyهای شفاف، همان Call-ID ممکن است در مسیر باقی بماند. اما Asterisk و خیلی از B2BUAها میتوانند برای Leg دیگر Dialog جدا و Call-ID دیگری بسازند.
بنابراین این وضعیت لزوماً به معنی «HOMER Packet را از دست داده» نیست:
Caller
|
| Call-ID: A123
v
Asterisk / B2BUA
|
| Call-ID: B987
v
Provider
HOMER 11 یک Lua Correlation Engine دارد که میتواند Dialogهای مرتبط، B2B Legها و Session IDهای دیگر را به Transaction View اضافه کند. همچنین میتوان Headerهای Correlation مثل X-Call-ID را در Ingest تعریف کرد.
برای محیط B2BUA بزرگ، از ابتدا یک Correlation Header طراحی کنید؛ اینکه بعداً فقط بر اساس شماره و Timestamp دو Leg را حدس بزنید، در ترافیک بالا قابلاعتماد نیست.
Capture از چند Node چه مزیتی دارد؟
فرض کنید تماس از Provider به Kamailio و بعد Asterisk میرود. اگر فقط کنار Asterisk Capture داشته باشید، نمیدانید Provider واقعاً چه فرستاده است.
Provider
|
| Capture Node 1
v
Kamailio / SBC
|
| Capture Node 2
v
Asterisk
|
| Capture Node 3
v
Endpoint
در HOMER میتوانید Node/Capture ID را ببینید و مشخص کنید مثلاً Header روی Edge وجود داشته ولی قبل از رسیدن به Asterisk Rewrite شده است.
Privacy؛ HOMER میتواند اطلاعات حساس ذخیره کند
این بخش را نباید به بعد از نصب موکول کنید. SIP Payload میتواند شماره تلفن، Username، IP، Contact، Caller ID، P-Asserted-Identity، User-Agent، SDP و Headerهای مرتبط با Authentication را در خود داشته باشد. اگر SIP MESSAGE استفاده میکنید، حتی Body پیام هم ممکن است Capture شود.
بنابراین HOMER را مثل یک Log Server معمولی کماهمیت نبینید.
🔹 UI و API را برای کل اینترنت باز نگذارید.
🔹 دسترسی را با VPN، ACL یا Reverse Proxy محدود کنید.
🔹 HEP بین شبکههای غیرقابلاعتماد را با TLS منتقل کنید.
🔹 فقط Protocol/Methodهایی را Capture کنید که برای Troubleshooting لازماند.
🔹 Retention را محدود و مستند کنید.
🔹 دسترسی به Export/PCAP و Search کاربران را محدود کنید.
Capture کمتر یعنی هم Privacy بهتر، هم Storage کمتر
اگر برای Troubleshooting به OPTIONS و NOTIFY نیازی ندارید، Heplify میتواند Methodهای مشخص را Drop کند:
./heplify \
-hs 10.20.0.50:9060 \
-m SIP \
-dim OPTIONS,NOTIFY
قبل از حذف هر Method مطمئن شوید تیم شما برای مانیتورینگ Availability یا Troubleshooting به آن نیاز ندارد.
برای سناریوهای پیشرفتهتر، Heplify از Lua Script برای Filter/Modify کردن Packetها نیز پشتیبانی میکند؛ اما Redaction باید دقیق طراحی و تست شود تا Header لازم برای Correlation را از بین نبرد.
آیا RTP Audio را هم Capture کنیم؟
برای بیشتر عیبیابیهای SIP، پاسخ منفی است. Capture کامل RTP حجم Storage و ریسک Privacy را شدیداً بالا میبرد.
برای شروع، SIP و در صورت نیاز RTCP/QoS کافی است. HOMER 11 قابلیت VQRTCP برای جمعآوری گزارشهای کیفیت تماس و همچنین SIPREC Signaling را دارد، اما این قابلیتها باید آگاهانه فعال شوند.
قاعده عملی: اگر سؤال شما «چرا تماس 403/488/503 گرفت؟» است، RTP Payload لازم نیست. اگر سؤال «کیفیت تماس چطور بود؟» است، RTCP/QoS معمولاً ارزش بیشتری از ذخیره دائمی Audio دارد.
Storage Sizing؛ برای HOMER چقدر فضا لازم داریم؟
یک عدد ثابت برای همه شبکهها وجود ندارد. Storage به این عوامل وابسته است:
🔹 تعداد تماس و Registration در روز.
🔹 تعداد SIP Message در هر Session.
🔹 اندازه متوسط SIP Payload.
🔹 تعداد Capture Pointها.
🔹 Retransmission و Duplicateها.
🔹 Capture کردن RTCP، Log یا Protocolهای دیگر.
🔹 Compression/Compaction و Retention.
بهترین روش، Benchmark روی ترافیک واقعی خودتان است.
روش اندازهگیری واقعی
قبل از شروع پنجره تست:
du -sb /data/homer/parquet
df -h /data/homer
۲۴ ساعت ترافیک نماینده شبکه را Capture کنید و دوباره اندازه بگیرید:
du -sb /data/homer/parquet
df -h /data/homer
سپس بر اساس رشد واقعی روزانه محاسبه کنید:
required_storage =
measured_daily_growth
× retention_days
× safety_headroom
بهتر است اندازهگیری را بعد از اینکه Compaction چند بار اجرا شده تکرار کنید، چون اندازه خام لحظهای میتواند با اندازه پایدار Parquet متفاوت باشد.
Retention در HOMER 11
Wizard فعلی HOMER 11 برای DuckLake گزینه Retention دارد و مقدار نمونه/پیشفرض آن ۳۰ روز است؛ مقدار صفر یعنی Unlimited. برای سامانهای که SIP واقعی کاربران را ذخیره میکند، Unlimited را فقط با دلیل مشخص انتخاب کنید.
نمونه بخش Storage:
"storage": {{
"enable": true,
"ducklake": {{
"catalog_type": "sqlite",
"catalog_path": "/data/homer/homer_catalog.sqlite",
"data_path": "/data/homer/parquet",
"compaction": {{
"enable": true,
"check_interval_sec": 1800,
"retention_days": 30
}}
}}
}}
HOMER 11 برای Tableهای مختلف TTL جداگانه و Tiered Storage هم دارد؛ بنابراین میتوانید مثلاً SIP Callها را بیشتر از Logهای کماهمیت نگه دارید یا داده قدیمی را به Object Storage منتقل کنید.
چه چیزهایی Storage را بیدلیل منفجر میکنند؟
🔹 Capture یک Packet در چند نقطه بدون نیاز واقعی.
🔹 ذخیره OPTIONS با فرکانس بالا.
🔹 Capture دائمی RTP Payload.
🔹 Unlimited Retention.
🔹 فعالکردن Debug Payload روی Agent در Production.
🔹 Duplicate Capture بهدلیل Mirror و Agent همزمان.
Heplify قابلیت Deduplication هم دارد؛ اگر معماری شما Duplicate واقعی تولید میکند، این گزینه ارزش بررسی دارد.
یک Workflow واقعی برای عیبیابی تماس
کاربر گزارش میدهد: «تماس ۰۹:۴۱ به شماره مشخص وصل نشد.»
Workflow پیشنهادی:
🔹 بازه زمانی را محدود کنید.
🔹 From/To را جستوجو کنید.
🔹 Call-ID را از Session پیدا کنید.
🔹 Call Flow را باز کنید.
🔹 اولین Response غیرعادی را پیدا کنید.
🔹 Capture Node را ببینید تا معلوم شود Response از کجا آمده است.
🔹 اگر B2BUA دارید، Leg دوم را Correlate کنید.
مثلاً:
PBX -> SBC
INVITE
SBC -> Provider
INVITE
Provider -> SBC
100 Trying
Provider -> SBC
488 Not Acceptable Here
SBC -> PBX
488 Not Acceptable Here
با این Capture میتوانید ثابت کنید 488 از Provider آمده، نه از PBX. این همان ارزشی است که HOMER نسبت به Log جداگانه هر سرور ایجاد میکند.
اشتباههای رایج در استقرار HOMER
🔹 بازکردن HEP و UI برای کل اینترنت.
🔹 Capture همه Protocolها از روز اول.
🔹 نداشتن Node Name/ID مشخص برای Agentها.
🔹 نگهداری Unlimited بدون Storage Forecast.
🔹 استفاده از یک Call-ID در B2BUA و تصور اینکه Call Flow کامل است.
🔹 Capture SIP/TLS با Sniffer خارجی و انتظار دیدن SIP Plaintext.
🔹 ذخیره SIP Payload بدون Policy دسترسی و Retention.
میخواهید HOMER را کنار Asterisk یا SBC راهاندازی کنید؟
برای یک استقرار درست باید نرخ تماس، تعداد Capture Pointها، Retention، نوع Storage و حساسیت دادهها مشخص باشند. بعد میتوان VPS و Storage را متناسب با حجم واقعی انتخاب کرد.
ایرانیکاسرور میتواند برای تهیه VPS، طراحی شبکه و استقرار ابزارهای مانیتورینگ VoIP و SIP Capture کمک کند.
تماس با پشتیبانی ایرانیکاسرور: 021-91302467
پرسشهای رایج
HOMER SIP Capture چیست؟
HOMER یک پلتفرم متنباز Telecom Observability است که پیامهای SIP و دادههای مرتبط را از Capture Agentها دریافت، ذخیره و برای Search و Call Flow Analysis قابلاستفاده میکند.
HEP چه کاری انجام میدهد؟
HEP پیام Captureشده و Metadata مربوط به آن را از Agent به HOMER منتقل میکند. HEPv3 در Agentهای مختلف VoIP پشتیبانی میشود.
آیا میتوان در HOMER با Call-ID جستوجو کرد؟
بله. Call-ID یکی از فیلترهای اصلی HOMER 11 است و میتوانید Session را در UI یا CLI پیدا و Call Flow آن را مشاهده کنید.
چرا Call-ID فقط یک Leg تماس را نشان میدهد؟
اگر Asterisk یا B2BUA برای Leg دوم Call-ID جدید ساخته باشد، باید Correlation بین Sessionها داشته باشید. HOMER 11 برای این کار Lua Correlation و Headerهای Correlation را پشتیبانی میکند.
آیا ذخیره SIP در HOMER مشکل Privacy دارد؟
SIP میتواند شامل شماره تلفن، IP، Username، Caller ID، Contact، SDP و اطلاعات حساس دیگر باشد. Access Control، TLS برای HEP، Retention محدود و Capture حداقلی باید از ابتدا طراحی شوند.
برای HOMER چقدر Storage نیاز داریم؟
به نرخ تماس، اندازه SIP، تعداد Capture Pointها و Retention بستگی دارد. روش صحیح این است که ۲۴ ساعت ترافیک نماینده را ذخیره و رشد واقعی DuckLake/Parquet را اندازهگیری کنید.
آیا باید RTP را هم Capture کنیم؟
برای بیشتر عیبیابیهای Signaling نه. SIP و در صورت نیاز RTCP/QoS معمولاً کافیاند. Capture دائمی RTP Payload حجم و ریسک Privacy را بالا میبرد.
Heplify بهتر است یا Native HEP؟
Heplify برای Packet Capture مستقل و سریع بسیار مناسب است. اگر SIP/TLS دارید یا Capture داخل Application برایتان مهم است، Native HEP روی Asterisk/Kamailio/OpenSIPS میتواند مناسبتر باشد.
جمعبندی
HOMER زمانی بیشترین ارزش را دارد که Capture Pointها را درست انتخاب کنید. HEP باید پیام را از Edge، PBX یا Proxy مناسب جمع کند و Node ID هر منبع مشخص باشد.
برای Troubleshooting، Call-ID مهمترین نقطه شروع است؛ اما در B2BUAها باید Correlation بین Legها را هم طراحی کنید. HOMER 11 برای Search بر اساس Call-ID، Caller/Callee، Method، Response Code، IP و Node ابزارهای مناسبی دارد.
از طرف دیگر، SIP Capture یعنی ذخیره داده واقعی کاربران. UI و HEP را امن کنید، Retention محدود داشته باشید و هر چیزی را فقط چون قابل Capture است ذخیره نکنید.
برای Storage هم به تخمینهای عمومی تکیه نکنید؛ یک بازه واقعی را Capture کنید، رشد Parquet را اندازه بگیرید و بر اساس Retention و Headroom ظرفیت نهایی را انتخاب کنید.






دیدگاهها (۰)