SIP و NAT - نحوه تنظیم Asterisk برای حل مشکل عدم عبور صدا یا صدای یک طرفه
[CENTER][B]SIP[/B][B] و [/B][B]NAT[/B][B] - نحوه تنظیم [/B][B]Asterisk[/B][B] برای حل مشکل عدم عبور صدا یا صدای یک طرفه[/B]
[/CENTER]
در این پست توپولوژی را بررسی می کنیم که Asterisk به عنوان SIP Server درون شبکه NAT شده و IP Phone ها خارج از شبکه قرار دارند . شاید در نگاه اول به نظر بیاد که Forward کردن پورت 5060 که برای سیگنالینگ SIP استفاده میشود ، مشکل را حل کند ولی تتظیمات مخصوص NAT در Asterisk و محدود کردن پورت های مورد استفاده پروتکل RTP نیز از جمله کارهایی که برای حل این مشکل باید انجام شود .
[CENTER][IMG]http://linux-notes.persiangig.com/image/linux-notes_p63_SIPNAT/asteriskinsidenat_small.PNG[/IMG]
[/CENTER]
تنظیمات مربوط به 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 قابل مشاهده و تنظیم است . که در اینجا این رنج را به صد پورت محدود کرده ایم .
[LEFT][general][/LEFT]
[LEFT]rtpstart=10000 ; first port to use[/LEFT]
[LEFT]rtpend=10100 ; last port to use [/LEFT]
اگر از لینوکس و IPTables برای عملیات مسیریابی یا فایروال استفاده می کنید می توانید از دستورات زیر برای تنظیم قوانین IPtables بهره ببرید .
[LEFT]iptables -t nat -A PREROUTING -i eth0 -p udp \[/LEFT]
[LEFT]-m udp --dport 10000:10100 -j DNAT \[/LEFT]
[LEFT]--to-destination 192.168.16.1[/LEFT]
[LEFT]iptables -t nat -A PREROUTING -i eth0 -p udp \[/LEFT]
[LEFT]-m udp --dport 5060 -j DNAT \[/LEFT]
[LEFT]--to-destination 192.168.16.11[/LEFT]
مرحله دوم تنظیمان مربوط به NAT در فایل sip.conf در مسیر /etc/asterisk است .
در بخش [general] پارامتر externip را با آدرس آی پی عمومی فایروال یا مسیریاب شبکه که در مثال ما 217.219.220.220 است را مقدار دهی کنید . و رنج آی پی های داخلی شبکه را در پارامتر localnet وارد کنید .
[LEFT][general][/LEFT]
[LEFT]localnet=192.168.16.0/255.255.255.0 ; or your subnet[/LEFT]
[LEFT]externip=217.219.220.220 ; use your address[/LEFT]
[FONT=Tahoma]حال باید برای گوش های آی پی ای که در خارج از شبکه محلی هستند باید پارامتر [/FONT][FONT=Tahoma]nat[/FONT][FONT=Tahoma] را [/FONT][FONT=Tahoma]yes[/FONT][FONT=Tahoma] کنید .[/FONT][FONT=Tahoma] اضافه کردن پارامتر [/FONT][FONT=Tahoma]qualify=yes[/FONT][FONT=Tahoma] باعث میشود تا [/FONT][FONT=Tahoma]Asterisk[/FONT][FONT=Tahoma] به صورت دائم ارتباط را چک کند و به عبارتی زنده نگه دارد [/FONT][FONT=Tahoma]تا ترجمه [/FONT][FONT=Tahoma]NAT[/FONT][FONT=Tahoma] از فایروال یا مسیر یاب پاک نشود .[/FONT] [LEFT][YOURREMOTEPEER] ; your peer's name[/LEFT]
[LEFT]nat=yes[/LEFT]
[LEFT]qualify=yes ; Force keepalives[/LEFT]
منابع :
[LEFT][URL="http://www.linuxjournal.com/article/9399"]How to Configure SIP and NAT[/URL][/LEFT]
[LEFT][URL="http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html"]SIP with NAT or Firewalls[/URL][/LEFT]
[CENTER] Omid mohajerani[/CENTER]
[CENTER][URL="http://linux-notes.blogfa.com/"]http://linux-notes.blogfa.com[/URL][/CENTER]
[CENTER]omid dot mohajerani @ gmail dot com[/CENTER]