SIP و NAT - نحوه تنظیم Asterisk برای حل مشکل عدم عبور صدا یا صدای یک طرفه
در این پست توپولوژی را بررسی می کنیم که 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 وارد کنید .
[general]
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
nat=yes
qualify=yes ; Force keepalives

منابع :
Omid mohajerani
omid dot mohajerani @ gmail dot com




موضوعات مشابه: