در این پست توپولوژی را بررسی می کنیم که Asterisk به عنوان SIP Server درون شبکه NAT شده و IP Phone ها خارج از شبکه قرار دارند . شاید در نگاه اول به نظر بیاد که Forward کردن پورت 5060 که برای سیگنالینگ SIP استفاده میشود ، مشکل را حل کند ولی تتظیمات مخصوص NAT در Asterisk و محدود کردن پورت های مورد استفاده پروتکل RTP نیز از جمله کارهایی که برای حل این مشکل باید انجام شود .
تنظیمات مربوط به NAT در Asterisk در دو فایل sip.conf و rtp.conf گنجانده شده است .
بهتره از فایل rtp.conf شروع کنیم . همانطور که می دانید بعد از عملیات Signalling که توسط پروتکل SIP انجام می شود نوبت به Real-time Transfer Protocol یا همان RTP است تا صدا را بین دو گوشی تلفن منتقل کند . اما RTP مشابه SIP از یک پورت خاص (پورت شماره 5060 ) استفاده نمی کند بلکه در هر ارتباط از یک رنج پورت خاص برای انتفال Media بهره می برد . برای Forward کردن این رنج در فایروال یا مسیر یاب که انجام عملیات NAT را بر عهده دارد باید این رنج را بدانید و انرا با توجه به تعداد کلاینت ها محدود تر کنید تا مشکلی در عملیات PortForwarding در فایروال یا مسیریاب ایجاد نشود .
این رنج پورت در بخش [general] فایل rtp.conf در مسیر /etc/asterisk قابل مشاهده و تنظیم است . که در اینجا این رنج را به صد پورت محدود کرده ایم .
[general]
rtpstart=10000 ; first port to use
rtpend=10100 ; last port to use
اگر از لینوکس و IPTables برای عملیات مسیریابی یا فایروال استفاده می کنید می توانید از دستورات زیر برای تنظیم قوانین IPtables بهره ببرید .
iptables -t nat -A PREROUTING -i eth0 -p udp \
-m udp dport 10000:10100 -j DNAT \
to-destination 192.168.16.1
iptables -t nat -A PREROUTING -i eth0 -p udp \
-m udp dport 5060 -j DNAT \
to-destination 192.168.16.11
مرحله دوم تنظیمان مربوط به NAT در فایل sip.conf در مسیر /etc/asterisk است .
در بخش [general] پارامتر externip را با آدرس آی پی عمومی فایروال یا مسیریاب شبکه که در مثال ما 217.219.220.220 است را مقدار دهی کنید . و رنج آی پی های داخلی شبکه را در پارامتر localnet وارد کنید .
localnet=192.168.16.0/255.255.255.0 ; or your subnet
externip=217.219.220.220 ; use your address
حال باید برای گوش های آی پی ای که در خارج از شبکه محلی هستند باید پارامتر nat را yes کنید .
اضافه کردن پارامتر qualify=yes باعث میشود تا Asterisk به صورت دائم ارتباط را چک کند و به عبارتی زنده نگه دارد
تا ترجمه NAT از فایروال یا مسیر یاب پاک نشود .
[YOURREMOTEPEER] ; your peer's name
qualify=yes ; Force keepalives
مرجع مقاله : نت استاک