مجله ایرانیکاسرورآموزش سرور، هاست، وردپرس و شبکه
آموزشی

SBC در VoIP چیست؟ ساخت یک SBC سبک و امن با Kamailio و RTPengine

SBC یا Session Border Controller لایه‌ای در مرز شبکه VoIP است که بین اینترنت، اپراتور SIP، کاربران راه دور و زیرساخت داخلی تلفنی قرار می‌گیرد تا Signaling و Media قبل از رسیدن به PBX…

SBC در VoIP چیست؟ ساخت یک SBC سبک و امن با Kamailio و RTPengine
خلاصه سریع این آموزش

SBC یا Session Border Controller لایه‌ای در مرز شبکه VoIP است که بین اینترنت، اپراتور SIP، کاربران راه دور و زیرساخت داخلی تلفنی قرار می‌گیرد تا Signaling و Media قبل…

۲۴ دقیقه مطالعه ۰ دیدگاه ۲۵ مهر ۱۴۰۵ آخرین به‌روزرسانی
SBC یا Session Border Controller لایه‌ای در مرز شبکه VoIP است که بین اینترنت، اپراتور SIP، کاربران راه دور و زیرساخت داخلی تلفنی قرار می‌گیرد تا Signaling و Media قبل از رسیدن به PBX کنترل شوند. یک SBC می‌تواند آدرس‌های داخلی را مخفی کند، NAT را مدیریت کند، TLS و SRTP را Terminate یا Bridge کند، حملات و Floodهای SIP را محدود کند، چند Trunk یا PBX را Failover دهد و در صورت نیاز Media را از مسیر مشخصی عبور دهد.

اما هر سیستم تلفنی به SBC نیاز ندارد. اگر فقط یک Asterisk کوچک با یک Trunk مطمئن دارید، اضافه‌کردن Kamailio، RTPengine، Redis و چند لایه Firewall ممکن است فقط پیچیدگی ایجاد کند. در مقابل، وقتی SIP را مستقیماً روی اینترنت منتشر می‌کنید، چند Carrier دارید، کاربران WebRTC یا Remote Phone دارید یا نمی‌خواهید IP و ساختار داخلی PBXها دیده شود، SBC از یک گزینه جانبی به یکی از مهم‌ترین اجزای معماری تبدیل می‌شود.

در این مقاله ابتدا مشخص می‌کنیم SBC VoIP واقعاً چیست، سپس یک معماری سبک با Kamailio و RTPengine طراحی می‌کنیم و در ادامه بررسی می‌کنیم چه زمانی همان معماری متن‌باز کافی است و چه زمانی بهتر است سراغ SBC کامل‌تر یا تجاری بروید.

وضعیت نسخه‌ها در ۱۷ اکتبر ۲۰۲۶: Kamailio 6.1.5 آخرین نسخه Stable شاخه 6.1 است. OpenSIPS 4.0.2 آخرین Minor Release شاخه پایدار 4.0 محسوب می‌شود. پروژه OpenSIPS نیز از مه ۲۰۲۶ یک SBC Community Edition رسمی ارائه کرده است. RTPengine نیز شاخه‌های فعال mr26.2.1.5 و mr13.5.1.30 را منتشر کرده است.

فهرست مطالب

SBC چیست؟

SBC مخفف:

Session Border Controller

است.

ترجمه ساده آن می‌شود:

کنترل‌کننده مرزی Sessionهای ارتباطی

اما در عمل SBC یک وظیفه واحد ندارد.

RFC 5853 نیز صراحتاً توضیح می‌دهد که اصطلاح SBC تعریف کاملاً محدود و استانداردی ندارد و محصولات مختلف ممکن است مجموعه متفاوتی از قابلیت‌ها را زیر این نام ارائه کنند.

وظایف معمول SBC در سه گروه قرار می‌گیرند.

🔹 امنیت و کنترل مرز شبکه

🔹 مدیریت Signaling و NAT

🔹 کنترل و در صورت نیاز تغییر مسیر Media

SBC کجای معماری VoIP قرار می‌گیرد؟

بدون SBC ممکن است ساختار شما چنین باشد:

Internet / SIP Carrier
          |
          v
       Asterisk
          |
          v
      Extensions

در این مدل Public SIP مستقیماً به PBX می‌رسد.

با SBC:

Internet / SIP Carrier
          |
          v
         SBC
     /           \
Signaling       Media
   |              |
   v              v
 Kamailio      RTPengine
      \          /
       \        /
        Asterisk
           |
       Internal LAN

اکنون PBX مستقیماً در معرض اینترنت نیست.

SBC با Firewall چه تفاوتی دارد؟

Firewall معمولی بیشتر IP، Port و Connection را می‌بیند.

اما SBC SIP را می‌فهمد.

مثلاً می‌تواند تشخیص دهد Packet دریافتی:

🔹 REGISTER است.

🔹 INVITE است.

🔹 BYE یا CANCEL است.

🔹 متعلق به یک Dialog موجود است.

🔹 SDP داخل آن چه Media Addressی دارد.

در نتیجه تصمیم امنیتی فقط بر اساس Port 5060 گرفته نمی‌شود.

SBC جای Firewall را هم نمی‌گیرد

طراحی درست معمولاً ترکیبی است از:

Network Firewall + SIP-aware SBC

Firewall ترافیک غیرضروری را قبل از Application حذف می‌کند و SBC درخواست‌هایی را که به لایه SIP رسیده‌اند تحلیل می‌کند.

