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

چرا PJSIP در Asterisk رجیستر نمی‌شود؟ علت و روش رفع خطاهای 401 و 403

اگر داخلی PJSIP در Asterisk روی حالت Not Registered مانده است، تغییر مداوم Password یا ساخت دوباره Extension معمولاً سریع‌ترین راه حل نیست. در PJSIP باید مشخص کنید REGISTER اصلاً به Asterisk رسیده یا…

چرا PJSIP در Asterisk رجیستر نمی‌شود؟ علت و روش رفع خطاهای 401 و 403
خلاصه سریع این آموزش

اگر داخلی PJSIP در Asterisk روی حالت Not Registered مانده است، تغییر مداوم Password یا ساخت دوباره Extension معمولاً سریع‌ترین راه حل نیست. در PJSIP باید مشخص کنید REGISTER اصلاً…

۱۹ دقیقه مطالعه ۰ دیدگاه ۲۵ مهر ۱۴۰۵ آخرین به‌روزرسانی
اگر داخلی PJSIP در Asterisk روی حالت Not Registered مانده است، تغییر مداوم Password یا ساخت دوباره Extension معمولاً سریع‌ترین راه حل نیست. در PJSIP باید مشخص کنید REGISTER اصلاً به Asterisk رسیده یا نه، Asterisk آن را به کدام Endpoint نسبت داده، Authentication در چه مرحله‌ای شکست خورده، AOR اجازه ساخت Contact دارد یا نه و Transport/NAT چه تغییری در Source IP و Contact Header ایجاد کرده‌اند.

بهترین ابزار برای این کار داخل خود Asterisk قرار دارد:

pjsip set logger on

این دستور SIP Messageهایی را که Asterisk دریافت و ارسال می‌کند در CLI نشان می‌دهد و به‌جای حدس می‌توان دقیقاً دید REGISTER چه Username، Domain، Contact، Authorization و Transportی دارد و Asterisk چه Responseی برمی‌گرداند.

در این آموزش یک روش استاندارد برای خطای PJSIP registration failed می‌سازیم: ابتدا Reachability و Transport، بعد Endpoint Identification، سپس 401 و Authentication، بعد AOR و 403 و در آخر NAT و TLS را بررسی می‌کنیم.

قاعده تشخیص: REGISTER → Endpoint Identification → 401 Challenge → REGISTER + Authorization → AOR/Contact → 200 OK. هرجا این زنجیره قطع شود، همان‌جا نقطه شروع رفع مشکل است.

فهرست مطالب

اول مشخص کنیم کدام Registration خراب است

در Asterisk دو سناریوی متفاوت با واژه Registration داریم.

سناریوی اول: یک IP Phone، Softphone یا ATA می‌خواهد روی Asterisk Register شود.

در این حالت Asterisk نقش Registrar را دارد.

سناریوی دوم: خود Asterisk می‌خواهد به SIP Provider یا Registrar دیگری Register شود.

در این حالت Asterisk Client یا UAC است.

این مقاله ابتدا حالت اول یعنی رجیستر نشدن داخلی را بررسی می‌کند و در بخش پایانی Outbound Registration به Provider را نیز جدا می‌کنیم.

Flow سالم Registration در PJSIP چگونه است؟

برای یک داخلی دارای Digest Authentication معمولاً Flow شبیه این است:

Phone -> Asterisk
REGISTER

Asterisk -> Phone
401 Unauthorized
WWW-Authenticate: Digest ...

Phone -> Asterisk
REGISTER
Authorization: Digest ...

Asterisk -> Phone
200 OK

بنابراین دیدن یک 401 اول کاملاً طبیعی است.

401 اول خطا نیست

یکی از اشتباه‌های رایج در عیب‌یابی PJSIP این است که Administrator اولین:

SIP/2.0 401 Unauthorized

را می‌بیند و فوراً Password را تغییر می‌دهد.

در SIP Digest Authentication، 401 اولیه Challenge است.

سؤال مهم این است:

بعد از 401 چه اتفاقی می‌افتد؟

روش استاندارد شروع عیب‌یابی

وارد Asterisk CLI شوید:

asterisk -rvvv

سپس:

core set verbose 5
core set debug 5
pjsip set logger on

حالا فقط یک بار Registration را روی Phone تکرار کنید.

بعد از ثبت مشکل Logger را خاموش کنید:

pjsip set logger off
core set debug 0
core set verbose 0

چرا Logger را همیشه روشن نگذاریم؟

SIP Logger می‌تواند اطلاعاتی مثل SIP URI، IP، شماره داخلی، Headerها و Authentication Metadata را ثبت کند.

روی PBX شلوغ حجم Log نیز بسیار سریع افزایش پیدا می‌کند.

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

مرحله ۱: آیا REGISTER اصلاً به Asterisk می‌رسد؟

بعد از:

pjsip set logger on

Phone را Register کنید.

اگر هیچ REGISTERای در CLI ظاهر نمی‌شود، Password و AOR فعلاً موضوع اصلی نیستند.

این موارد را بررسی کنید:

🔹 SIP Server تلفن درست است؟

🔹 DNS درست Resolve می‌شود؟

🔹 SIP Port درست است؟

🔹 Phone روی UDP، TCP یا TLS تنظیم شده؟

🔹 Asterisk روی همان Transport گوش می‌دهد؟

🔹 Firewall Packet را قبل از Asterisk Drop نمی‌کند؟

🔹 Route رفت و برگشت سالم است؟

Transportهای فعال را ببینید

pjsip show transports

مثلاً انتظار دارید چیزی شبیه:

transport-udp   udp   0.0.0.0:5060

داشته باشید.

Phone روی TCP است ولی Asterisk فقط UDP دارد

در این حالت ممکن است Phone بارها تلاش کند اما PJSIP Logger هیچ SIP Messageای نشان ندهد.

Transport نمونه UDP:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

TCP:

[transport-tcp]
type=transport
protocol=tcp
bind=0.0.0.0:5060

تغییر Transport با Reload معمولی همیشه اعمال نمی‌شود

در PJSIP، Transport Configuration به‌طور معمول با Reload ساده تغییر نمی‌کند.

اگر Transport را تغییر داده‌اید، برای اعمال کامل آن ممکن است Restart کنترل‌شده Asterisk لازم باشد.

systemctl restart asterisk

روی Production این دستور تماس‌های فعال را قطع می‌کند. آن را فقط در Maintenance Window اجرا کنید.

مرحله ۲: Endpoint واقعاً Load شده است؟

قبل از بررسی Authentication مطمئن شوید Endpoint وجود دارد.

pjsip show endpoint 1001

اگر:

Unable to find object 1001

می‌بینید، Password تلفن را تغییر ندهید.

Endpoint اصلاً با این نام در PJSIP Load نشده است.

Endpoint سالم چه ارتباط‌هایی باید داشته باشد؟

خروجی:

pjsip show endpoint 1001

را برای این موارد بررسی کنید:

🔹 InAuth

🔹 Aor

🔹 Transport

🔹 Identify در صورت استفاده

🔹 Context

اگر InAuth وجود ندارد، Asterisk آن Endpoint را دارای Authentication ورودی نمی‌بیند.

Configuration پایه صحیح یک داخلی

[1001]
type=endpoint
transport=transport-udp
context=from-internal
disallow=all
allow=alaw,ulaw
auth=1001-auth
aors=1001
direct_media=no

[1001-auth]
type=auth
auth_type=userpass
username=1001
password=REPLACE-WITH-A-LONG-RANDOM-PASSWORD

[1001]
type=aor
max_contacts=1
remove_existing=yes

مرحله ۳: Asterisk چگونه Endpoint را شناسایی می‌کند؟

قبل از Authentication، Asterisk باید بفهمد Request متعلق به کدام Endpoint است.

در PJSIP این فرآیند Endpoint Identification نام دارد.

روش‌های مهم شامل:

🔹 username

🔹 auth_username

🔹 ip

🔹 header

🔹 request_uri در Identify Objectهای جدیدتر

هستند.

Identifierهای فعال را ببینید

pjsip show identifiers

ترتیب Identifierها نیز مهم است.

Default فعلی Asterisk در Global Configuration:

endpoint_identifier_order=ip,username,anonymous

است، مگر اینکه Configuration شما آن را تغییر داده باشد.

identify_by برای Registration اهمیت ویژه دارد

در Endpoint می‌توان تعیین کرد Asterisk آن را با چه روش‌هایی شناسایی کند.

مثلاً برای داخلی ساده:

identify_by=username

منطقی است.

در Registration یک نکته ظریف وجود دارد: روش Identification باید بتواند AOR را نیز مشخص کند؛ وگرنه خود Endpoint ممکن است قابل شناسایی باشد ولی REGISTER نتواند به AOR مناسب متصل شود.

Username تلفن با نام Endpoint هماهنگ نیست

فرض کنید Endpoint شما:

[1001]

است، اما Phone REGISTER را با:

From: <sip:2001@pbx.example.com>

می‌فرستد.

اگر روش Identification شما بر Username تکیه دارد، احتمالاً Endpoint 1001 Match نمی‌شود.

نکته مهم: 401 می‌تواند علامت Endpoint اشتباه باشد

Asterisk برای جلوگیری از افشای وجود Endpointها، حتی وقتی Request به هیچ Endpoint واقعی Match نشده باشد می‌تواند یک Challenge ظاهراً معتبر 401 برگرداند.

این یعنی Flow زیر:

REGISTER
401 Unauthorized

به‌تنهایی ثابت نمی‌کند Asterisk داخلی 1001 را پیدا کرده است.

در Log دنبال چه پیام‌هایی بگردیم؟

اگر مفهوم پیام‌هایی شبیه این را می‌بینید:

Could not identify endpoint by username
No matching endpoint found

مشکل Password را فعلاً کنار بگذارید.

Endpoint Identification شکست خورده است.

auth_username چه زمانی مفید است؟

گاهی User داخل From با Authentication Username متفاوت است.

در چنین معماری‌ای می‌توان:

identify_by=username,auth_username

را بررسی کرد.

اما این روش یک نکته امنیتی دارد: Authorization Header در اولین REGISTER وجود ندارد و فقط بعد از 401 ایجاد می‌شود، بنابراین Identification مبتنی بر auth_username دیرتر انجام می‌شود.

بدون نیاز واقعی، Identifierها را پیچیده نکنید.

type=identify بیشتر برای چه چیزی استفاده می‌شود؟

بخش:

type=identify

معمولاً برای نسبت‌دادن ترافیک ورودی از یک SIP Provider یا Gateway به Endpoint مشخص استفاده می‌شود.

مثلاً:

[provider-identify]
type=identify
endpoint=provider
match=198.51.100.0/24

برای یک IP Phone که خودش روی Asterisk Register می‌شود، معمولاً Username/Auth-based Identification مهم‌تر از IP ثابت است؛ چون IP Phone ممکن است DHCP یا NAT داشته باشد.

مرحله ۴: حالا Authentication را بررسی کنید

اگر Endpoint درست شناسایی شده، به مرحله Authentication می‌رسیم.

خروجی:

pjsip show endpoint 1001

باید بخش InAuth را نشان دهد.

مثلاً:

InAuth: 1001-auth/1001

اگر InAuth دیده نمی‌شود

Endpoint ممکن است:

🔹 اصلاً `auth=` نداشته باشد.

🔹 نام Auth Object اشتباه باشد.

🔹 Auth Object Load نشده باشد.

🔹 Configuration Syntax Error داشته باشد.

REGISTER دوم باید Authorization داشته باشد

بعد از 401، Phone باید REGISTER دوم را با Header مشابه:

Authorization: Digest username="1001", ...

ارسال کند.

اگر Phone بعد از 401 دیگر REGISTER نفرستد، احتمالاً خود Client Authentication Challenge را قبول نکرده است.

401 پشت سر هم چه معنی دارد؟

اگر این Flow تکرار می‌شود:

REGISTER
401

REGISTER + Authorization
401

REGISTER + Authorization
401

این موارد را بررسی کنید:

🔹 Password تلفن و Asterisk یکسان است؟

🔹 Auth Username دقیقاً درست است؟

🔹 Realm همان چیزی است که Client انتظار دارد؟

🔹 Endpoint واقعاً Match شده یا 401 ساختگی Endpoint ناشناس است؟

🔹 Algorithm احراز هویت در هر دو سمت مشترک است؟

Asterisk 22 فقط MD5 نیست

از Asterisk 22.2 به بعد، در صورت وجود PJProject و OpenSSL مناسب، PJSIP می‌تواند Digestهای:

🔹 MD5

🔹 SHA-256

🔹 SHA-512-256

را پشتیبانی کند.

اما Default همچنان MD5 است مگر Configuration شما تغییر کند.

قابلیت Build فعلی را ببینید:

pjproject show buildopts

اگر Phone قدیمی است، قبل از اجبار SHA-256 مطمئن شوید آن را پشتیبانی می‌کند.

مرحله ۵: AOR را بررسی کنید

حتی Endpoint و Auth صحیح هم بدون AOR قابل‌رجیستر نیستند.

pjsip show aor 1001

max_contacts یکی از علت‌های واقعی 403 است

برای Registration دینامیک، AOR باید اجازه ایجاد Contact داشته باشد.

مثلاً:

[1001]
type=aor
max_contacts=1

اگر `max_contacts` صفر بماند یا برای Registration قابل استفاده نباشد، Asterisk می‌تواند REGISTER را با 403 رد کند.

403 به دلیل پرشدن Contactها

فرض کنید:

max_contacts=1

دارید و یک Contact قدیمی هنوز روی AOR باقی مانده است.

Registration جدید ممکن است ظرفیت AOR را پر کند و 403 بگیرد.

Contactها را ببینید:

pjsip show contacts

رفتار شبیه chan_sip برای یک دستگاه

اگر یک داخلی فقط باید یک Phone داشته باشد، ترکیب رایج:

max_contacts=1
remove_existing=yes

است.

Registration جدید در صورت نیاز Contact قدیمی را جایگزین می‌کند.

rewrite_contact و max_contacts می‌توانند با هم اثر داشته باشند

در NAT ممکن است Source Port تلفن با هر Registration تغییر کند.

وقتی:

rewrite_contact=yes

دارید، Asterisk Source IP/Port واقعی را به‌عنوان Contact در نظر می‌گیرد.

اگر NAT هر بار Source Port جدید بسازد، Contact جدید ممکن است با Contact قبلی متفاوت دیده شود.

در این حالت `remove_existing=yes` می‌تواند برای داخلی تک‌دستگاهی مفید باشد.

مرحله ۶: NAT را درست از Registration جدا کنیم

سه گزینه‌ای که معمولاً برای Remote Endpoint دیده می‌شوند:

force_rport=yes
rewrite_contact=yes
rtp_symmetric=yes

اما هر سه یک کار نمی‌کنند.

force_rport

SIP Response را به IP و Port واقعی‌ای برمی‌گرداند که Request از آن آمده است.

برای Phone پشت NAT اهمیت مستقیم در SIP دارد.

rewrite_contact

به‌جای اعتماد به Contact Header خصوصی یا اشتباه Phone، Source IP و Port واقعی Request را برای درخواست‌های بعدی استفاده می‌کند.

این گزینه نیز مستقیماً به Signaling و Registration مربوط است.

rtp_symmetric

این گزینه مربوط به Media است.

RTP را به همان IP/Portی می‌فرستد که Media از آن دریافت شده است.

اگر مشکل شما فقط REGISTER است، تغییر rtp_symmetric قرار نیست Password یا Endpoint Identification را درست کند.

نمونه Endpoint پشت NAT

[1001]
type=endpoint
transport=transport-udp
context=from-internal

disallow=all
allow=alaw,ulaw

auth=1001-auth
aors=1001

direct_media=no
force_rport=yes
rewrite_contact=yes
rtp_symmetric=yes

[1001-auth]
type=auth
auth_type=userpass
username=1001
password=USE-A-LONG-RANDOM-PASSWORD

[1001]
type=aor
max_contacts=1
remove_existing=yes
qualify_frequency=30

اگر خود Asterisk پشت NAT است

حالا مسئله Transport نیز مهم می‌شود.

نمونه:

[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060

local_net=10.10.0.0/16
external_signaling_address=203.0.113.20
external_media_address=203.0.113.20

IPها نمونه مستندسازی هستند.

این تنظیم بیشتر برای درست‌شدن SIP/SDP آدرس‌های خروجی Asterisk است.

Registration داخلی با IP خصوصی در Contact همیشه مشکل نیست

اگر Phone داخل همان LAN است، Contact خصوصی کاملاً طبیعی است.

حتی برای Phone پشت NAT، اگر `rewrite_contact=yes` دارید، Asterisk می‌تواند Source Address واقعی را ذخیره کند.

فقط به‌خاطر دیدن 192.168.x.x در یک SIP Header NAT Optionها را تصادفی فعال نکنید.

مرحله ۷: TLS Registration را جدا بررسی کنیم

اگر Phone روی TLS است، Transport باید واقعاً TLS Listener داشته باشد.

نمونه:

[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0:5061

cert_file=/etc/asterisk/keys/pbx.crt
priv_key_file=/etc/asterisk/keys/pbx.key
method=tlsv1_2

اگر TLS Handshake اصلاً کامل نشود، هنوز به SIP Authentication نرسیده‌اید.

مزیت pjsip set logger روی TLS

در Packet Capture شبکه، SIP داخل TLS رمز شده و به‌صورت Plaintext دیده نمی‌شود.

اما داخل خود Asterisk، PJSIP Logger در سطح SIP Stack کار می‌کند و بعد از Terminate شدن TLS می‌تواند SIP Messageهایی را که Asterisk پردازش می‌کند نشان دهد.

به همین دلیل برای مشکل Registration روی TLS، ترکیب:

TLS/network diagnostics + pjsip set logger

بسیار مفید است.

Phone TLS Connection می‌سازد ولی REGISTER نمی‌فرستد

در این حالت Transport و Certificate تا حدی جلو رفته‌اند ولی Client هنوز SIP Registration را شروع نکرده است.

مواردی مثل:

🔹 SIP Account Disabled

🔹 Registrar اشتباه

🔹 Client-side Certificate Policy

🔹 SIP Port اشتباه

🔹 Provisioning ناقص

را بررسی کنید.

ماژول Registrar Load شده است؟

برای دریافت REGISTER داخلی‌ها:

module show like res_pjsip_registrar.so

باید Status فعال نشان داده شود.

اگر Registrar Module وجود ندارد، Asterisk نمی‌تواند Registration دینامیک Endpoint را طبق انتظار پردازش کند.

Identify Module برای IP Matching

برای Trunkها یا Endpointهایی که با IP Identify می‌شوند:

module show like res_pjsip_endpoint_identifier_ip.so

را بررسی کنید.

یک روش سریع برای تشخیص 401

Flow برداشت احتمالی
REGISTER → 401 → REGISTER+Auth → 200 کاملاً طبیعی
REGISTER → 401 و Client متوقف می‌شود Client/Auth Configuration
REGISTER → 401 → REGISTER+Auth → 401 Credential/Realm/Algorithm یا Endpoint Match
REGISTER → 401 همراه No matching endpoint Endpoint Identification

یک روش سریع برای تشخیص 403

نشانه CLI مظنون اصلی
AOR has no configured max_contacts تنظیم AOR
Registration will exceed max contacts Contact قدیمی یا max_contacts کم
403 از Provider در Outbound Registration Provider Policy/Credential/Account

403 را با Password اشتباه نگیریم

در Registration داخلی Asterisk، 403 می‌تواند بعد از Authentication و در مرحله Registrar/AOR اتفاق بیفتد.

پس اگر Logger صریحاً می‌گوید:

Registration attempt ... will exceed max contacts

تغییر Password هیچ ارتباطی با علت اصلی ندارد.

qualify_frequency به Registration کمک می‌کند؟

پارامتر:

qualify_frequency=30

باعث می‌شود Asterisk به Contact دوره‌ای OPTIONS بفرستد و Availability را بررسی کند.

اما Qualify مشکل Password یا Endpoint Identification را حل نمی‌کند.

این قابلیت بیشتر برای تشخیص زنده‌بودن Contact پس از Registration مفید است.

Contact وجود دارد ولی Endpoint Unavailable است

این حالت با «Register نشده» یکسان نیست.

اگر:

pjsip show contacts

Contact دارد ولی Status آن Unavailable است، OPTIONS Qualify پاسخ نگرفته است.

حالا Firewall، NAT Mapping یا Offline شدن Phone را بررسی کنید.

Registration سالم است؟ این سه فرمان باید منطقی باشند

pjsip show endpoint 1001
pjsip show aor 1001
pjsip show contacts

انتظار داریم:

Endpoint → Auth و AOR صحیح داشته باشد.

AOR → Contact فعال داشته باشد.

Contact → IP/Port مورد انتظار Phone را نشان دهد.

اگر IP Contact عجیب است

مثلاً Phone پشت NAT است و Asterisk چنین Contactی ذخیره کرده:

sip:1001@192.168.1.50:5060

در حالی که Asterisk روی اینترنت است.

در این حالت `rewrite_contact=yes` را بررسی کنید.

بعد از Registration جدید Contact باید بر اساس Source قابل دسترس Asterisk ساخته شود.

SIP ALG را نیز در Router بررسی کنید

برخی Routerها SIP Headerها را در مسیر دست‌کاری می‌کنند.

این رفتار می‌تواند Contact، Via یا Port را تغییر دهد و باعث Registration ناپایدار شود.

اگر Logger نشان می‌دهد Headerهایی که Phone ارسال می‌کند با چیزی که انتظار دارید هماهنگ نیستند، Capture در دو طرف Router می‌تواند مشخص کند آیا SIP ALG در مسیر دخالت کرده است.

اما SIP ALG را بدون مدرک مقصر ندانید

مشکلات زیادی به SIP ALG نسبت داده می‌شوند در حالی که علت واقعی:

🔹 Endpoint اشتباه

🔹 max_contacts

🔹 Firewall

🔹 Transport

🔹 Password

است.

Logger و PCAP باید تغییر Header را ثابت کنند.

اگر خود Asterisk به Provider رجیستر نمی‌شود

این حالت با داخلی متفاوت است.

ابتدا:

pjsip show registrations

را اجرا کنید.

Status می‌تواند مواردی مثل Registered، Unregistered، Rejected یا وضعیت‌های مشابه نشان دهد.

نمونه Outbound Registration

[provider-registration]
type=registration
transport=transport-udp
outbound_auth=provider-auth

server_uri=sip:sip.provider.example
client_uri=sip:USERNAME@sip.provider.example

retry_interval=60

401 در Outbound Registration

برای Provider نیز 401 اول می‌تواند Challenge طبیعی باشد.

Asterisk باید REGISTER دوم را با Authorization بفرستد.

اگر Provider همچنان Authentication را Reject می‌کند، بررسی کنید:

🔹 username

🔹 password

🔹 realm

🔹 client_uri

🔹 server_uri

🔹 Auth Algorithm

403 از Provider رفتار متفاوتی دارد

در Outbound Registration، 403 معمولاً یعنی Registrar درخواست را Forbidden کرده است.

PJSIP برای Outbound Registration گزینه:

forbidden_retry_interval

دارد.

اگر مقدار آن صفر باشد، Asterisk بعد از 403 به‌صورت خودکار Retry نمی‌کند.

قبل از افزایش این مقدار، علت 403 را از Provider پیدا کنید؛ Retry مداوم یک Account واقعاً Forbidden راه‌حل نیست.

یک Test Plan ده‌مرحله‌ای برای PJSIP registration failed

مرحله ۱: `pjsip set logger on` را فعال کنید.

مرحله ۲: Phone را یک بار Register کنید.

مرحله ۳: اگر REGISTER نمی‌آید، Transport/Firewall/DNS را بررسی کنید.

مرحله ۴: `pjsip show endpoint 1001` را بررسی کنید.

مرحله ۵: Endpoint Identification و Usernameهای SIP را مقایسه کنید.

مرحله ۶: 401 اول را طبیعی فرض کنید و REGISTER دوم را ببینید.

مرحله ۷: Authorization Username و Password/Realm را بررسی کنید.

مرحله ۸: `pjsip show aor 1001` و `max_contacts` را بررسی کنید.

مرحله ۹: Contact و NAT Source IP/Port را بررسی کنید.

مرحله ۱۰: بعد از 200 OK، Qualify و تماس واقعی را تست کنید.

جدول تشخیص سریع

علامت مظنون اول ابزار تأیید
هیچ REGISTERی در Logger نیست Transport/Firewall/DNS pjsip show transports + PCAP
REGISTER → 401 → 200 مشکلی نیست SIP Logger
401 و No matching endpoint Endpoint Identification pjsip show endpoint / identifiers
401 تکراری بعد از Authorization Auth/Realm/Algorithm SIP Logger + InAuth
403 + no max_contacts AOR pjsip show aor
403 + exceed max contacts Contact قدیمی pjsip show contacts
Register می‌شود و سریع Unavailable می‌شود NAT/Firewall/Qualify OPTIONS + Contact
TLS Connection ندارد Port/Certificate/Transport TLS diagnostics
Asterisk به Provider رجیستر نیست Outbound Registration pjsip show registrations

چه زمانی Packet Capture لازم می‌شود؟

`pjsip set logger` برای SIP فوق‌العاده است، اما اگر شک دارید Packet اصلاً به Asterisk نمی‌رسد یا Router چیزی را در مسیر تغییر می‌دهد، PCAP لازم می‌شود.

برای UDP SIP نمونه:

tcpdump -ni any udp port 5060

برای ذخیره فایل:

tcpdump -ni any udp port 5060 -w /tmp/pjsip-register.pcap

فایل PCAP ممکن است اطلاعات حساس داشته باشد؛ بعد از عیب‌یابی آن را از مسیر موقت رها نکنید.

Factory Reset تلفن لازم است؟

تقریباً هیچ‌کدام از خطاهای رایج بالا در قدم اول به Factory Reset نیاز ندارند.

اگر Asterisk صریحاً 403 به دلیل max_contacts می‌دهد، Reset Phone چیزی را در AOR اصلاح نمی‌کند.

اگر Endpoint Match نمی‌شود، Reset نیز نام Endpoint را عوض نمی‌کند.

اگر Firewall UDP/5060 را Drop می‌کند، Reset تأثیری ندارد.

ابتدا SIP Flow را ذخیره کنید و علت را ثابت کنید.

Configuration پیشنهادی ساده برای داخلی Remote

برای یک داخلی معمولی پشت NAT که فقط یک Device دارد:

[1001]
type=endpoint
transport=transport-udp
context=from-internal

disallow=all
allow=alaw,ulaw

auth=1001-auth
aors=1001
identify_by=username

direct_media=no
force_rport=yes
rewrite_contact=yes
rtp_symmetric=yes

[1001-auth]
type=auth
auth_type=userpass
username=1001
password=REPLACE-WITH-A-UNIQUE-RANDOM-PASSWORD

[1001]
type=aor
max_contacts=1
remove_existing=yes
qualify_frequency=30

این Config یک Baseline آموزشی است، نه نسخه مناسب برای همه شبکه‌ها.

اگر Endpoint روی LAN است، SBC دارید، چند Device روی یک داخلی دارید یا TLS استفاده می‌کنید، Configuration باید متناسب با همان معماری تغییر کند.

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

آیا 401 Unauthorized در PJSIP یعنی Password اشتباه است؟

خیر. اولین 401 معمولاً Challenge طبیعی Digest Authentication است. همچنین Asterisk ممکن است وقتی Endpoint اصلاً Match نشده یک Challenge ساختگی بفرستد تا اطلاعات Endpointها افشا نشود.

چرا بعد از 401 دوباره 401 می‌گیرم؟

Auth Username، Password، Realm و Digest Algorithm را بررسی کنید؛ هم‌زمان Log را ببینید تا مطمئن شوید Endpoint واقعی شناسایی شده و با یک 401 Dummy روبه‌رو نیستید.

403 هنگام REGISTER در Asterisk چه معنی دارد؟

یکی از علت‌های مهم در PJSIP این است که AOR مقدار مناسب max_contacts ندارد یا Registration جدید از ظرفیت Contactهای مجاز عبور می‌کند.

چطور بفهمم داخلی واقعاً Register شده است؟

`pjsip show aor 1001` و `pjsip show contacts` را بررسی کنید. وجود Contact معتبر و دریافت 200 OK برای REGISTER مهم‌ترین نشانه‌های موفقیت‌اند.

فرق Endpoint و AOR در خطای Registration چیست؟

Endpoint رفتار SIP و Auth را به هم متصل می‌کند؛ AOR محل ثبت Contact دستگاه است. ممکن است Endpoint صحیح باشد ولی AOR اجازه ثبت Contact ندهد و Registration با 403 شکست بخورد.

برای Phone پشت NAT چه گزینه‌هایی مهم‌اند؟

برای Signaling معمولاً `force_rport` و `rewrite_contact` مهم‌اند. `rtp_symmetric` مربوط به Media است و مشکل Authentication REGISTER را حل نمی‌کند.

چرا Phone اصلاً در pjsip set logger دیده نمی‌شود؟

Transport، IP/Hostname سرور، SIP Port، DNS، Firewall و Route را بررسی کنید. اگر Packet قبل از رسیدن به Asterisk Drop شود، PJSIP Logger چیزی برای نمایش ندارد.

آیا تغییر Transport با pjsip reload کافی است؟

Transport Configuration معمولاً با Reload کامل اعمال نمی‌شود و برای تغییر Transport ممکن است Restart کنترل‌شده Asterisk لازم باشد.

اگر خود Asterisk به Provider رجیستر نمی‌شود چه فرمانی بزنیم؟

از `pjsip show registrations` برای مشاهده Outbound Registrationها استفاده کنید و هم‌زمان `pjsip set logger on` را برای مشاهده REGISTER و Response Provider فعال کنید.

جمع‌بندی

وقتی یک داخلی PJSIP Register نمی‌شود، عیب‌یابی را از Password شروع نکنید. اول ببینید REGISTER اصلاً به Asterisk رسیده است یا نه.

اگر رسیده، Endpoint Identification را بررسی کنید؛ چون حتی 401 هم لزوماً ثابت نمی‌کند Endpoint درست پیدا شده است.

بعد از Endpoint صحیح، Authorization را بررسی کنید و مطمئن شوید REGISTER دوم Credential مناسب دارد.

اگر Authentication جلو رفته ولی 403 دارید، AOR، max_contacts و Contactهای موجود را ببینید.

در Endpointهای Remote، NAT را با force_rport و rewrite_contact تحلیل کنید و rtp_symmetric را با Registration اشتباه نگیرید؛ این گزینه بیشتر مربوط به Media است.

در نهایت، `pjsip set logger on`، `pjsip show endpoint`، `pjsip show aor`، `pjsip show contacts`، `pjsip show transports` و در صورت نیاز Packet Capture مجموعه ابزارهایی هستند که تقریباً هر Registration Failure را از حالت حدس به یک خطای قابل اثبات تبدیل می‌کنند.

منابع و مستندات
رفتار 401 و 403، Endpoint Identification، AOR، NAT، Transport و Logger با مستندات رسمی Asterisk 22 تا ۱۷ اکتبر ۲۰۲۶ بررسی شده‌اند.
Asterisk Troubleshooting
مرجع اصلی Endpoint Identification، 401 ساختگی برای Endpoint ناشناس، InAuth، Registrar و خطای 403 ناشی از max_contacts
Asterisk Logging
مرجع رسمی استفاده از pjsip set logger on، افزایش Verbose/Debug و خاموش‌کردن Debug بعد از بازتولید خطا
PJSIP Reference
مرجع identify_by، endpoint_identifier_order، max_contacts، remove_existing، Transport و قابلیت‌های فعلی PJSIP
PJSIP NAT
مرجع رسمی force_rport، rewrite_contact، rtp_symmetric، direct_media و تنظیم External Addressهای Transport
Endpoint Identify
مرجع type=identify، match، match_header و نسبت‌دادن ترافیک ورودی به Endpoint بر اساس IP یا معیارهای دیگر
Outbound Registration
مرجع pjsip show registrations، server_uri، client_uri، outbound_auth و ثبت Asterisk روی SIP Provider
Asterisk 2026
مرجع نسخه پایدار فعلی Asterisk 22.11.0؛ شاخه 22.12 در زمان بررسی هنوز Release Candidate است
پیشنهاد ایرانیکاسرور برای Asterisk و PJSIP

داخلی روی شبکه داخلی رجیستر می‌شود، اما کاربران راه‌دور و SIP Trunk مرتب قطع می‌شوند؟

در PBX اینترنتی، Registration فقط به Username و Password وابسته نیست. IP ثابت سرور، NAT، Firewall، Transport و مسیر شبکه نیز مستقیماً روی پایداری PJSIP اثر دارند.

اگر قصد دارید Asterisk 22 را برای تلفن‌های سازمانی یا SIP Trunk روی سرور مجازی اجرا کنید، ایرانیکاسرور می‌تواند سرور با IP ثابت در اختیار شما قرار دهد و تنظیم Endpoint، PJSIP، NAT، Firewall، TLS و مسیر RTP نیز متناسب با معماری شما انجام شود.

مشاوره Asterisk و PJSIP: 021-91302467

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

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

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

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

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