اتصال SIP Trunk در ایزابل: تنظیمات و رفع خطا

برای اتصال SIP Trunk در ایزابل ابتدا مشخصات ترانک را از ارائه‌دهنده بگیرید (آدرس SBC، روش احراز هویت با IP یا Register، کدک و قالب شماره)، شبکه سرور را طوری تنظیم کنید که SBC در دسترس باشد، از مسیر PBX و Trunks یک ترانک SIP یا PJSIP بسازید، Outbound Route و Inbound Route را تعریف کنید و با Apply Config تنظیمات را اعمال کنید. بعد در Asterisk CLI با sip show peers یا pjsip show endpoints مطمئن شوید ترانک در دسترس است و یک تماس ورودی و خروجی را تست کنید.

این راهنما برای کسی است که Issabel را نصب کرده و داخلی‌ها کار می‌کنند؛ اگر هنوز نصب را انجام نداده‌اید، فایل نصب و نسخه‌ها را در دانلود ایزابل ببینید. آموزش‌های فارسی زیادی تنظیمات ترانک را فقط با تصویر نشان می‌دهند. این راهنما مقدار هر فیلد را به‌صورت متن آورده و تفاوت دو درایور SIP، تنظیمات شبکه و NAT و روش عیب‌یابی خطاهای رایج را هم پوشش می‌دهد. نام منوها بر اساس رابط وب Issabel است و ممکن است در نسخه‌های مختلف کمی تفاوت داشته باشد.

پیش از شروع: این اطلاعات را از ارائه‌دهنده بگیرید

موردچرا لازم است
روش احراز هویت: بر اساس IP یا با نام کاربری و Registerمقادیر PEER Details و نیاز به Register String را تعیین می‌کند
آدرس IP یا نام SBC و پورت SIPمقدار host و port؛ پورت معمولاً 5060 است
IP اختصاص‌یافته به سرور شما و Gateway لینک ترانک (اگر لینک اختصاصی است)تنظیم کارت شبکه دوم و مسیر به SBC
شماره‌ها (DID) و قالب ارسال آن‌هاتعریف Inbound Route؛ مثلاً شماره با کد شهر یا بدون آن
قالب شماره خروجی و Caller ID مجازجلوگیری از رد تماس خروجی توسط ارائه‌دهنده
کدک‌های پشتیبانی‌شدهمقدار allow؛ ناهمخوانی کدک باعث قطع تماس یا بی‌صدایی می‌شود
تعداد کانال هم‌زمانمقدار Maximum Channels

در سیپ ترانک مخابرات معمولاً یک لینک اختصاصی تحویل داده می‌شود و مجموعه‌ای از آدرس‌ها شامل IP سمت شما، Gateway و آدرس SBC در اختیارتان قرار می‌گیرد. در سرویس‌هایی که روی بستر اینترنت ارائه می‌شوند، معمولاً نام کاربری، رمز و آدرس سرور می‌گیرید. جزئیات دقیق را فقط از قرارداد و فرم فنی ارائه‌دهنده خودتان بردارید.

chan_sip یا PJSIP؟

Issabel هنگام ساخت ترانک هر دو نوع SIP (درایور قدیمی chan_sip) و PJSIP را پیشنهاد می‌دهد. پروژه Asterisk درایور chan_sip را از نسخه 17 منسوخ اعلام کرد و در نسخه 21 به‌طور کامل حذف کرد؛ پس برای راه‌اندازی جدید، اگر نسخه Issabel شما PJSIP را پشتیبانی می‌کند، آن را در نظر بگیرید. بسیاری از ارائه‌دهندگان داخلی هنوز نمونه تنظیمات را برای chan_sip می‌دهند و در سیستم‌هایی که داخلی‌ها روی chan_sip هستند، ماندن روی همان درایور ساده‌تر است.

