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

VoIP پشت CGNAT؛ کدام روش‌ها واقعاً برای تماس پایدار جواب می‌دهند؟

VoIP پشت CGNAT کاملاً شدنی است، اما نه با Port Forward معمولی. وقتی ISP از Carrier-Grade NAT استفاده می‌کند، شما فقط NAT مودم خودتان را کنترل می‌کنید و یک لایه NAT دیگر در شبکه…

VoIP پشت CGNAT؛ کدام روش‌ها واقعاً برای تماس پایدار جواب می‌دهند؟
خلاصه سریع این آموزش

VoIP پشت CGNAT کاملاً شدنی است، اما نه با Port Forward معمولی. وقتی ISP از Carrier-Grade NAT استفاده می‌کند، شما فقط NAT مودم خودتان را کنترل می‌کنید و یک لایه…

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

VoIP پشت CGNAT کاملاً شدنی است، اما نه با Port Forward معمولی. وقتی ISP از Carrier-Grade NAT استفاده می‌کند، شما فقط NAT مودم خودتان را کنترل می‌کنید و یک لایه NAT دیگر در شبکه اپراتور وجود دارد. در نتیجه، دریافت مستقیم SIP یا RTP از اینترنت روی تلفن یا PBX پشت CGNAT معمولاً قابل اتکا نیست.

راه‌حل‌های واقعی یک اصل مشترک دارند: ارتباط باید از داخل شبکه کاربر به یک نقطه عمومی ساخته شود و همان مسیر زنده بماند. برای یک تلفن SIP، این مسیر می‌تواند Outbound Registration باشد؛ برای یک PBX کامل، VPN به یک VPS عمومی؛ برای چند شعبه، SBC عمومی؛ و برای WebRTC، ICE/TURN.

خلاصه تصمیم: Outbound Registration برای Endpointها، VPN برای PBX یا شبکه کامل، SBC برای معماری چندشعبه‌ای و TURN برای Mediaهای ICE-aware روش‌های قابل اتکا هستند. DDNS، SIP ALG و Port Forward روی مودم به‌تنهایی CGNAT را حل نمی‌کنند.

فهرست مطالب

CGNAT چیست و چرا روی VoIP اثر می‌گذارد؟

CGNAT یا Carrier-Grade NAT یعنی چند مشترک ISP یک IPv4 عمومی را به‌اشتراک می‌گذارند. RFC 6598 محدوده 100.64.0.0/10 را برای Shared Address Space در شبکه اپراتورها تعریف کرده است.

اگر WAN مودم چنین وضعی داشته باشد، احتمال CGNAT زیاد است:

Router WAN IP:
100.72.18.34

Public IP seen on Internet:
203.0.113.90

مسیر در این حالت تقریباً چنین است:

Phone / PBX
   |
LAN NAT
   |
Customer Router
   |
CGNAT inside ISP
   |
Shared Public IPv4
   |
Internet

RFC 6598 حتی اشاره می‌کند بعضی SIP Clientها پشت CGN برای دریافت تماس ورودی به ترافیک خروجی قبلی یا مکانیزمی برای ایجاد مسیر از داخل نیاز دارند.

چطور بفهمیم پشت CGNAT هستیم؟

🔹 IP بخش WAN روتر را ببینید.

🔹 Public IP دیده‌شده روی اینترنت را جدا بررسی کنید.

🔹 اگر این دو متفاوت‌اند و WAN یک IP عمومی اختصاصی نیست، NAT بالادستی دارید.

🔹 اگر Port Forward مودم از اینترنت قابل دسترسی نیست، CGNAT یکی از مظنون‌های اصلی است.

دیدن آدرس در محدوده 100.64.0.0/10 نشانه بسیار قوی است، اما نبودن آن CGNAT را صددرصد رد نمی‌کند؛ بعضی اپراتورها از طرح‌های آدرس‌دهی دیگری هم استفاده می‌کنند.

چه روش‌هایی معمولاً CGNAT را حل نمی‌کنند؟

🔹 Port Forward فقط روی مودم کاربر.

🔹 DDNS بدون Public IP اختصاصی.

🔹 SIP ALG به‌عنوان راه‌حل اصلی معماری.

🔹 STUN به‌تنهایی برای هر نوع NAT.

🔹 Trunk مبتنی بر IP Authentication روی PBX پشت CGNAT، بدون Tunnel یا Relay عمومی.

روش ۱: Outbound Registration؛ بهترین نقطه شروع برای تلفن SIP

در این مدل تلفن یا PBX خودش REGISTER را به سرور عمومی می‌فرستد. NAT Flow از داخل ساخته می‌شود و سرور می‌تواند تماس ورودی را روی همان مسیر برگرداند.

Phone behind CGNAT
       |
       | REGISTER outbound
       v
Public PBX / SBC
       |
       | INVITE on existing flow
       v
Phone

RFC 5626 دقیقاً برای محیط‌هایی نوشته شده که Server نمی‌تواند اتصال جدیدی از بیرون به User Agent پشت NAT یا Firewall بسازد. ایده اصلی این است که UA خودش Flow را ایجاد کند و Registrar یا Proxy همان Flow را برای درخواست‌های بعدی نگه دارد.

نمونه تنظیم Endpoint پشت NAT در Asterisk

[1001]
type=endpoint
aors=1001
auth=1001-auth

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

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

rtp_symmetric=yes باعث می‌شود RTP به همان IP/Portی برگردد که RTP از آن دریافت شده است. force_rport پاسخ SIP را به Source واقعی برمی‌گرداند، rewrite_contact Contact را با Source IP/Port هماهنگ می‌کند و direct_media=no Asterisk را در Media Path نگه می‌دارد.

محدودیت: این گزینه‌ها CGNAT را حذف نمی‌کنند. فقط زمانی مفیدند که Endpoint خودش Flow خروجی ساخته باشد و Server بتواند همان Flow را استفاده کند.

روش ۲: TCP/TLS و Persistent Flow

UDP Connection واقعی ندارد و NAT Mapping آن با Timer زنده می‌ماند. RFC 4787 توضیح می‌دهد NATها برای UDP Mapping Timer دارند و Outbound Traffic می‌تواند این Mapping را Refresh کند.

برای Signaling، TCP یا TLS اغلب از UDP خام قابل‌کنترل‌تر است؛ چون Client خودش یک Connection خروجی می‌سازد و می‌تواند آن را نگه دارد.

Phone
  |
  | TLS connection initiated outbound
  v
SBC / Registrar
  |
  | reuse same flow
  v
Phone

RFC 5626 برای این سناریو Keepalive و Flow Recovery تعریف می‌کند. RFC 5923 نیز روشن می‌کند برای SIP Entityهایی که به‌دلیل NAT یا Firewall فقط در یک جهت Connection می‌سازند، مکانیزم SIP Outbound مناسب است.

Keepalive؛ چرا Registered هستیم ولی تماس ورودی نمی‌رسد؟

CGNAT State دائمی نیست. ممکن است UI تلفن هنوز «Registered» نشان دهد، اما Mapping واقعی در NAT منقضی شده باشد.

🔹 SIP OPTIONS.

🔹 CRLF Keepalive روی TCP/TLS.

🔹 STUN Keepalive در پیاده‌سازی‌های SIP Outbound.

🔹 Re-registration دوره‌ای.

یک Interval ثابت برای همه اپراتورها وجود ندارد. RFC 4787 هم تأکید می‌کند NAT Mapping Timeout در تجهیزات مختلف متفاوت است؛ بنابراین Interval باید با شبکه واقعی تست شود.

روش ۳: SBC عمومی روی VPS

اگر چند شعبه، چند Provider یا تعداد زیادی Endpoint پشت CGNAT دارید، یک SBC با IP عمومی معماری را منظم‌تر می‌کند.

Branch A behind CGNAT ----\
                           \
Branch B behind CGNAT ------> Public SBC ---- SIP Provider
                           /
Remote phones ------------/

Media:
Endpoints ---- RTP/SRTP ---- Media Proxy ---- Provider/PBX

در این مدل Endpointها اتصال را از داخل به SBC عمومی می‌سازند. SBC می‌تواند Registration، ACL، TLS، Rate Limiting، Topology Hiding و Routing را مدیریت کند و Media Proxy نیز RTP را Anchor کند.

Kamailio در ماژول nathelper برای NAT Ping، Contact Handling و Reuse کردن TCP/TLS Connection ابزارهای مشخصی دارد.

روش ۴: VPN؛ انتخاب قوی برای PBX کامل پشت CGNAT

اگر Asterisk یا FreePBX باید داخل شرکت بماند، معمولاً ساده‌تر است کل شبکه VoIP را با یک Tunnel خروجی به VPS عمومی متصل کنید.

Office PBX
192.168.50.10
     |
     | outbound VPN tunnel
     v
Public VPS
10.80.0.1
     |
     +---- SBC
     +---- SIP Provider
     +---- Remote branches

