برای اتصال 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_sip | PJSIP |
|---|---|---|
| وضعیت در Asterisk | منسوخ و در Asterisk 21 حذف شده | درایور پیشنهادی نسخههای جدید |
| تنظیم در Issabel | متن PEER Details و Register String | فیلدهای جداگانه برای سرور، احراز هویت و Registration |
| دستور بررسی | sip show peers و sip show registry | pjsip 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=noinsecure=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 و نقطه یعنی یک یا چند رقم دیگر. یک نمونه رایج:
| prepend | prefix | match pattern | کاربرد |
|---|---|---|---|
| خالی | 9 | 0XXXXXXXXXX | کاربر 9 و شماره 11 رقمی (با کد شهر یا موبایل) میگیرد؛ 9 حذف و بقیه ارسال میشود |
| خالی | 9 | NXXXXXXX | شماره ثابت 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 ارائهدهنده یا بانک رقمها را نمیشناسد | ناهمخوانی حالت DTMF | dtmfmode را طبق مشخصات ارائهدهنده تغییر دهید |
صدا در 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 DROPIssabel ماژول فایروال خودش را در رابط وب دارد که قواعد iptables را مدیریت میکند؛ اگر آن را فعال کردهاید، قواعد را از همانجا تعریف کنید تا با قواعد دستی تداخل نداشته باشد. برای ترتیب قواعد و ذخیره دائمی آنها آموزش کانفیگ iptables در لینوکس را ببینید. رمز داخلیها را طولانی و تصادفی بگذارید، دسترسی رابط وب را به شبکه داخلی محدود کنید و پیش از هر تغییر بزرگ از تنظیمات بکاپ بگیرید. بخشهای دیگر امنسازی سیستمعامل در خدمات امنسازی سرور آمده است.
سوالات متداول
برای SIP Trunk چه پورتهایی باید باز باشد؟
پورت سیگنالینگ SIP که معمولاً UDP 5060 است و محدوده RTP که در Asterisk بهصورت پیشفرض UDP 10000 تا 20000 است. هر دو را فقط برای آدرس ارائهدهنده باز کنید.
میتوانم ایزابل را روی سرور مجازی نصب کنم و ترانک وصل کنم؟
به نوع تحویل ترانک بستگی دارد. اگر ارائهدهنده ترانک را روی بستر اینترنت یا شبکه IP تحویل میدهد، سرور مجازی ایران قابل استفاده است. اگر ترانک روی لینک فیزیکی اختصاصی به محل شما تحویل میشود، سرور یا دستکم مسیر شبکه باید به همان لینک برسد.
چند ترانک را همزمان میشود تعریف کرد؟
بله. هر ترانک را جداگانه بسازید و در Trunk Sequence مسیر خروجی ترتیب آنها را تعیین کنید؛ اگر ترانک اول پاسخ ندهد یا کانالهایش پر باشد، تماس به ترانک بعدی میرود. برای هر شماره ورودی هم Inbound Route جداگانه تعریف کنید.
اتصال شعبهها به همین ترانک ممکن است؟
بله. داخلیهای شعبهها از طریق شبکه امن بین دفاتر به سرور مرکزی Register میشوند و تماس بیرونی از ترانک مرکز انجام میشود. کیفیت صدا به کیفیت همان ارتباط بستگی دارد؛ طراحی آن را در VPN سازمانی بین شعب ببینید.