مهم‌ترین وظیفه اول: Topology Hiding

اگر SIP Trunk مستقیماً به Asterisk وصل باشد، Headerهای SIP ممکن است اطلاعاتی مانند:

🔹 IP داخلی PBX

🔹 IP Proxyهای داخلی

🔹 Routeها

🔹 Record-Routeها

🔹 Contact داخلی

را نمایش دهند.

مثلاً:

Via: SIP/2.0/UDP 10.20.0.15:5060
Contact: <sip:1001@10.20.0.15:5060>

این اطلاعات بخشی از Topology داخلی شبکه را آشکار می‌کنند.

Topology Hiding چه می‌کند؟

SBC مسیر داخلی را از پیام خروجی حذف یا بازنویسی می‌کند.

طرف بیرونی ممکن است فقط چیزی شبیه:

sbc.example.com

را ببیند.

Topology Hiding رمزنگاری نیست

این نکته بسیار مهم است.

مخفی‌کردن:

Via / Route / Contact / Internal IP

به معنی Encryption پیام SIP نیست.

برای محافظت از Signaling در مسیر شبکه هنوز TLS لازم است.

Kamailio چگونه Topology را مخفی می‌کند؟

در Kamailio 6.1 ماژول:

topos

برای این کار وجود دارد.

این ماژول Headerهای Routing را هنگام خروج حذف و برای پیام‌های بعدی همان Dialog دوباره بازسازی می‌کند.

State مربوط به Topology کجا ذخیره می‌شود؟

Kamailio TOPOS در نسخه فعلی Storageهای مختلفی دارد:

🔹 Database

🔹 Redis

🔹 htable

برای یک SBC تک‌سروره، htable می‌تواند ساده باشد.

اما برای دو SBC در HA باید از ابتدا فکر کنید اگر Request بعدی یک Dialog به Node دوم رسید، State لازم از کجا خوانده می‌شود.

نمونه مفهومی TOPOS با Redis

loadmodule "topos.so"

modparam("topos", "storage", "redis")

این فقط بخش مفهومی Configuration است و Redis URL، Module وابسته و سیاست HA آن باید متناسب با معماری خودتان تنظیم شوند.

Record-Route را فراموش نکنید

SBC باید در Dialog باقی بماند تا BYE، re-INVITE، UPDATE و سایر Requestهای Mid-dialog دوباره از همان مرز عبور کنند.

در Proxyهای SIP این موضوع معمولاً با:

record_route();

انجام می‌شود.

Topology Hiding ممکن است Featureها را تحت تأثیر قرار دهد

SBC در پیام SIP دست می‌برد.

این یعنی باید Featureهایی مثل:

🔹 REFER

🔹 Replaces

🔹 Call Transfer

🔹 Presence

🔹 SUBSCRIBE/NOTIFY

را بعد از فعال‌سازی Topology Hiding تست کنید.

RFC 5853 نیز توضیح می‌دهد که برخی رفتارهای SBC می‌توانند اصول End-to-End SIP را تغییر دهند.

وظیفه دوم: NAT Traversal

یکی از مهم‌ترین کاربردهای SBC مدیریت تماس میان شبکه‌هایی است که Addressing متفاوت دارند.

مثلاً:

Remote Phone:
192.168.1.20

Public NAT:
198.51.100.45

PBX:
10.20.0.15

هر سه آدرس در یک تماس ممکن است دیده شوند.

NAT در SIP و Media دو مسئله جداست

Signaling:

REGISTER / INVITE / Contact / Via

را Kamailio/OpenSIPS مدیریت می‌کند.

Media:

RTP / SRTP / ICE / SDP

را معمولاً RTPengine مدیریت می‌کند.

چرا فقط fix_nated_contact کافی نیست؟

ممکن است SIP سالم شود ولی SDP هنوز IP خصوصی داشته باشد.

نتیجه:

تماس وصل می‌شود اما صدا ندارید.

برای همین SBC واقعی معمولاً Signaling و Media Border را با هم کنترل می‌کند.

RTPengine چه نقشی در SBC دارد؟

RTPengine Media Proxy است.

می‌تواند:

🔹 SDP را بازنویسی کند.

🔹 RTP را Anchor کند.

🔹 Private/Public Network را Bridge کند.

🔹 IPv4 و IPv6 را Bridge کند.

🔹 RTP و SRTP را تبدیل کند.

🔹 WebRTC و SIP سنتی را Interwork کند.

معماری سبک پیشنهادی

Public Internet
      |
      |
  Kamailio SBC
   /        \
SIP          NG Control
 |              |
 |          RTPengine
 |              |
 +------ PBX ---+
         |
      Private LAN

آیا RTPengine باید همیشه در مسیر Media باشد؟

نه الزاماً.

اگر دو Endpoint مسیر مستقیم امن و قابل‌کنترلی دارند، ممکن است Media Anchoring لازم نباشد.

اما وقتی هدف SBC این است که:

🔹 IP داخلی PBX دیده نشود.

🔹 NAT را کنترل کند.

🔹 SRTP را Terminate کند.

🔹 Media Policy اعمال کند.

قرارگرفتن RTPengine در مسیر منطقی‌تر است.

Media Anchoring هزینه دارد

وقتی RTP از SBC عبور می‌کند، Bandwidth سرور SBC مصرف می‌شود.

