Asterisk 22 برای کسی مناسب است که میخواهد یک هسته VoIP قابلکنترل، سبک و قابلبرنامهریزی داشته باشد؛ نه الزاماً یک پنل آماده مثل FreePBX. اگر میخواهید Dialplan را خودتان بنویسید، رفتار SIP را دقیق کنترل کنید، PJSIP را مستقیماً مدیریت کنید، با AMI/ARI یکپارچهسازی بسازید یا PBX/SBC سفارشی راهاندازی کنید، Asterisk 22 یکی از بهترین شاخههای فعلی برای Production است.
خلاصه: اگر FreePBX میخواهید، لازم نیست pjsip.conf را دستی بنویسید. اما اگر Asterisk خام، Route سفارشی، Automation، API Integration یا کنترل دقیق SIP/NAT/TLS میخواهید، Asterisk 22 + PJSIP انتخاب بسیار مناسبی است.
Asterisk 22 برای چه کسانی مناسب است؟
| سناریو | مناسب است؟ | چرا؟ |
|---|---|---|
| PBX سفارشی با چند داخلی و Trunk | بله | کنترل کامل روی PJSIP و Dialplan |
| VoIP Developer / API Integration | بله | AMI، ARI و Dialplan قابلبرنامهریزی |
| SBC/Media Gateway سفارشی | بله، با طراحی درست | کنترل دقیق SIP، NAT و Media |
| پروژه Production بلندمدت | بله | شاخه LTS با چرخه پشتیبانی طولانی |
| کسی که فقط GUI میخواهد | معمولاً نه | FreePBX سادهتر است |
| کسی که Linux/SIP نمیشناسد | با آموزش و Lab | Asterisk خام نیازمند درک شبکه و Dialplan است |
| پروژه قدیمی وابسته به chan_sip | بعد از Migration | مسیر مدرن روی PJSIP است |
PJSIP در Asterisk چیست و چرا سه بخش endpoint، auth و aor دارد؟
در Asterisk جدید، SIP با res_pjsip مدیریت میشود. برخلاف مدل قدیمی chan_sip که بسیاری از تنظیمات در یک Peer جمع میشد، PJSIP تنظیمات را به Objectهای جدا تقسیم میکند.
برای یک تلفن ساده، سه Object اصلی دارید:
🔹 endpoint: رفتار خود Device؛ Codec، Context، NAT و Policy تماس.
🔹 auth: Username، Password و الگوریتم Authentication.
🔹 aor: Address of Record؛ جایی که Contact ثبتشده Phone نگهداری میشود.
یک Transport هم مشخص میکند SIP روی UDP، TCP، TLS، WS یا WSS از چه Interface و Portی عبور کند.
رابطه را ساده ببینید:
Phone 6001
|
+--> endpoint 6001
| |
| +--> auth6001
| |
| +--> aor 6001
|
+--> transport-udp
مستند رسمی Asterisk تأکید میکند که در بیشتر موارد نام Sectionها آزاد است، اما Endpoint و AoR رابطه مستقیمی با شناسایی SIP URI و Contact دارند. برای Endpointهایی که با Registration وارد میشوند، نامگذاری یکسان Endpoint و AoR معمولاً سادهترین طراحی است.
مرحله ۱: قبل از Config مطمئن شوید res_pjsip فعال است
اگر Asterisk 22 را از Source نصب کردهاید، توصیه رسمی پروژه استفاده از bundled pjproject است. از Asterisk 21 به بعد، pjproject بخش اصلی SIP Stack برای chan_pjsip است و Asterisk آن را بهصورت نسخه تستشده و سازگار Bundle میکند.
نسخه Asterisk:
asterisk -V
و Moduleهای PJSIP:
asterisk -rx "module show like res_pjsip"
برای دیدن قابلیتهای pjproject، مخصوصاً الگوریتمهای Digest جدید:
asterisk -rx "pjproject show buildopts"
مرحله ۲: اولین Transport را بسازید
برای Lab داخلی، سادهترین Transport روی UDP است. فایل اصلی PJSIP معمولاً در مسیر زیر قرار دارد:
/etc/asterisk/pjsip.conf
یک Transport ساده:
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
این Config برای Lab مناسب است. روی Production، Firewall باید Sourceهای مجاز را محدود کند و SIP را بدون نیاز روی کل اینترنت باز نگذارید.
Transport را چطور بررسی کنیم؟
asterisk -rx "pjsip show transports"
نکته مهم: تغییر Transport همیشه مثل Endpoint با Reload ساده رفتار نمیکند. مستند res_pjsip میگوید Transport بهطور پیشفرض reload نمیشود چون میتواند روی تماسهای جاری اثر بگذارد. برای تغییرات مهم Transport، Maintenance Window و Restart کنترلشده را در نظر بگیرید.
مرحله ۳: یک داخلی PJSIP از صفر بسازید
برای داخلی 6001 سه Object تعریف میکنیم. Password نمونه است؛ روی Production حتماً Secret طولانی و تصادفی استفاده کنید.
[6001]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw,alaw
auth=auth6001
aors=6001
direct_media=no
[auth6001]
type=auth
auth_type=digest
username=6001
password=CHANGE-TO-A-LONG-RANDOM-PASSWORD
[6001]
type=aor
max_contacts=1
remove_existing=yes
qualify_frequency=30
این Config چه میگوید؟
🔹 `context=from-internal` تعیین میکند تماس ورودی از این Phone وارد کدام Dialplan Context شود.
🔹 `auth=auth6001` Credential ورودی را به Endpoint وصل میکند.
🔹 `aors=6001` Endpoint را به Contact ثبتشده مرتبط میکند.
🔹 `max_contacts=1` یعنی یک Registration فعال برای این AoR.
🔹 `remove_existing=yes` Registration قدیمی را هنگام ورود Contact جدید جایگزین میکند.
🔹 `qualify_frequency=30` با OPTIONS وضعیت Contact را دورهای بررسی میکند.
مرحله ۴: داخلی دوم را اضافه کنید
[6002]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=ulaw,alaw
auth=auth6002
aors=6002
direct_media=no
[auth6002]
type=auth
auth_type=digest
username=6002
password=CHANGE-TO-ANOTHER-LONG-RANDOM-PASSWORD
[6002]
type=aor
max_contacts=1
remove_existing=yes
qualify_frequency=30
در Phone اول Username را 6001 و در Phone دوم 6002 قرار دهید. Registrar/Server نیز IP یا FQDN Asterisk است.
مرحله ۵: Dialplan را در extensions.conf بسازید
Dialplan در Asterisk مشخص میکند وقتی یک شماره Dial شد چه اتفاقی بیفتد. فایل اصلی معمولاً:
/etc/asterisk/extensions.conf
یک Dialplan ساده برای دو داخلی:
[from-internal]
exten => 6001,1,NoOp(Call to 6001)
same => n,Dial(PJSIP/6001,20)
same => n,Hangup()
exten => 6002,1,NoOp(Call to 6002)
same => n,Dial(PJSIP/6002,20)
same => n,Hangup()
اگر بعداً یک AoR چند Contact داشته باشد، میتوانید از `PJSIP_DIAL_CONTACTS()` استفاده کنید تا همه Contactهای آن AoR Dial شوند.
Dialplan را Reload و Verify کنید
asterisk -rx "dialplan reload"
asterisk -rx "dialplan show from-internal"
مرحله ۶: Registration را Verify کنید
بعد از Save کردن Phoneها، وضعیت Endpointها:
asterisk -rx "pjsip show endpoints"
AoRها:
asterisk -rx "pjsip show aors"
برای یک AoR خاص:
asterisk -rx "pjsip show aor 6001"
اگر Contact زیر AoR دیده نمیشود، Phone Registration کامل نشده است.
مرحله ۷: SIP Logger را برای عیبیابی روشن کنید
برای دیدن REGISTER، INVITE، 401، 200 OK و Headerها:
asterisk -rvvvvv
سپس داخل CLI:
pjsip set logger on
بعد از پایان Troubleshooting:
pjsip set logger off
روی سیستم پرترافیک Logger را بیدلیل روشن نگه ندارید؛ حجم Log میتواند زیاد شود.
مرحله ۸: NAT را درست تنظیم کنید
NAT یکی از مهمترین جاهایی است که PJSIP Config ساده Lab در Production شکست میخورد. اگر Asterisk پشت NAT است، Transport باید Local Network و آدرس Public را بشناسد.
نمونه:
[transport-udp-nat]
type=transport
protocol=udp
bind=0.0.0.0:5060
local_net=192.168.10.0/24
external_signaling_address=203.0.113.10
external_media_address=203.0.113.10
آدرسهای بالا نمونهاند. `203.0.113.10` باید با IP Public واقعی شما جایگزین شود.
مستند رسمی Asterisk توضیح میدهد:
🔹 `local_net` مشخص میکند چه شبکهای داخلی است.
🔹 `external_signaling_address` برای Contact/Via و SIP Signaling استفاده میشود.
🔹 `external_media_address` آدرس Media در SDP را برای مقصدهای بیرونی بازنویسی میکند.
اگر خود Phone پشت NAT است
برای Remote Phoneها این گزینهها معمولاً مهم میشوند:
force_rport=yes
rewrite_contact=yes
rtp_symmetric=yes
direct_media=no
`rewrite_contact` درخواستهای بعدی را به IP/Port واقعی Source میفرستد، `rtp_symmetric` Media را به همان Source دریافتشده برمیگرداند و `force_rport` پاسخ SIP را به Source Port واقعی میفرستد.
همه NAT Optionها را کورکورانه فعال نکنید. اگر Asterisk پشت یک SBC یا SIP Proxy داخلی است، مستند Asterisk میگوید ممکن است external_* و NAT Optionهای Endpoint اصلاً لازم نباشند؛ چون وظیفه NAT Traversal با Proxy است.
مرحله ۹: TLS را برای SIP Signaling فعال کنید
UDP برای شروع Lab ساده است، اما روی محیط واقعی معمولاً باید TLS را بررسی کنید. TLS Signaling را رمز میکند؛ برای خود Media باید SRTP را جداگانه فعال کنید.
نمونه Transport TLS:
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/asterisk/keys/asterisk.crt
priv_key_file=/etc/asterisk/keys/asterisk.key
method=tlsv1_2
گزینههای TLS در res_pjsip شامل `cert_file`، `priv_key_file`، `ca_list_file`، `verify_server`، `verify_client` و `require_client_cert` هستند. اینکه کدام را فعال کنید به این بستگی دارد که Asterisk Server است، Client است یا Mutual TLS میخواهید.
Certificate را قبل از Phone تست کنید
openssl s_client -connect pbx.example.com:5061 -servername pbx.example.com
اگر Certificate Chain یا Hostname مشکل دارد، قبل از Troubleshooting Phone همان مشکل را حل کنید.
مرحله ۱۰: SRTP را برای Media در نظر بگیرید
TLS فقط SIP Signaling را رمز میکند. اگر Audio روی RTP معمولی باشد، Voice Payload همچنان رمز نشده است.
در PJSIP، Endpoint میتواند Media Encryption داشته باشد. یکی از روشهای موجود SDES است:
media_encryption=sdes
سمت Phone یا Provider نیز باید همان روش را پشتیبانی کند. اگر یک سمت SRTP بخواهد و سمت دیگر فقط RTP را قبول کند، Call Setup میتواند با خطای Media Negotiation شکست بخورد.
Asterisk 22 در Authentication چه مزیت جدیدتری دارد؟
از Asterisk 22.2 همراه PJProject 2.15.1، PJSIP علاوه بر MD5 از Digestهای SHA-256 و SHA-512-256 نیز پشتیبانی میکند. البته Phone یا Provider طرف مقابل هم باید الگوریتم را پشتیبانی کند.
برای Endpointی که SHA-256 و MD5 را هر دو Challenge کند:
[auth6001]
type=auth
auth_type=digest
username=6001
password=CHANGE-TO-A-LONG-RANDOM-PASSWORD
supported_algorithms_uas=SHA-256,MD5
برای بررسی Algorithmهای قابل پشتیبانی روی Build خودتان:
asterisk -rx "pjproject show buildopts"
امنیت پایه قبل از بازکردن Asterisk روی اینترنت
یک PJSIP Endpoint با Password ضعیف و Port 5060 باز روی اینترنت، هدف سادهای برای Scannerهاست. حداقل این موارد را رعایت کنید:
🔹 Secretهای طولانی و یکتا برای هر داخلی.
🔹 Firewall با Source IP محدود برای Trunkهای ثابت.
🔹 TLS/SRTP در صورت پشتیبانی Endpointها.
🔹 محدودکردن Context هر Endpoint به حداقل Dial Permission لازم.
🔹 Fail2ban یا Mechanism مشابه در صورت مناسببودن معماری.
🔹 بازنکردن AMI/ARI روی اینترنت بدون ACL، TLS و Authentication مناسب.
Context در Dialplan فقط ابزار Routing نیست؛ یک Boundary امنیتی هم هست. تلفن داخلی نباید مستقیم وارد Contextی شود که هر مقصد و هر Application مدیریتی را اجازه میدهد.
چکلیست تست اولین PJSIP Setup
| تست | دستور/بررسی |
|---|---|
| Asterisk Version | asterisk -V |
| Module PJSIP | module show like res_pjsip |
| Transport | pjsip show transports |
| Endpoint | pjsip show endpoints |
| AoR/Contact | pjsip show aors |
| SIP Trace | pjsip set logger on |
| Dialplan | dialplan show from-internal |
| تماس داخلی | 6001 ↔ 6002 |
| Audio | RTP دوطرفه |
| NAT | Contact و SDP قابل Route |
| TLS | Handshake و Certificate معتبر |
اشتباههای رایج در اولین Config PJSIP
🔹 ساخت Endpoint بدون AoR یا برعکس.
🔹 اشتباهگرفتن `auth` با `outbound_auth`.
🔹 قراردادن Context اشتباه و Fail شدن Dialplan.
🔹 بازکردن SIP روی اینترنت با Password ساده.
🔹 استفاده از Public IP داخل `local_net`.
🔹 فعالکردن NAT Optionها پشت SBC بدون نیاز.
🔹 تصور اینکه TLS یعنی Audio هم رمز شده است.
🔹 تغییر Transport و انتظار Reload بدون اثر جانبی.
برای راهاندازی Asterisk 22 و PJSIP روی سرور کمک میخواهید؟
اگر هدف شما PBX سفارشی، SIP Trunk، PJSIP Endpoint، TLS/SRTP یا اتصال Cisco/Yealink به Asterisk است، بهتر است ابتدا معماری NAT، Portها، Dialplan و Security مشخص شود و بعد Config نوشته شود.
ایرانیکاسرور میتواند برای ساخت سرور آزمایشی، نصب Asterisk 22، راهاندازی PJSIP، Trunk، TLS و عیبیابی SIP/RTP کمک کند.
تماس با پشتیبانی ایرانیکاسرور: 021-91302467
پرسشهای رایج
Asterisk 22 برای Production مناسب است؟
بله. Asterisk 22 یک شاخه LTS و در اکتبر ۲۰۲۶ همچنان Fully Supported است. برای پروژهای که به ثبات چندساله نیاز دارد، انتخاب مناسبی است.
تفاوت endpoint، auth و aor چیست؟
Endpoint رفتار و Policy Device را تعریف میکند، Auth اطلاعات Authentication را نگه میدارد و AoR Contact یا Registrationهای مربوط به آن Endpoint را مدیریت میکند.
برای شروع PJSIP از UDP استفاده کنیم یا TLS؟
برای Lab، UDP سادهتر است. برای Production بهتر است TLS را در کنار Firewall و Certificate معتبر بررسی کنید. TLS فقط Signaling را امن میکند و برای Media باید SRTP جداگانه فعال شود.
برای Phone پشت NAT کدام Optionها مهماند؟
`force_rport`، `rewrite_contact` و `rtp_symmetric` از مهمترین گزینهها هستند. `direct_media=no` نیز کمک میکند Asterisk در Media Path بماند. این گزینهها باید متناسب با Topology اعمال شوند.
آیا Asterisk 22 فقط MD5 را برای SIP Authentication پشتیبانی میکند؟
خیر. از Asterisk 22.2 به بعد همراه PJProject مناسب، SHA-256 و SHA-512-256 هم پشتیبانی میشوند. سازگاری Phone یا Provider طرف مقابل نیز لازم است.
Dialplan Asterisk کجا نوشته میشود؟
Dialplan سنتی در `/etc/asterisk/extensions.conf` قرار دارد. Context، Extension و Priority رفتار تماس را مشخص میکنند و با `dialplan reload` میتوان تغییرات را Reload کرد.
چطور بفهمیم Phone واقعاً Register شده است؟
`pjsip show endpoints` و `pjsip show aors` را بررسی کنید. وجود Contact زیر AoR نشانه مهمی است که Registration انجام شده است.
Asterisk خام بهتر است یا FreePBX؟
اگر کنترل مستقیم Dialplan و PJSIP میخواهید، Asterisk خام مناسبتر است. اگر GUI، مدیریت ساده Extension و Trunk و Moduleهای آماده میخواهید، FreePBX معمولاً انتخاب راحتتری است.
جمعبندی
Asterisk 22 برای مدیران VoIP، توسعهدهندگان و پروژههایی مناسب است که کنترل مستقیم روی SIP، Dialplan، NAT و API میخواهند. چون نسخه LTS است، برای Production جدید هم انتخاب قابلاتکایی محسوب میشود.
برای PJSIP از چهار جزء اصلی شروع کنید: Transport، Endpoint، Auth و AoR. بعد Dialplan را در `extensions.conf` بسازید، Registration را با `pjsip show endpoints` و `pjsip show aors` تأیید کنید و برای Debug از `pjsip set logger on` استفاده کنید.
در Production، NAT، TLS، SRTP، Firewall و Authentication را از ابتدا جزو طراحی بدانید. Config ساده Lab برای اینترنت عمومی کافی نیست و بدون NAT/Security صحیح میتواند هم تماس را خراب کند و هم PBX را در معرض حمله قرار دهد.
برای نصب Asterisk 22 و PJSIP کمک میخواهید؟
اگر قرار است Asterisk روی VPS یا سرور اختصاصی قرار بگیرد، قبل از بازکردن SIP روی اینترنت بهتر است Firewall، Public IP، NAT، RTP Range، TLS و Trunk Provider دقیق طراحی شوند.
تماس با پشتیبانی ایرانیکاسرور: 021-91302467






دیدگاهها (۰)