معیارchan_sipPJSIP
وضعیت در Asteriskمنسوخ و در Asterisk 21 حذف شدهدرایور پیشنهادی نسخه‌های جدید
تنظیم در Issabelمتن PEER Details و Register Stringفیلدهای جداگانه برای سرور، احراز هویت و Registration
دستور بررسیsip show peers و sip show registrypjsip show endpoints و pjsip show registrations
نکتهنمونه تنظیمات ارائه‌دهندگان داخلی بیشتر برای این درایور استاگر هر دو درایور فعال‌اند، نمی‌توانند هم‌زمان روی یک پورت (مثلاً 5060) گوش دهند

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

اگر ترانک روی لینک اختصاصی تحویل شده، کارت شبکه دوم سرور را با IP داده‌شده تنظیم کنید و فقط برای آدرس SBC یک مسیر از طریق Gateway همان لینک بسازید. Gateway پیش‌فرض سرور باید همان شبکه داخلی بماند. در Issabel 5 که روی خانواده Rocky Linux اجرا می‌شود، مسیر دائمی با nmcli اضافه می‌شود. نام اتصال و آدرس‌های زیر نمونه‌اند:

# temporary, for testing
ip route add 192.0.2.10/32 via 198.51.100.1 dev eth1
ping -c 4 192.0.2.10

# persistent
nmcli connection modify eth1 +ipv4.routes "192.0.2.10/32 198.51.100.1"
nmcli connection up eth1
ip route get 192.0.2.10

خروجی ip route get باید dev eth1 را نشان دهد. توضیح بیشتر درباره کارت شبکه و مسیرها را در تنظیمات شبکه لینوکس ببینید. SBC معمولاً به پینگ پاسخ نمی‌دهد، پس نبودن پاسخ پینگ به تنها نشانه قطعی نیست؛ ملاک اصلی وضعیت ترانک در Asterisk است.

اگر سرور پشت NAT است و ترانک از اینترنت می‌آید، در منوی PBX، بخش Settings و صفحه Asterisk SIP Settings آدرس عمومی (External Address) و شبکه‌های داخلی (Local Networks) را وارد کنید. روی لینک اختصاصی بدون NAT این تنظیم لازم نیست.

اتصال SIP Trunk در ایزابل: ساخت ترانک

در رابط وب به PBX و سپس PBX Configuration بروید و از بخش Trunks گزینه Add SIP Trunk را انتخاب کنید. در بخش General این فیلدها را پر کنید:

  • Trunk Name: نامی خوانا مثل mokhaberat یا provider1.
  • Outbound CallerID: شماره‌ای که ارائه‌دهنده به‌عنوان Caller ID قبول می‌کند، با همان قالبی که اعلام کرده است.
  • Maximum Channels: تعداد کانال قرارداد، تا تماس اضافه به ترانک فرستاده نشود.

PEER Details برای ترانک با احراز هویت IP

در بخش Outgoing Settings، نام ترانک را در Trunk Name وارد و در PEER Details مقادیری مثل نمونه زیر را قرار دهید. آدرس SBC، کدک و حالت DTMF را با مشخصات ارائه‌دهنده جایگزین کنید:

host=192.0.2.10
port=5060
type=peer
insecure=port,invite
context=from-trunk
qualify=yes
disallow=all
allow=alaw
dtmfmode=rfc2833
canreinvite=no
nat=no
  • insecure=port,invite: تماس ورودی از SBC بدون درخواست رمز پذیرفته شود و تطبیق فقط با IP انجام شود.
  • context=from-trunk: تماس‌های ورودی وارد مسیر Inbound Routes شوند.
  • qualify=yes: Asterisk به‌طور دوره‌ای در دسترس بودن SBC را بررسی می‌کند و وضعیت را در sip show peers نشان می‌دهد.
  • nat: روی لینک اختصاصی no؛ اگر سرور پشت NAT است، مقداری مثل force_rport,comedia.

ترانک با نام کاربری و Register String

اگر ارائه‌دهنده نام کاربری و رمز داده، PEER Details را به این شکل تغییر دهید و Register String را هم پر کنید. بخش پس از علامت / شماره‌ای است که تماس ورودی با آن به Inbound Route می‌رسد:

# PEER Details
host=sip.provider.example
type=friend
username=02100000000
secret=REPLACE-WITH-PASSWORD
fromuser=02100000000
fromdomain=sip.provider.example
insecure=port,invite
context=from-trunk
qualify=yes
disallow=all
allow=alaw&ulaw
dtmfmode=rfc2833

# Register String
02100000000:REPLACE-WITH-PASSWORD@sip.provider.example:5060/02100000000

در ترانک PJSIP به جای متن PEER Details، فیلدهای Username، Secret، SIP Server، SIP Server Port، نوع Authentication و Registration را جداگانه پر می‌کنید. منطق همان است: برای احراز هویت IP، Registration و Authentication خاموش و برای حساب کاربری هر دو فعال.

مسیر تماس خروجی و ورودی

Outbound Route

از بخش Outbound Routes یک مسیر بسازید، ترانک جدید را در Trunk Sequence قرار دهید و Dial Pattern را طبق قالب شماره ارائه‌دهنده تعریف کنید. در الگوها X هر رقم 0 تا 9، N رقم 2 تا 9 و نقطه یعنی یک یا چند رقم دیگر. یک نمونه رایج:

prependprefixmatch patternکاربرد
خالی90XXXXXXXXXXکاربر 9 و شماره 11 رقمی (با کد شهر یا موبایل) می‌گیرد؛ 9 حذف و بقیه ارسال می‌شود
خالی9NXXXXXXXشماره ثابت 8 رقمی بدون کد شهر

اگر ارائه‌دهنده شماره را با کد شهر می‌خواهد، برای الگوی 8 رقمی در ستون prepend کد شهر را اضافه کنید. تماس بین‌المللی را فقط در صورت نیاز و در مسیری جداگانه با محدودیت دسترسی تعریف کنید؛ سوءاستفاده از ترانک برای تماس‌های گران‌قیمت از رایج‌ترین خسارت‌های سیستم‌های تلفنی آلوده است.

Inbound Route و Apply Config

از بخش Inbound Routes یک مسیر بسازید، در DID Number شماره را دقیقاً با قالبی که ارائه‌دهنده ارسال می‌کند وارد کنید و مقصد را داخلی، IVR یا صف انتخاب کنید. اگر قالب ارسال شماره را نمی‌دانید، ابتدا یک مسیر با DID خالی (هر شماره) بسازید، تماس بگیرید و شماره رسیده را در CLI ببینید. پس از هر تغییر، دکمه Apply Config بالای صفحه را بزنید؛ تا این کار انجام نشود، تنظیمات در Asterisk اعمال نمی‌شوند.

بررسی وضعیت ترانک در Asterisk CLI

با SSH وارد سرور شوید یا از منوی PBX بخش Tools و Asterisk CLI را باز کنید:

asterisk -rvvv

# chan_sip
sip show peers
sip show registry
sip set debug ip 192.0.2.10
sip set debug off

# PJSIP
pjsip show endpoints
pjsip show registrations
pjsip set logger on
pjsip set logger off

core show channels

در sip show peers وضعیت OK همراه با زمان پاسخ یعنی SBC در دسترس است. UNREACHABLE یعنی پاسخ qualify نمی‌رسد و UNKNOWN یعنی هنوز پاسخی دریافت نشده یا qualify خاموش است. در ترانک با Register، sip show registry باید وضعیت Registered نشان دهد. دستورهای debug پیام‌های SIP را روی صفحه چاپ می‌کنند و روی سرور شلوغ حجم زیادی دارند؛ پس از پیدا کردن مشکل خاموششان کنید.

خطاهای رایج SIP Trunk در ایزابل

نشانهعلت محتملبررسی و رفع
UNREACHABLE در sip show peersمسیر به SBC از کارت شبکه اشتباه می‌رود، فایروال پورت 5060 را بسته، یا host اشتباه استip route get، قواعد فایروال سرور و مقدار host
Registration به Registered نمی‌رسدنام کاربری، رمز یا fromdomain اشتباه، یا Register String نادرستsip set debug و بررسی پاسخ 401 یا 403
تماس خروجی با 403 یا 404 رد می‌شودقالب شماره یا Caller ID مورد قبول ارائه‌دهنده نیستDial Pattern، ستون prepend و Outbound CallerID
تماس ورودی به مقصد نمی‌رسدDID در Inbound Route با شماره ارسالی ارائه‌دهنده یکسان نیستشماره را در CLI ببینید و DID را اصلاح کنید
صدای یک‌طرفه یا بی‌صداNAT، بسته بودن پورت‌های RTP یا ناهمخوانی کدکExternal Address و Local Networks، باز بودن پورت‌های RTP، مقدار allow
قطع تماس پس از حدود 30 ثانیهپیام ACK به مقصد نمی‌رسد؛ اغلب به دلیل NAT یا SIP ALG روترخاموش کردن SIP ALG روتر و بررسی nat در PEER Details
IVR ارائه‌دهنده یا بانک رقم‌ها را نمی‌شناسدناهمخوانی حالت DTMFdtmfmode را طبق مشخصات ارائه‌دهنده تغییر دهید

صدا در SIP با پروتکل RTP و روی پورت‌های UDP جداگانه منتقل می‌شود. محدوده پیش‌فرض Asterisk در فایل rtp.conf پورت‌های 10000 تا 20000 است و این محدوده باید در فایروال سرور و هر فایروال یا NAT بین سرور و ارائه‌دهنده باز باشد.

امنیت ترانک و سرور تلفن

پورت 5060 نباید برای همه اینترنت باز باشد. در ترانک با احراز هویت IP، فقط آدرس SBC را مجاز کنید. نمونه با iptables:

iptables -A INPUT -p udp --dport 5060 -s 192.0.2.10 -j ACCEPT
iptables -A INPUT -p udp --dport 10000:20000 -s 192.0.2.10 -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j DROP

Issabel ماژول فایروال خودش را در رابط وب دارد که قواعد iptables را مدیریت می‌کند؛ اگر آن را فعال کرده‌اید، قواعد را از همان‌جا تعریف کنید تا با قواعد دستی تداخل نداشته باشد. برای ترتیب قواعد و ذخیره دائمی آن‌ها آموزش کانفیگ iptables در لینوکس را ببینید. رمز داخلی‌ها را طولانی و تصادفی بگذارید، دسترسی رابط وب را به شبکه داخلی محدود کنید و پیش از هر تغییر بزرگ از تنظیمات بکاپ بگیرید. بخش‌های دیگر امن‌سازی سیستم‌عامل در خدمات امن‌سازی سرور آمده است.

سوالات متداول

برای SIP Trunk چه پورت‌هایی باید باز باشد؟

پورت سیگنالینگ SIP که معمولاً UDP 5060 است و محدوده RTP که در Asterisk به‌صورت پیش‌فرض UDP 10000 تا 20000 است. هر دو را فقط برای آدرس ارائه‌دهنده باز کنید.

می‌توانم ایزابل را روی سرور مجازی نصب کنم و ترانک وصل کنم؟

به نوع تحویل ترانک بستگی دارد. اگر ارائه‌دهنده ترانک را روی بستر اینترنت یا شبکه IP تحویل می‌دهد، سرور مجازی ایران قابل استفاده است. اگر ترانک روی لینک فیزیکی اختصاصی به محل شما تحویل می‌شود، سرور یا دست‌کم مسیر شبکه باید به همان لینک برسد.

چند ترانک را هم‌زمان می‌شود تعریف کرد؟

بله. هر ترانک را جداگانه بسازید و در Trunk Sequence مسیر خروجی ترتیب آن‌ها را تعیین کنید؛ اگر ترانک اول پاسخ ندهد یا کانال‌هایش پر باشد، تماس به ترانک بعدی می‌رود. برای هر شماره ورودی هم Inbound Route جداگانه تعریف کنید.

اتصال شعبه‌ها به همین ترانک ممکن است؟

بله. داخلی‌های شعبه‌ها از طریق شبکه امن بین دفاتر به سرور مرکزی Register می‌شوند و تماس بیرونی از ترانک مرکز انجام می‌شود. کیفیت صدا به کیفیت همان ارتباط بستگی دارد؛ طراحی آن را در VPN سازمانی بین شعب ببینید.

پاسخی بگذارید

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