پس اگر ۱۰۰۰ تماس هم‌زمان دارید، فقط CPU Kamailio مهم نیست.

باید:

🔹 Mbps

🔹 Packets Per Second

🔹 Jitter

🔹 Packet Loss

را هم اندازه بگیرید.

وظیفه سوم: TLS برای SIP

اگر SIP روی اینترنت عمومی است، TLS می‌تواند Signaling را رمزنگاری کند.

مدل معمول:

Remote Phone
    |
 SIP/TLS
    |
    SBC
    |
 SIP/TLS or SIP
    |
    PBX

TLS Termination در SBC چه مزیتی دارد؟

PBXهای داخلی لازم نیست Certificate تمام Clientها یا Carrierها را مستقیم مدیریت کنند.

SBC می‌تواند Policy TLS مرز شبکه را یکپارچه کند.

اما TLS فقط Signaling را امن می‌کند

برای Media به:

SRTP

نیاز دارید.

TLS و SRTP را با هم اشتباه نگیریم

پروتکل چه چیزی را محافظت می‌کند؟
TLS SIP Signaling
SRTP RTP/RTCP Media

SRTP در SBC

RFC 3711 برای SRTP قابلیت‌هایی مانند:

🔹 Confidentiality

🔹 Message Authentication

🔹 Replay Protection

را تعریف می‌کند.

RTPengine و SRTP

RTPengine فعلی از:

🔹 SDES-SRTP

🔹 DTLS-SRTP

🔹 RTP ↔ SRTP Bridging

پشتیبانی می‌کند.

در نتیجه می‌توانید مثلاً:

Internet Side:
SRTP

        |
        v

RTPengine

        |
        v

Private PBX:
RTP

این کار End-to-End Encryption نیست

اگر SRTP روی SBC Terminate و دوباره Encrypt شود، Media در خود SBC قابل پردازش است.

بنابراین:

Encrypted on each leg

با:

End-to-end encryption

یکسان نیست.

وظیفه چهارم: SIP Rate Limiting

SIP روی اینترنت دائماً Scan می‌شود.

نمونه حملات رایج:

🔹 REGISTER Flood

🔹 INVITE Flood

🔹 Password Guessing

🔹 Scannerهای Extension

🔹 OPTIONS Flood

Rate Limiting باید قبل از PBX باشد

اگر Bot مستقیماً Asterisk را هدف بگیرد، حتی Authentication Failureها منابع PBX را مصرف می‌کنند.

بهتر است SBC درخواست‌های نامناسب را قبل از Backend حذف کند.

Kamailio PIKE

ماژول `pike` نرخ Request بر اساس Source IP را دنبال می‌کند.

خود ماژول تصمیم نهایی Blocking را اعمال نمی‌کند؛ فقط Script را مطلع می‌کند که Source رفتار Floodگونه دارد.

نمونه ساده:

loadmodule "pike.so"

modparam("pike", "sampling_time_unit", 2)
modparam("pike", "reqs_density_per_unit", 30)

request_route {

    if (!pike_check_req()) {
        xlog("L_WARN",
             "SIP flood detected from $si\n");
        exit;
    }

    # ادامه Routing
}

عدد ۳۰ را Copy نکنید

Threshold باید بر اساس Traffic واقعی انتخاب شود.

یک Carrier ممکن است از یک IP صدها INVITE سالم در ثانیه بفرستد.

اگر همان IP را مانند یک Softphone معمولی محدود کنید، خودتان سرویس را مختل می‌کنید.

Rate Limit باید Context-aware باشد

بهتر است Policy جدا داشته باشید برای:

🔹 Carrier IP

🔹 Remote User

🔹 REGISTER

🔹 INVITE

🔹 OPTIONS

Carrier IPها را Allowlist کنیم؟

اگر Provider مجموعه IP ثابت و رسمی داده است، Source ACL بسیار مؤثر است.

مثلاً Trunk ورودی فقط از Subnetهای اعلام‌شده Provider پذیرفته شود.

این کار Attack Surface را به‌شدت کوچک می‌کند.

اما کاربران Remote را نمی‌توان همیشه IP-whitelist کرد

کاربر اینترنت خانگی یا موبایل IP متغیر دارد.

در این بخش باید ترکیبی از:

🔹 Authentication

🔹 Rate Limit

🔹 Dynamic Ban

🔹 TLS

استفاده شود.

SBC جای Fail2Ban نیست؛ Fail2Ban هم جای SBC نیست

Fail2Ban معمولاً Log را بعد از رخداد تحلیل می‌کند.

Kamailio می‌تواند Request را همان لحظه در لایه SIP تصمیم‌گیری کند.

هر دو می‌توانند مکمل یکدیگر باشند.

وظیفه پنجم: Protocol Normalization

در دنیای واقعی همه Carrierها SIP را دقیقاً یکسان پیاده نمی‌کنند.

ممکن است تفاوت در:

🔹 From/To Format

🔹 P-Asserted-Identity

🔹 Diversion

🔹 Contact

🔹 DTMF

🔹 Session Timer

باعث مشکل شود.

SBC می‌تواند این تفاوت‌ها را در مرز Network اصلاح کند تا مجبور نباشید برای هر Carrier داخل تمام PBXها Configuration جدا بسازید.

اما SIP را بی‌دلیل Rewrite نکنید

هر Rewrite اضافه ممکن است Feature جدیدی را خراب کند.

اصل مناسب:

