Skip to content
LIVE FEED

BlogLộ trình chuyên gia OpenSIPS: từ nền tảng SIP đến B2BUA và vận hành production

Giai đoạn 0 — Nền tảng SIP (2-3 tuần)

  • Cấu trúc bản tin SIP: start-line, header bắt buộc (Via, From, To, Call-ID, CSeq, Contact, Max-Forwards), body SDP.
  • Toàn bộ method thông dụng và vai trò từng cái: REGISTER, INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, UPDATE, PRACK, REFER, SUBSCRIBE/NOTIFY, MESSAGE, PUBLISH — không chỉ biết tên mà phải vẽ được call flow từng cái.
  • Transaction (client/server transaction, 3 loại: INVITE, non-INVITE, ACK riêng biệt) và Dialog (dialog-forming vs không).
  • Response code theo nhóm: 1xx provisional, 2xx success, 3xx redirect, 4xx/5xx/6xx failure — ý nghĩa từng nhóm trong xử lý routing.
  • Thực hành: bắt gói Wireshark cho từng method ở trên, tự vẽ lại flow.

Giai đoạn 1 — Kiến trúc lõi + Cấu hình OpenSIPS (4-6 tuần)

Kiến trúc runtime

  • Process model (multi-process, không multi-thread), shared memory (SHM) vs private memory (PKG), tại sao ảnh hưởng đến cách viết config an toàn.

Cấu trúc file cấu hình (opensips.cfg)

  • Global parameters: listen, children, log_level, auto_aliases, disable_tcp…
  • Module loading: loadmodule + modparam cho từng module.
  • Các khối route và thứ tự thực thi thật sự: route{} (main), failure_route{} (khi nhánh forward thất bại), branch_route{} (khi tạo thêm nhánh forking), onreply_route{} (xử lý response trước khi về lại client), event_route{} (sự kiện nội bộ, MI, clustering).
  • Pseudo-variables ($var, $avp, $ru, $fu, $tu…) — ngôn ngữ thao tác dữ liệu thật của script.

Module lõi bắt buộc và cách chúng ánh xạ với method ở Giai đoạn 0

  • tm (transaction management) — nền cho mọi xử lý INVITE/non-INVITE có trạng thái.
  • sl (stateless reply) — trả lời nhanh không cần transaction, dùng cho OPTIONS keepalive.
  • rr (record-route) — bắt buộc nếu muốn OpenSIPS nằm trong đường đi của BYE/re-INVITE sau này.
  • usrloc + registrar — xử lý REGISTER, lưu AOR-Contact.
  • auth/auth_db — xác thực digest cho REGISTER và INVITE.
  • dialog — theo dõi vòng đời dialog, cần cho xử lý BYE và tính cước theo thời lượng thật.
  • acc — ghi CDR (Call Detail Record).
  • permissions — kiểm soát ai được gọi đi đâu.

Dự án tay: dựng registrar + proxy hoàn chỉnh, xử lý đúng cả REGISTER (có auth), INVITE/ACK/BYE/CANCEL (có record-route + dialog + acc), OPTIONS (keepalive stateless).

Giai đoạn 2 — Định tuyến nâng cao, NAT/Media, và B2BUA (5-6 tuần)

NAT & Media

  • nathelper, phân biệt NAT tầng signaling (OpenSIPS xử lý) vs NAT tầng media/RTP (cần relay riêng).
  • RTPengine — media relay chuẩn hiện nay, transcoding, SRTP.

Định tuyến nâng cao

  • dispatcher (load balancing tới nhiều gateway), drouting (định tuyến động theo prefix/LCR), failover.
  • TLS cho signaling, SRTP cho media.

B2BUA — mảng kiến thức riêng biệt, khác hẳn proxy thuần

  • Khái niệm: Proxy chỉ chuyển tiếp, giữ một dialog; B2BUA là OpenSIPS đóng vai UA thật ở cả hai đầu (Leg A/UAS với caller, Leg B/UAC với callee), hai Call-ID độc lập — cho phép sửa SDP, giữ máy, chuyển cuộc gọi.
  • Kiến trúc 2 tầng: b2b_entities (tầng thấp — UAS/UAC cơ bản) + b2b_logic (tầng logic — kịch bản dịch vụ như transfer, anonymize, bridge).
  • Khi nào bắt buộc cần B2BUA thay vì proxy: xử lý REFER (call transfer thật), ẩn danh người gọi, IVR/voicemail tương tác, kiểm soát billing real-time, anonymize/topology hiding sâu.
  • Hàm chính cần nắm: b2b_init_request(), b2b_server_new()/b2b_client_new(), b2b_bridge()/b2b_bridge_request(), b2b_pass_request(), b2b_handle_reply().

Presence & Dialplan

  • Module presence xử lý SUBSCRIBE/NOTIFY/PUBLISH riêng biệt, không đi qua route INVITE.
  • dialplan cho chuẩn hoá số điện thoại trước khi định tuyến.

Dự án tay: mở rộng hệ thống Giai đoạn 1 — thêm NAT traversal + RTPengine, thêm 2 gateway với dispatcher/failover, và một kịch bản B2BUA đơn giản (ví dụ: ẩn số người gọi khi gọi ra ngoài).

Giai đoạn 3 — Vận hành production: HA, hiệu năng, bảo mật (4-6 tuần)

  • clusterer — replicate usrloc/dialog giữa nhiều node, đạt HA thật (active-active, không chỉ active-passive).
  • Performance tuning: số worker process, async I/O, kích thước SHM/PKG.
  • Bảo mật vận hành: pike (chống flood), rate limiting, chống toll fraud.
  • Monitoring: opensips-cli, event interface, tích hợp Prometheus/Grafana.

Giai đoạn 4 — Thương mại hoá năng lực (song song từ tháng thứ 4-5)

  • Chứng chỉ OCP (OpenSIPS Certified Professional).
  • Đóng góp GitHub OpenSIPS (bug report, sửa doc, module nhỏ).
  • Xây portfolio: 2-3 dự án tay ở trên là bằng chứng năng lực khi phỏng vấn.

Lưu ý quan trọng

Lộ trình này đưa người học tới mức đủ năng lực làm việc thực tế ở vị trí VoIP/SIP engineer cấp junior-to-mid sau 6-12 tháng nghiêm túc. Để lên mức chuyên gia thật sự (world-class) còn cần thêm 3-5 năm kinh nghiệm xử lý traffic thật, đọc source code khi tài liệu không đủ, và được phản biện bởi người có kinh nghiệm hơn — không có shortcut tự học nào thay thế được giai đoạn này.

Contact
Facebook
TOP