NAT چیست؟ مخفف Network Address Translation و روشی است که آدرس IP خصوصی دستگاه های شبکه داخلی را هنگام رفتن به اینترنت به آدرس عمومی روتر تبدیل می کند. بدون NAT هر کامپیوتر، گوشی و چاپگر دفتر به یک آدرس عمومی جدا نیاز داشت، و آدرس های IPv4 برای این کار به اندازه کافی نیستند. به همین خاطر شبکه داخلی تقریباً همه شرکت ها و خانه ها آدرس های خصوصی دارد و روتر در مرز شبکه این ترجمه را انجام می دهد.
آدرس های خصوصی و عمومی
سه بازه آدرس برای شبکه داخلی رزرو شده اند و روی اینترنت مسیر داده نمی شوند:
| بازه | اندازه | کاربرد رایج |
|---|---|---|
| 10.0.0.0/8 | حدود 16 میلیون آدرس | شبکه های بزرگ سازمانی |
| 172.16.0.0/12 | حدود یک میلیون آدرس | شبکه های متوسط و محیط های ابری |
| 192.168.0.0/16 | حدود 65 هزار آدرس | خانه و دفتر کوچک |
بسته ای که مبدأ آن آدرس خصوصی است اگر بدون ترجمه به اینترنت برسد، جواب برنمی گردد، چون هیچ روتری مسیری برای آن آدرس ندارد. NAT همین مشکل را حل می کند. برای انتخاب بازه مناسب شبکه و تقسیم آن، subnet چیست را بخوانید.
نحوه کار NAT خروجی
فرض کنید کامپیوتری با آدرس 192.168.10.25 به یک سایت وصل می شود و روتر آدرس عمومی 203.0.113.10 دارد:
- کامپیوتر بسته ای از 192.168.10.25 و پورت مبدأ 50321 می فرستد.
- روتر آدرس مبدأ را به 203.0.113.10 و پورت را به یک پورت آزاد (مثلاً 40001) تغییر می دهد و این تطابق را در یک جدول نگه می دارد.
- سایت به 203.0.113.10:40001 جواب می دهد.
- روتر با جدول، مقصد جواب را به 192.168.10.25:50321 برمی گرداند.
چون جدول ترجمه با شماره پورت ها دستگاه ها را از هم جدا می کند، هزاران دستگاه می توانند با یک IP عمومی کار کنند. این نوع، PAT (Port Address Translation) یا NAT Overload نام دارد و رایج ترین نوع NAT است.
انواع NAT
| نوع | معنی | کاربرد |
|---|---|---|
| Static NAT | یک آدرس داخلی همیشه به یک آدرس عمومی مشخص ترجمه می شود | سرور داخلی که باید با آدرس عمومی ثابت دیده شود |
| Dynamic NAT | آدرس داخلی از یک مجموعه آدرس عمومی یکی می گیرد | کمتر دیده می شود؛ وقتی چند آدرس عمومی دارید |
| PAT یا Overload | چند آدرس داخلی با یک آدرس عمومی و پورت های مختلف | اینترنت شبکه داخلی |
| SNAT | تغییر آدرس مبدأ بسته (source) | ترجمه خروجی؛ نامی که در لینوکس به کار می رود |
| DNAT | تغییر آدرس مقصد بسته (destination) | Port Forward و در دسترس گذاشتن سرویس داخلی |
Port Forward
NAT خروجی فقط اتصال هایی را که از داخل شروع می شوند می شناسد. اگر بخواهید وب سروری داخل شبکه از اینترنت در دسترس باشد، باید یک قاعده DNAT بسازید که بگوید اتصال های ورودی به پورت 443 روتر را به 192.168.10.20 پورت 443 بفرست. این کار را Port Forward می نامند. در میکروتیک:
/ip firewall nat add chain=srcnat out-interface-list=WAN action=masquerade
/ip firewall nat add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=443 action=dst-nat to-addresses=192.168.10.20 to-ports=443
خط اول NAT خروجی برای کل شبکه است و خط دوم Port Forward. روی لینوکس همین کارها با iptables و فعال بودن مسیریابی انجام می شود:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.10.20:443
Port Forward فقط ترجمه را انجام می دهد. برای اینکه بسته به سرور برسد، قاعده فایروال روی زنجیره forward هم باید آن را اجازه بدهد. هر Port Forward یک سرویس را روی اینترنت باز می کند، پس فقط پورت های لازم را و ترجیحاً از آدرس های مجاز باز کنید (فایروال چیست).
NAT فایروال نیست
شبکه ای که پشت NAT است معمولاً اتصال ورودی ناخواسته را دریافت نمی کند، چون روتر برای آن ترجمه ای ندارد. این فقط یک اثر جانبی NAT است. NAT ترافیک خروجی را کنترل نمی کند، با اولین Port Forward یک پورت را برای همه باز می کند و وقتی بدافزاری از داخل اتصال خروجی می سازد جلویش را نمی گیرد. امنیت شبکه را قاعده های فایروال تأمین می کنند.
مشکل CGNAT
بعضی ارائه دهنده های اینترنت به مشتری آدرس عمومی نمی دهند و یک NAT دیگر در سطح خودشان دارند که Carrier-Grade NAT یا CGNAT نام دارد. آدرس WAN روتر شما در این حالت معمولاً از بازه 100.64.0.0/10 است و آدرس عمومی واقعی نیست. نتیجه:
- Port Forward کار نمی کند، چون اتصال ورودی به آدرس ارائه دهنده می رسد.
- سرور VPN یا وب سرور داخل شبکه از بیرون در دسترس نیست.
برای اینکه بفهمید پشت CGNAT هستید، آدرس WAN روتر را با آدرسی که سایت های «IP من چیست» نشان می دهند مقایسه کنید. اگر فرق دارند، مسیر ورودی ندارید. راه حل ها: درخواست IP عمومی از ارائه دهنده، استفاده از سرور واسط با آدرس عمومی (که روتر به آن تونل می زند) یا سرویس های تونل معکوس.
Hairpin NAT
سروری که با Port Forward از بیرون در دسترس است را کاربران داخلی هم گاهی با همان آدرس عمومی صدا می زنند. در این حالت بسته از داخل به آدرس عمومی روتر می رود و باید دوباره به داخل برگردد، که به آن hairpin NAT یا NAT loopback می گویند. اگر روتر آن را پشتیبانی نکند، سایتی که از بیرون باز می شود از داخل باز نمی شود. دو راه: قاعده hairpin در روتر، یا بهتر از آن split DNS که نام سرور را در شبکه داخلی به آدرس خصوصی همان سرور حل می کند (DNS چیست).
مشکل های رایج NAT
- تماس های صوتی و SIP: آدرس های داخلی در سرایند SIP می مانند و صدا یک طرفه می شود. تنظیم NAT در سانترال و بازه RTP کمک می کند (نصب ایزابل).
- VPN بین دو شبکه: اگر هر دو سر آدرس یکسان دارند، مسیریابی کار نمی کند، و NAT دو طرفه فقط راه فرار موقت است (VPN سازمانی چیست).
- پر شدن جدول ترجمه: دستگاه هایی که ده ها هزار اتصال می سازند (مثل بعضی بدافزارها یا تورنت) جدول روتر را پر می کنند و باقی کاربران اینترنت ندارند. تعداد اتصال های هر کلاینت را محدود کنید.
- برنامه هایی که آدرس IP خودشان را داخل داده می فرستند (قدیمی ها مثل FTP فعال) با NAT خراب می شوند و به ماژول های کمکی نیاز دارند.
- لاگ سرور فقط آدرس روتر را می بیند و نمی دانید کدام کاربر داخلی بوده؛ برای ردیابی باید لاگ NAT نگه داشت.
NAT و IPv6
در IPv6 آدرس به اندازه کافی زیاد است و هر دستگاه می تواند آدرس عمومی داشته باشد، پس نیازی به NAT نیست. این به معنی «بدون محافظت» نیست؛ همان فایروال stateful که برای IPv4 قاعده می نویسید باید برای IPv6 هم فعال باشد. اگر ارائه دهنده شما IPv6 داده و فایروال شما فقط IPv4 را کنترل می کند، دستگاه های داخلی روی اینترنت آشکارند.
اگر جلوی سرور یک واسط می گذارید یا ترافیک وب کاربران را کنترل می کنید، پروکسی چیست را هم بخوانید.
منابع و مستندات رسمی
- استاندارد RFC 3022 درباره NAT سنتی IP
- استاندارد RFC 4787 درباره رفتار NAT در UDP
- استاندارد RFC 6598 درباره آدرس های CGNAT
تنظیم NAT، Port Forward امن و طراحی آدرس دهی شبکه شرکت در نصب و راه اندازی شبکه آمده است. اگر ارتباط تان از بیرون با Port Forward درست کار نمی کند، عیب یابی شبکه ترتیب بررسی را نشان می دهد.