فقط چیزی را Normalize کنید که یک Interoperability Problem واقعی حل می‌کند.

وظیفه ششم: Transcoding

فرض کنید Carrier فقط:

PCMA

را قبول کند.

اما سمت WebRTC از:

Opus

استفاده کند.

اگر Codec مشترک وجود نداشته باشد، Transcoding لازم می‌شود.

RTPengine می‌تواند Transcoding کند

نسخه فعلی RTPengine Transcoding صوت را پشتیبانی می‌کند.

ولی این قابلیت به‌صورت خودکار برای هر تماس فعال نمی‌شود و باید Policy مشخصی برای آن تعریف شود.

Transcoding را Default نکنید

Transcoding نسبت به RTP Relay ساده CPU بسیار بیشتری مصرف می‌کند.

ضمن اینکه مستند رسمی RTPengine توضیح می‌دهد Transcoding در User Space انجام می‌شود و In-kernel Forwarding برای Codecهای Transcodeشده قابل استفاده نیست.

بنابراین اگر Codec مشترک دارید:

Pass-through معمولاً بهتر است.

SBC سبک پیشنهادی از چه اجزایی ساخته شود؟

وظیفه Component پیشنهادی
SIP Edge Kamailio یا OpenSIPS
Topology Hiding TOPOS یا topology_hiding
NAT Signaling Kamailio/OpenSIPS
Media Relay RTPengine
TLS SIP Proxy TLS Layer
SRTP RTPengine
Rate Limiting PIKE / Rate-limit Policy
Firewall nftables / Cloud Firewall
Backend HA Dispatcher
Monitoring Metrics + SIP Trace + Central Logs

دو مسیر منطقی برای ساخت SBC متن‌باز در ۲۰۲۶

مسیر اول: Kamailio + RTPengine

این روش برای کسانی مناسب است که می‌خواهند Routing Script و Policyها کاملاً تحت کنترل خودشان باشد.

مزیت:

🔹 بسیار منعطف

🔹 سبک

🔹 قابل Scale

🔹 مناسب معماری Custom

اما نیاز به دانش SIP بیشتری دارد.

مسیر دوم: OpenSIPS SBC Community Edition

در سال ۲۰۲۶ پروژه OpenSIPS یک SBC Community Edition رسمی منتشر کرده است.

این Platform از ابتدا برای Edge SIP طراحی شده و مواردی مانند:

🔹 Topology Hiding

🔹 NAT Traversal

🔹 RTPEngine Media Relay

🔹 Mid-Registrar

🔹 Core Server Failover

🔹 PSTN Routing

🔹 SIP Authentication

🔹 Access Control

🔹 Monitoring

را آماده‌تر در اختیار شما می‌گذارد.

برای Lab یا پروژه کوچک کدام بهتر است؟

اگر هدف یادگیری یا ساخت Policy خاص است:

Kamailio + RTPengine

انعطاف بیشتری دارد.

اگر می‌خواهید سریع‌تر یک SBC واقعی قابل تست داشته باشید:

OpenSIPS SBC Community Edition

نقطه شروع بسیار جالبی در ۲۰۲۶ است.

یک SBC سبک با Kamailio از کجا شروع شود؟

Moduleهای پایه معمولاً چیزی شبیه این‌ها هستند:

loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "rr.so"
loadmodule "maxfwd.so"
loadmodule "sanity.so"

loadmodule "pike.so"
loadmodule "dispatcher.so"
loadmodule "topos.so"
loadmodule "rtpengine.so"

اگر TLS دارید، Module و TLS Config نیز اضافه می‌شود.

اولین لایه Validation

قبل از Routing:

if (!mf_process_maxfwd_header("10")) {
    sl_send_reply("483", "Too Many Hops");
    exit;
}

if (!sanity_check("1511", "7")) {
    exit;
}

هدف این مرحله جلوگیری از Loop و Requestهای malformed است.

Source Policy را زود اعمال کنید

اگر Request از SIP Carrier می‌آید، قبل از Routing مشخص کنید Source جزو Providerهای مجاز است یا خیر.

Carrier Trunk عمومی نباید به هر IP اینترنتی اجازه ورود بدهد.

REGISTER و Carrier Trunk را یکی نکنید

دو Trust Zone متفاوت هستند.

مثلاً:

ZONE 1:
Trusted SIP Carriers

ZONE 2:
Remote Registered Users

ZONE 3:
Internal PBX Servers

Policy هر Zone باید متفاوت باشد.

PBXها را پشت Private Network قرار دهید

معماری بهتر:

Public:
SBC 203.0.113.10

Private:
SBC 10.20.0.10
Asterisk 10.20.0.20
Asterisk 10.20.0.21

و روی PBX:

فقط SIP از SBCها Allow شود.

Dispatcher برای چند PBX

SBC می‌تواند چند Asterisk یا FreeSWITCH را پشت خودش قرار دهد.

       SBC
     /  |  \
    /   |   \
 PBX1 PBX2 PBX3

Kamailio Dispatcher می‌تواند:

🔹 Round Robin

🔹 Weight

🔹 Call Load

🔹 Latency

را در Selection در نظر بگیرد.

Health Check Backend ضروری است

اگر PBX2 Down شد، SBC نباید همچنان INVITE جدید به آن ارسال کند.

OPTIONS Probe یکی از روش‌های رایج Health Check است.

اما OPTIONS فقط Process را می‌سنجد