WireGuard، ZeroTier یا NetBird می‌توانند نقش Tunnel یا Overlay را داشته باشند. مزیت اصلی این است که CGNAT دیگر لازم نیست Port ورودی SIP/RTP باز کند؛ Tunnel از داخل ساخته می‌شود.

برای پروژه‌ای که Provider فقط IP Authentication دارد، می‌توانید Public IP خود VPS را به Provider معرفی کنید و ترافیک را از Tunnel به PBX داخلی برسانید.

محدودیت VPN: MTU، Jitter، Route Failover و Health خود Tunnel را تست کنید. اگر کل تلفنی یک شعبه به یک Tunnel وابسته است، Monitoring و مسیر پشتیبان مهم می‌شوند.

روش ۵: TURN؛ فقط برای Clientهای ICE/TURN-aware

TURN یک Relay عمومی برای عبور Media از NAT است. RFC 8656 توضیح می‌دهد وقتی مسیر مستقیم بین دو Host ممکن نیست، TURN Packetها را از یک Relay عمومی عبور می‌دهد.

اما TURN راه‌حل عمومی همه تلفن‌های SIP نیست. Client باید ICE/TURN را پشتیبانی کند؛ این مدل بیشتر در WebRTC دیده می‌شود.

WebRTC Client
   |
   | ICE
   v
Direct path?
   |
   +--> yes -> direct media
   |
   +--> no  -> TURN relay

TURN جای SIP Registrar، SBC یا VPN را نمی‌گیرد و چون Media از Relay عبور می‌کند، Bandwidth Server را مصرف می‌کند.

مطلب مرتبط: برای دیدن یک نمونه عملی Coturn روی VPS، این راهنما را ببینید:

راه‌اندازی PairDrop و Coturn روی VPS ایران

روش ۶: IPv6 عمومی

اگر ISP، PBX، Provider و Endpoint همگی IPv6 را کامل پشتیبانی کنند، مسیر IPv6 دیگر به IPv4 CGNAT وابسته نیست.

اما Global IPv6 به معنی حذف Firewall نیست؛ Endpointی که IPv6 عمومی دارد می‌تواند مستقیماً Routeable باشد، بنابراین ACL و Firewall باید دقیق تنظیم شوند.

روش ۷: Public IPv4 از ISP

گاهی ساده‌ترین انتخاب همچنان گرفتن Public IPv4 یا Static IP از ISP است؛ مخصوصاً اگر Provider فقط IP Authentication دارد یا تجهیزات Legacy از SIP Outbound، VPN یا ICE پشتیبانی خوبی ندارند.

مقایسه روش‌های VoIP پشت CGNAT

روش مناسب برای مزیت محدودیت
Outbound Registration تلفن و Softphone ساده و کم‌هزینه وابسته به Flow و Keepalive
TCP/TLS Persistent Flow Endpoint سازگار Signaling پایدارتر نیاز به Reconnect/Reuse درست
Public SBC چند شعبه و PBX کنترل مرکزی SIP و Media پیچیدگی بیشتر
VPN/Overlay PBX یا کل شبکه شعبه Routing قابل‌کنترل MTU و Failover
TURN/ICE WebRTC Relay برای NAT سخت مصرف Bandwidth و عدم حل عمومی SIP
IPv6 شبکه End-to-end IPv6 عدم وابستگی به IPv4 CGNAT نیاز به پشتیبانی همه اجزا
Public IPv4 PBX/Trunk سنتی ساده‌ترین Routing هزینه یا عدم ارائه ISP

چرا STUN همیشه کافی نیست؟

STUN به Client کمک می‌کند Public Mapping را کشف کند؛ اما اگر NAT Policy اجازه ارتباط مستقیم را ندهد، دانستن Mapping کافی نیست.

STUN:
"What public mapping do I have?"

TURN:
"If direct path fails, relay my packets."

VPN:
"Build me a stable routed tunnel."

SBC:
"Control SIP and often anchor media."

این ابزارها مکمل هم هستند، نه جایگزین کامل یکدیگر.

برای PBX پشت CGNAT کدام معماری بهتر است؟

سناریو انتخاب پیشنهادی
چند تلفن Remote PBX عمومی + Outbound Registration
PBX باید داخل شرکت بماند VPN از شرکت به VPS/SBC عمومی
چند شعبه و چند Carrier SBC عمومی + VPN یا Registration Flow
WebRTC Browser Public Signaling + ICE/TURN
Provider فقط IP Authentication دارد VPS/SBC با Public IP یا Public IP مستقیم

نمونه معماری شرکت با PBX داخلی پشت CGNAT

Office LAN
Asterisk 192.168.50.10
       |
       | WireGuard / Overlay
       | outbound through CGNAT
       v
VPS with Public IP
       |
       +---- SBC / SIP proxy
       +---- Media proxy
       |
       v
SIP Provider

Provider فقط Public IP VPS را می‌بیند، PBX داخلی از طریق Tunnel ثابت به Edge وصل است و تغییر CGN Mapping روی Trunk اثر مستقیم ندارد.

نمونه معماری تلفن Remote پشت اینترنت خانگی یا موبایل

Remote phone
   |
   | SIP TLS outbound
   | Registration + keepalive
   v
Public PBX/SBC
   |
   | RTP anchored
   v
Provider / other extensions

برای یک Endpoint منفرد معمولاً لازم نیست VPN اجباری باشد؛ مگر اینکه Policy امنیتی، ISP یا رفتار NAT همان شبکه استفاده از Tunnel را ضروری کند.

مشکل‌هایی که بعد از چند دقیقه ظاهر می‌شوند

🔹 Registration در UI فعال است ولی Flow واقعی منقضی شده است.

🔹 تماس خروجی کار می‌کند اما تماس ورودی نه.

🔹 صدا یک‌طرفه است چون Mapping Media عوض شده است.

🔹 بعد از جابه‌جایی Wi-Fi به 4G/5G، Source IP/Port عوض می‌شود.

🔹 VPN Connected است ولی Route یا MTU درست نیست.

🔹 Registrar هنوز Contact قدیمی را نگه داشته است.

در Asterisk چه چیزی را بررسی کنیم؟

Contactها:

asterisk -rx "pjsip show contacts"

Endpoint:

asterisk -rx "pjsip show endpoint 1001"

Trace:

asterisk -rvvv
pjsip set logger on

در REGISTER به Contact، Source IP/Port، Via، received و rport دقت کنید. بعد از تست Logger را خاموش کنید.

Packet Capture؛ Flow را از دید سرور عمومی ببینید

tcpdump -ni any -s0 \
  -w /tmp/cgnat-voip.pcap \
  'udp port 5060 or tcp port 5060 or tcp port 5061'

اگر SIP روی TLS باشد، Payload رمزنگاری شده است، اما Source/Destination، TCP Session، Disconnect و Reconnect همچنان در PCAP دیده می‌شوند. برای متن SIP از Log داخلی PBX/SBC استفاده کنید.

امنیت؛ CGNAT جای Firewall نیست

🔹 روی PBX/SBC عمومی ACL و Rate Limit داشته باشید.

🔹 برای Endpointهای سازگار TLS و SRTP را فعال کنید.

🔹 SIP را بدون نیاز برای کل اینترنت باز نگذارید.

🔹 Credential جدا و قوی برای هر داخلی بسازید.

🔹 VPN و SBC را مانیتور کنید.

🔹 Failover را قبل از Production تست کنید.

چک‌لیست انتخاب روش

وضعیت اولویت اول جایگزین
یک تلفن Remote Outbound Registration + TLS VPN
ده‌ها تلفن Remote Public PBX/SBC Overlay VPN برای گروه خاص
PBX داخل شرکت VPN به VPS/SBC Public IP از ISP
WebRTC ICE + TURN Media Proxy
چند شعبه SBC عمومی + VPN/Registration Public IP هر شعبه
Provider با IP Auth VPS/SBC با Public IP Public IP مستقیم
به‌جای جنگیدن با Port Forward، یک نقطه عمومی پایدار بسازید

برای VoIP پشت CGNAT به VPS یا SBC عمومی نیاز دارید؟

اگر Endpointها یا PBX پشت CGNAT هستند، یک VPS با IP عمومی می‌تواند نقش PBX، SBC، VPN Hub یا Media Relay را داشته باشد تا تماس‌ها به Port Forward سمت ISP وابسته نباشند.

ایرانیکاسرور می‌تواند برای تهیه VPS، نصب Asterisk/Kamailio، VPN، RTPengine و طراحی معماری VoIP پشت CGNAT کمک کند.

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

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

VoIP پشت CGNAT کار می‌کند؟

بله. بهترین معماری این است که اتصال از داخل شبکه به یک سرور عمومی ایجاد شود. Outbound Registration، SBC، VPN و در WebRTC استفاده از TURN روش‌های رایج‌اند.

آیا Port Forward روی مودم CGNAT را حل می‌کند؟

معمولاً خیر. Port Forward فقط NAT روتر خودتان را کنترل می‌کند و NAT بالادستی ISP همچنان خارج از کنترل شماست.

TCP یا TLS بهتر از UDP است؟

برای Signaling پشت CGNAT اغلب قابل‌کنترل‌تر است چون Client یک Flow خروجی Connection-oriented می‌سازد؛ با این حال Keepalive، Reconnect و پشتیبانی Server از Reuse همان Flow همچنان لازم است.

آیا VPN بهترین راه است؟

برای PBX کامل یا شبکه یک شعبه پشت CGNAT، VPN به یک VPS عمومی معمولاً بسیار پایدار و قابل‌کنترل است. برای یک تلفن منفرد ممکن است Outbound Registration ساده‌تر باشد.

آیا TURN برای همه تلفن‌های SIP کار می‌کند؟

خیر. TURN بیشتر برای Clientهایی مناسب است که ICE/TURN را پشتیبانی می‌کنند، به‌خصوص WebRTC. تلفن SIP معمولی الزاماً TURN را نمی‌شناسد.

چرا تلفن Registered است ولی تماس ورودی نمی‌گیرد؟

ممکن است NAT/CGNAT Flow منقضی شده باشد ولی UI تلفن هنوز Registration قبلی را نشان دهد. Keepalive، Re-registration و Contact واقعی سمت Registrar را بررسی کنید.

آیا IPv6 CGNAT را حل می‌کند؟

اگر ISP، PBX، Provider و Endpoint همگی IPv6 را کامل پشتیبانی کنند، برای مسیر IPv6 دیگر به IPv4 CGNAT وابسته نیستید؛ اما Firewall و Security همچنان ضروری‌اند.

برای Trunk با IP Authentication چه کنیم؟

بهتر است یک SBC یا VPS با Public IP جلوی PBX قرار دهید یا از ISP Public IP بگیرید. IP Authentication مستقیم روی PBX پشت CGNAT معماری مناسبی نیست.

جمع‌بندی

در طراحی VoIP پشت CGNAT روی اتصال ورودی مستقیم به Endpoint یا PBX حساب نکنید. Flow را از داخل به یک نقطه عمومی بسازید و آن را زنده نگه دارید.

برای تلفن Remote، Outbound Registration روی TCP/TLS همراه Keepalive معمولاً کافی است. برای PBX یا کل شعبه، VPN به VPS عمومی معماری ساده‌تر و پایدارتر می‌دهد. برای چند شعبه و Provider، SBC عمومی همراه Media Proxy کنترل بیشتری فراهم می‌کند.

TURN را فقط جایی استفاده کنید که Client و Media از ICE/TURN پشتیبانی می‌کنند. اگر Provider فقط IP Authentication می‌پذیرد یا تجهیزات Legacy دارید، Public IPv4 یا SBC روی VPS عمومی معمولاً عملی‌ترین انتخاب است.

منابع و مستندات
CGNAT، SIP Outbound، Connection Reuse، NAT Keepalive، PJSIP NAT، Kamailio NAT Traversal و TURN این مقاله با مستندات رسمی تا ۱۹ اکتبر ۲۰۲۶ بررسی شده‌اند.
RFC CGNAT
مرجع محدوده 100.64.0.0/10 و محدودیت ارتباط ورودی برای بعضی SIP Clientها پشت CGN.
RFC SIP Outbound
مرجع Registration Flow، Keepalive و دریافت Request روی اتصال ساخته‌شده از سمت Client پشت NAT/Firewall.
RFC Connection Reuse
مرجع Connection Reuse و ارتباط آن با SIP Outbound در محیط NAT و Firewall.
RFC NAT UDP
مرجع Mapping Timer و دلیل اهمیت Outbound Refresh و Keepalive در UDP.
Asterisk NAT
مرجع rtp_symmetric، force_rport، rewrite_contact و direct_media برای Endpointهای پشت NAT.
Kamailio NAT
مرجع NAT Ping، Contact Alias و Reuse اتصال TCP/TLS برای Endpointهای پشت NAT.
RFC TURN
مرجع TURN Relay، استفاده کنار ICE و هزینه Bandwidth ناشی از Relay کردن Media.
یک Flow خروجی پایدار بهتر از ده Port Forward است

برای طراحی VoIP پشت CGNAT کمک می‌خواهید؟

با مشخص‌بودن تعداد داخلی‌ها، محل PBX، نوع SIP Provider و نوع اینترنت می‌توان تعیین کرد Outbound Registration، VPN، SBC یا TURN کدام انتخاب درست‌تری است.

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

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

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

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

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

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