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

Asterisk 22 برای چه کسانی مناسب است؟ آموزش راه‌اندازی PJSIP از صفر

Asterisk 22 برای کسی مناسب است که می‌خواهد یک هسته VoIP قابل‌کنترل، سبک و قابل‌برنامه‌ریزی داشته باشد؛ نه الزاماً یک پنل آماده مثل FreePBX. اگر می‌خواهید Dialplan را خودتان بنویسید، رفتار SIP را دقیق…

Asterisk 22 برای چه کسانی مناسب است؟ آموزش راه‌اندازی PJSIP از صفر
خلاصه سریع این آموزش

Asterisk 22 برای کسی مناسب است که می‌خواهد یک هسته VoIP قابل‌کنترل، سبک و قابل‌برنامه‌ریزی داشته باشد؛ نه الزاماً یک پنل آماده مثل FreePBX. اگر می‌خواهید Dialplan را خودتان بنویسید،…

۱۲ دقیقه مطالعه ۰ دیدگاه ۲۶ مهر ۱۴۰۵ آخرین به‌روزرسانی

Asterisk 22 برای کسی مناسب است که می‌خواهد یک هسته VoIP قابل‌کنترل، سبک و قابل‌برنامه‌ریزی داشته باشد؛ نه الزاماً یک پنل آماده مثل FreePBX. اگر می‌خواهید Dialplan را خودتان بنویسید، رفتار SIP را دقیق کنترل کنید، PJSIP را مستقیماً مدیریت کنید، با AMI/ARI یکپارچه‌سازی بسازید یا PBX/SBC سفارشی راه‌اندازی کنید، Asterisk 22 یکی از بهترین شاخه‌های فعلی برای Production است.

دلیل مهم این انتخاب، وضعیت نسخه است. Asterisk 22 یک نسخه LTS است و طبق جدول رسمی پروژه، تا ۱۶ اکتبر ۲۰۲۸ در دوره Full Support و تا ۱۶ اکتبر ۲۰۲۹ در دوره Security Fix قرار دارد. در اکتبر ۲۰۲۶، شاخه 22 همچنان Fully Supported است و برای کسی که ثبات چندساله می‌خواهد، انتخاب منطقی‌تری از شاخه‌های Standard کوتاه‌عمرتر محسوب می‌شود.

خلاصه: اگر 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 خام برای کنترل بیشتر؛ FreePBX برای مدیریت ساده‌تر

برای راه‌اندازی 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، NAT، TLS، Authentication و Dialplan این مقاله با مستندات رسمی پروژه Asterisk بررسی شده‌اند.
Asterisk Versions
مرجع LTS بودن Asterisk 22 و چرخه Full Support و Security Maintenance.
PJSIP Architecture
مرجع رسمی Endpoint، Auth، AoR، Transport و رابطه Objectها در res_pjsip.
PJSIP Examples
نمونه‌های رسمی Phone Registration و ساخت Endpoint/Auth/AoR در pjsip.conf.
Asterisk NAT
مرجع local_net، external_media_address، external_signaling_address، force_rport، rewrite_contact و rtp_symmetric.
Asterisk TLS/SRTP
مرجع Transport TLS، Certificateها و Media Encryption در PJSIP.
PJSIP Authentication
مرجع Digest Authentication و پشتیبانی SHA-256 و SHA-512-256 در Asterisk 22.2 و نسخه‌های جدیدتر.
Asterisk Dialplan
مرجع extensions.conf، Contextها و Reload کردن Dialplan.
از دو داخلی ساده شروع کنید، بعد NAT و TLS را اضافه کنید

برای نصب Asterisk 22 و PJSIP کمک می‌خواهید؟

اگر قرار است Asterisk روی VPS یا سرور اختصاصی قرار بگیرد، قبل از بازکردن SIP روی اینترنت بهتر است Firewall، Public IP، NAT، RTP Range، TLS و Trunk Provider دقیق طراحی شوند.

تماس با پشتیبانی ایرانیکاسرور: 021-91302467

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

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

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

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

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