ممکن است Asterisk به OPTIONS جواب دهد ولی Database یا Dialplan آن خراب باشد.

برای سرویس حساس، Synthetic Call Test نیز در کنار OPTIONS مفید است.

SBC خودش نباید SPOF شود

یکی از رایج‌ترین اشتباه‌ها:

سه PBX داریم ولی فقط یک SBC.

در این حالت تمام Redundancy Backend با خرابی SBC بی‌اثر می‌شود.

حداقل HA برای SBC

          SIP Users / Carriers
                |
          DNS SRV / VIP
           /          \
       SBC-01        SBC-02
        |  \          /  |
        |   \        /   |
     RTP-01          RTP-02
           \        /
            PBX Pool

DNS SRV یا VIP؟

DNS SRV برای معرفی چند SIP Edge بسیار کاربردی است.

VIP برای Active/Standby در یک Network می‌تواند Failover شفاف‌تری ایجاد کند.

در معماری بزرگ ممکن است ترکیبی از هر دو استفاده شود.

State در HA مهم‌تر از IP است

اگر SBC-01 تماس را ساخته و اطلاعات Topology Hiding فقط در RAM خودش باشد، انتقال IP به SBC-02 تمام مشکل را حل نمی‌کند.

Requestهای Mid-dialog باید State لازم را داشته باشند.

بنابراین HA باید شامل:

🔹 Signaling IP Failover

🔹 Topology/Dialog State

🔹 Media State

باشد.

RTPengine HA هم مستقل است

اگر Signaling سالم باشد ولی تنها RTPengine شما Down شود، تماس‌های جدید ممکن است Signaling کامل داشته باشند اما Media نداشته باشند.

حداقل دو Media Node برای سرویس HA منطقی‌تر است.

تماس فعال در خرابی SBC چه می‌شود؟

این سؤال پاسخ ساده‌ای ندارد.

اگر Node Signaling Down شود:

Media ممکن است تا مدتی ادامه پیدا کند.

اما BYE یا re-INVITE ممکن است شکست بخورد.

اگر Media Node Down شود:

صدا معمولاً قطع می‌شود.

HA تماس فعال بسیار پیچیده‌تر از Failover تماس جدید است.

چه زمانی واقعاً به SBC نیاز داریم؟

این بخش مهم‌ترین قسمت مقاله است.

سناریو نیاز به SBC
یک PBX کوچک و یک Trunk ثابت در شبکه کنترل‌شده معمولاً ضروری نیست
SIP مستقیم روی اینترنت بسیار توصیه می‌شود
چند SIP Carrier توصیه می‌شود
چند PBX یا Hosted PBX تقریباً ضروری
کاربران Remote زیاد توصیه می‌شود
WebRTC برای معماری بزرگ بسیار مفید
نیاز به Topology Hiding بله
TLS/SRTP Interworking بله
Rate Limiting مرکزی بله
Carrier Failover بسیار مفید
Codec Interworking پرترافیک SBC/Media Gateway مناسب

سناریویی که SBC احتمالاً اضافه‌کاری است

شرکت کوچکی را فرض کنید که:

🔹 ۳۰ داخلی دارد.

🔹 همه تلفن‌ها داخل LAN هستند.

🔹 یک SIP Trunk با IP ثابت دارد.

🔹 Carrier فقط از IP مشخص وارد می‌شود.

🔹 کاربران Remote ندارد.

در این وضعیت Firewall مناسب و Asterisk درست‌کانفیگ‌شده ممکن است کاملاً کافی باشد.

سناریویی که SBC ارزش زیادی دارد

حالا فرض کنید:

🔹 ۵۰۰ کاربر دارید.

🔹 کاربران از اینترنت Register می‌شوند.

🔹 دو Carrier دارید.

🔹 سه Asterisk دارید.

🔹 WebRTC دارید.

🔹 TLS و SRTP لازم است.

🔹 می‌خواهید IP داخلی دیده نشود.

در این معماری نبود SBC معمولاً باعث پراکنده‌شدن NAT، Firewall، TLS، Carrier Policy و Load Balancing بین تمام PBXها می‌شود.

SBC این وظایف را در یک Edge Layer متمرکز می‌کند.

SBC سبک یا SBC تجاری؟

این تصمیم به Feature Count بستگی ندارد؛ به Risk و SLA بستگی دارد.

SBC متن‌باز برای چه پروژه‌ای مناسب است؟

🔹 تیم فنی SIP دارید.

🔹 Policyها اختصاصی هستند.

🔹 می‌توانید Monitoring و HA را خودتان بسازید.

🔹 Vendor Support اجباری نیست.

🔹 نیاز به Certification خاص ندارید.

چه زمانی SBC تجاری منطقی‌تر می‌شود؟

🔹 SLA بسیار سخت دارید.

🔹 Support رسمی 24×7 الزام قراردادی است.

🔹 Interoperability با Carrierهای متعدد بسیار پیچیده است.

🔹 Compliance و Certification خاص نیاز دارید.

🔹 Media Transcoding بسیار سنگین دارید.

🔹 تیم SIP داخلی محدود است.

Kamailio + RTPengine آیا «SBC واقعی» محسوب می‌شود؟

این ترکیب می‌تواند بخش بزرگی از وظایف عملی یک SBC را پیاده کند.

اما نام‌گذاری مهم‌تر از Function نیست.

ممکن است معماری شما:

🔹 Topology Hiding داشته باشد.

🔹 NAT را حل کند.

🔹 Media را Relay کند.

🔹 TLS/SRTP داشته باشد.

🔹 Rate Limit داشته باشد.

ولی مثلاً:

🔹 Billing Integration

🔹 Lawful Intercept

🔹 Vendor Certification

🔹 Advanced Transcoding Hardware

نداشته باشد.

برای Hosted PBX کوچک و متوسط ممکن است همین دقیقاً چیزی باشد که نیاز دارید.

OpenSIPS SBC Community Edition چه تغییری ایجاد کرده است؟

در ۲۰۲۶ پروژه OpenSIPS یک SBC آماده Community Edition منتشر کرد.

این موضوع مهم است چون فاصله بین:

«SIP Proxy خام»

و:

«SBC قابل‌استفاده»

کمتر شده است.

نسخه Community Edition برای:

🔹 Lab

🔹 Proof of Concept

🔹 Single Tenant

🔹 زیرساخت کوچک تا متوسط

به‌عنوان نقطه شروع معرفی شده است.

آیا همان را مستقیم Production کنیم؟

هر Setup آماده‌ای قبل از Production باید با:

🔹 Traffic واقعی

🔹 Carrier واقعی

🔹 Security Policy

🔹 HA Requirement

تطبیق داده شود.

Ready-to-run به معنی Ready-for-every-network نیست.

Monitoring برای SBC حیاتی است

اگر SBC مرز تمام تماس‌هاست، خرابی آن روی کل سرویس اثر دارد.

حداقل مانیتور کنید:

🔹 SIP CPS

🔹 Active Dialogs

🔹 REGISTER Rate

🔹 4xx/5xx Responses

🔹 Failed Auth

🔹 RTP Sessions

🔹 Packet Loss

🔹 Jitter

🔹 Bandwidth

🔹 TLS Certificate Expiry

SIP Trace مرکزی داشته باشید

در Production بهتر است Call-ID قابل Correlation باشد و SIP Flowها در سیستم Trace مرکزی قابل جست‌وجو باشند.

بدون Trace، عیب‌یابی مشکل بین:

Carrier → SBC → PBX

زمان‌بر می‌شود.

آیا Call-ID را در Topology Hiding تغییر دهیم؟

بعضی پیاده‌سازی‌ها امکان Mask کردن Call-ID را دارند.

اما قبل از فعال‌کردن آن بررسی کنید:

🔹 Transfer

🔹 Conference

🔹 Recording Correlation

🔹 CDR

🔹 SIP Trace

به Call-ID اصلی وابسته نباشند.

Maintenance SBC چگونه انجام شود؟

برای دو Node:

مرحله ۱: Node اول را از دریافت Session جدید خارج کنید.

مرحله ۲: Dialogهای موجود را Drain کنید.

مرحله ۳: Upgrade کنید.

مرحله ۴: SIP/TLS/RTP Test بگیرید.

مرحله ۵: Node را به Pool برگردانید.

مرحله ۶: Node دوم را Upgrade کنید.

هم‌زمان Kamailio و RTPengine را Upgrade نکنید

اگر بعد از Maintenance Media خراب شود، نمی‌دانید مشکل از SIP Proxy بوده یا RTPengine.

تغییرها را مرحله‌ای انجام دهید.

Rollback Plan داشته باشید

قبل از Upgrade ذخیره کنید:

🔹 Package Version

🔹 Config

🔹 Database Schema

🔹 TLS Files

🔹 Firewall Rules

Failure Scenario ۱: Kamailio Down

تماس‌های جدید باید به SBC دوم برسند.

اما برای Mid-dialog Requestها State Sharing و Routing اهمیت دارد.

Failure Scenario ۲: RTPengine Down

Signaling ممکن است کامل شود ولی تماس‌های جدید Media نداشته باشند.

RTPengine دوم باید برای Session جدید انتخاب شود.

Failure Scenario ۳: Backend PBX Down

Dispatcher باید Backend را از Pool حذف کند و تماس‌های جدید را به PBX سالم بفرستد.

Failure Scenario ۴: Redis Down

اگر TOPOS یا Dialog State به Redis وابسته است، اثر خرابی Redis را قبل از Production تست کنید.

Shared State نباید خودش Single Point of Failure شود.

Failure Scenario ۵: Carrier Down

SBC می‌تواند Route جدید را به Provider دوم ببرد.

ولی Failover باید روی:

🔹 Response Code

🔹 Timeout

🔹 OPTIONS Health

Policy مشخص داشته باشد.

همه 503ها را Failover نکنید

503 ممکن است Temporary Overload باشد.

اما ممکن است Route یا Account Provider مشکل داشته باشد.

Retry روی Carrier دوم باید جلوی Loop و Duplicate Billing را هم بگیرد.

Capacity Planning برای SBC

برای Signaling فقط تعداد Extension کافی نیست.

باید اندازه بگیرید:

🔹 Registration Rate

🔹 Calls Per Second

🔹 Concurrent Dialogs

🔹 TLS Connections

برای Media جدا Benchmark کنید

RTPengine را با:

🔹 Concurrent RTP Streams

🔹 PPS

🔹 Bandwidth

🔹 SRTP Ratio

🔹 Transcoding Ratio

بسنجید.

Transcoding Ratio بسیار مهم است

۵۰۰ تماس Pass-through با ۵۰۰ تماس Transcoding از نظر CPU یکسان نیستند.

Benchmark باید Workload واقعی شما را تقلید کند.

SBC روی یک VPS قابل اجراست؟

بله، برای بسیاری از پروژه‌های کوچک و متوسط.

Kamailio به‌تنهایی بسیار سبک است.

اما وقتی RTPengine روی همان سرور قرار دارد، Network Quality و PPS اهمیت بیشتری پیدا می‌کند.

برای HA دو VPS مستقل بهتر است

اگر هر دو SBC روی یک Physical Host باشند، خرابی Host هر دو را از بین می‌برد.

در صورت اهمیت SLA، Failure Domain زیرساخت را هم بررسی کنید.

SBC ایران یا خارج؟

باید بر اساس مسیر واقعی Carrier و کاربران تصمیم بگیرید.

اگر:

کاربران + Carrier + PBX

همگی در ایران هستند، قرار دادن SBC/Media Edge داخل ایران می‌تواند Latency را کاهش دهد.

اگر کاربران بین‌المللی‌اند، معماری Multi-Region منطقی‌تر است.

Media را بی‌دلیل از مسیر دور عبور ندهید

فرض کنید کاربر تهران و PBX تهران هستند ولی RTPengine اروپا است.

شما فقط برای عبور صدا یک رفت‌وبرگشت غیرضروری ساخته‌اید.

SBC باید مسیر Media را کنترل کند، نه اینکه آن را بی‌دلیل طولانی کند.

چک‌لیست SBC سبک برای Production

🔹 Public SIP فقط روی SBC باز است.

🔹 PBX از اینترنت مستقیم قابل دسترسی نیست.

🔹 Carrier ACL تعریف شده است.

🔹 Topology Hiding تست شده است.

🔹 NAT Signaling تست شده است.

🔹 Media از RTPengine عبور می‌کند.

🔹 TLS Certificate معتبر است.

🔹 SRTP Policy مشخص است.

🔹 SIP Flood Protection فعال است.

🔹 PBX Health Check فعال است.

🔹 Carrier Failover تست شده است.

🔹 RTPengine Failover تست شده است.

🔹 Logs و SIP Trace مرکزی هستند.

🔹 Upgrade و Rollback مستند شده‌اند.

پرسش‌های رایج

SBC VoIP چیست؟

SBC یک لایه مرزی برای کنترل SIP و Media است که می‌تواند امنیت، Topology Hiding، NAT Traversal، TLS/SRTP، Rate Limiting، Routing و Media Policy را قبل از رسیدن تماس به PBX اعمال کند.

آیا هر Asterisk به SBC نیاز دارد؟

خیر. برای یک PBX کوچک با Trunk ثابت و شبکه کنترل‌شده ممکن است Firewall و تنظیم صحیح خود Asterisk کافی باشد. SBC زمانی ارزش بیشتری دارد که SIP در اینترنت عمومی، چند Carrier، چند PBX یا کاربران Remote داشته باشید.

تفاوت SBC و SIP Proxy چیست؟

SIP Proxy معمولاً روی Signaling تمرکز دارد. SBC علاوه بر Signaling معمولاً Policy امنیتی، Topology Hiding، NAT، Media Anchoring، TLS/SRTP و کنترل مرز شبکه را نیز انجام می‌دهد.

آیا Kamailio یک SBC است؟

Kamailio یک SIP Server/Proxy بسیار منعطف است که با Moduleهای مناسب و Media Proxy مانند RTPengine می‌تواند بسیاری از وظایف SBC را پیاده کند.

RTPengine در SBC چه کاری انجام می‌دهد؟

RTPengine Media را Relay می‌کند، SDP را بازنویسی می‌کند، NAT را مدیریت می‌کند و می‌تواند RTP/SRTP، WebRTC، ICE و Transcoding را مدیریت کند.

Topology Hiding چه چیزی را مخفی می‌کند؟

اطلاعات Routing داخلی مانند Via، Record-Route، Route و Contact می‌توانند از دید شبکه خارجی پنهان یا بازنویسی شوند.

آیا Topology Hiding همان Encryption است؟

خیر. Topology Hiding فقط ساختار داخلی شبکه را پنهان می‌کند. برای رمزنگاری Signaling باید TLS و برای Media باید SRTP استفاده شود.

آیا SBC می‌تواند جلوی حمله SIP را بگیرد؟

می‌تواند سطح بزرگی از حملات را با ACL، Authentication، Rate Limit، Flood Detection و Policyهای SIP کاهش دهد، اما همچنان Network Firewall و Monitoring لازم هستند.

آیا SBC می‌تواند Transcoding انجام دهد؟

بله، اگر Media Layer قابلیت Transcoding داشته باشد. RTPengine از Transcoding صوت پشتیبانی می‌کند، ولی این قابلیت CPU بیشتری مصرف می‌کند و بهتر است فقط در صورت نیاز فعال شود.

برای HA چند SBC لازم است؟

اگر SBC یک سرویس حیاتی است، یک Node کافی نیست. معمولاً حداقل دو Signaling Edge و در صورت Media Anchoring حداقل دو Media Node نقطه شروع منطقی‌تری هستند.

OpenSIPS SBC Community Edition چیست؟

یک Platform رسمی متن‌باز است که در سال ۲۰۲۶ توسط پروژه OpenSIPS منتشر شد و مجموعه‌ای از قابلیت‌های SBC شامل Topology Hiding، NAT Traversal، RTPEngine، Failover، PSTN Routing و Monitoring را آماده ارائه می‌کند.

چه زمانی SBC تجاری بهتر از نسخه متن‌باز است؟

وقتی Vendor Support، Certification، Compliance، Interoperability پیچیده، SLA سخت یا Media Processing بسیار سنگین دارید، محصول تجاری می‌تواند ریسک عملیاتی کمتری داشته باشد.

جمع‌بندی

SBC یک محصول جادویی نیست که با نصب آن تمام مشکلات VoIP حل شوند. در اصل، SBC مجموعه‌ای از Policyها و قابلیت‌هایی است که در مرز شبکه تلفنی قرار می‌گیرند.

اگر SIP Trunk و کاربران شما مستقیم به PBX متصل باشند، امنیت، NAT، TLS، Carrier Routing و Media Policy همگی داخل PBX پخش می‌شوند. وقتی شبکه بزرگ‌تر می‌شود، این مدل سخت‌تر قابل مدیریت است.

با یک SBC سبک می‌توانید Signaling را روی Kamailio یا OpenSIPS Terminate کنید، Topology داخلی را مخفی کنید، Sourceهای Carrier را محدود کنید، Flood را قبل از PBX متوقف کنید و Backendها را Load Balance کنید.

در لایه Media نیز RTPengine می‌تواند NAT Traversal، RTP/SRTP، WebRTC، IPv4/IPv6 و در صورت نیاز Transcoding را مدیریت کند.

برای یک شرکت کوچک با یک PBX و یک Trunk ثابت، SBC ممکن است اضافه‌کاری باشد. اما برای Hosted PBX، چند Carrier، Remote User، WebRTC، چند Asterisk و زیرساخت Internet-facing، SBC به‌تدریج تبدیل به یک لایه ضروری می‌شود.

در سال ۲۰۲۶ دو مسیر متن‌باز بسیار منطقی وجود دارد: ساخت SBC سفارشی با Kamailio + RTPengine یا شروع سریع‌تر با OpenSIPS SBC Community Edition.

مهم‌ترین اصل این است که قبل از Production، Failure Scenarioها را آزمایش کنید؛ یک SBC بدون HA فقط Single Point of Failure جدیدی در جلوی PBX ایجاد می‌کند.

منابع و مستندات
تعریف SBC، نسخه‌های فعلی، Topology Hiding، TLS، Rate Limiting، RTP/SRTP، Transcoding و OpenSIPS SBC Community Edition تا ۱۷ اکتبر ۲۰۲۶ با منابع رسمی بررسی شده‌اند.
تعریف SBC
مرجع وظایف رایج SBC شامل Perimeter Defense، Topology Hiding، NAT Traversal، Protocol Interworking و Media/QoS Management
Kamailio 2026
مرجع آخرین نسخه Stable فعلی Kamailio و سازگاری Config و Database Schema شاخه 6.1
Topology Hiding
مرجع حذف و بازسازی Headerهای Routing، Storageهای DB/Redis/htable و Call-ID Masking در Kamailio
SIP Flood
مرجع تشخیص Source IPهای پرترافیک، sampling_time_unit، reqs_density_per_unit و pike_check_req()
TLS
مرجع Certificate، CA، Client Verification، TLS Policy و مدیریت Connectionهای SIP/TLS
Media Proxy
مرجع NAT Media Relay، ICE، SRTP، DTLS-SRTP، RTP/SRTP Bridging، IPv4/IPv6 و Media Processing
Transcoding
مرجع Transcoding صوت، هزینه User-space Processing و محدودیت In-kernel Forwarding هنگام Transcode
SRTP
مرجع استاندارد SRTP برای محرمانگی، Message Authentication و Replay Protection در RTP/RTCP
SBC آماده
مرجع SBC رسمی Community Edition منتشرشده در ۲۰۲۶ با Topology Hiding، NAT Traversal، RTPEngine، Failover، PSTN Routing و Monitoring
Source Code
مرجع Source و Featureهای آماده SBC Community Edition برای آزمایش و توسعه بیشتر
پیشنهاد زیرساخت ایرانیکاسرور برای SBC VoIP

PBX را از اینترنت جدا کنید و یک SIP Edge مستقل جلوی آن قرار دهید

اگر چند SIP Trunk، کاربران Remote، WebRTC یا بیش از یک Asterisk دارید، بهتر است Public IP اصلی تلفنی روی SBC قرار بگیرد و PBXها در شبکه Private باقی بمانند. برای شروع حتی می‌توانید یک SBC آزمایشی با Kamailio/OpenSIPS و RTPengine روی VPS جدا راه‌اندازی کنید و قبل از انتقال Traffic اصلی، Topology Hiding، NAT، TLS/SRTP، Rate Limit و Carrier Failover را تست کنید.

اگر سرویس برایتان حیاتی است، دو VPS مستقل برای SBC-01 و SBC-02 در نظر بگیرید و Media Node را نیز از نظر Packet Loss، PPS و Latency جدا Benchmark کنید. در این معماری منابع زیاد به‌تنهایی کافی نیست؛ کیفیت شبکه و Public IP پایدار اهمیت بیشتری دارند.

مشاوره Kamailio، OpenSIPS، RTPengine و SBC: 021-91302467

اشتراک‌گذاری مقاله
گفت‌وگو درباره آموزش

دیدگاه‌ها (۰)

هنوز دیدگاهی ثبت نشده است.

دیدگاه یا سؤال خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *