بیشتر آدمها حدود ده دقیقه بعد از خرید میفهمند NAT یعنی چه. Nginx بالا میآید، curl localhost صفحه را برمیگرداند، و مرورگر لپتاپ فقط میچرخد. چیزی خراب نیست. فقط سرور نشانی IPv4 عمومیِ متعلق به خودش ندارد، و تنها در ورودیاش یک پورت است که برای SSH فوروارد شده.
همین یک در برای حجم شگفتانگیزی از کار کافی است، و برای بعضی کارهای خیلی رایج اصلاً کافی نیست. اگر هنوز بین دو نوع تعرفه مردد هستید، نوشتهٔ قدیمیتر ما IP اختصاصی یا VPS با NAT همان یک سؤالی را میپرسد که تکلیف را روشن میکند. این نوشته دربارهٔ زندگی با جواب است: سرور NAT در عمل چه کارهایی میکند، کجا به دیوار میخورد، و وقتی برایتان کوچک شد چطور بیرون بیایید.
واقعاً چه چیزی میگیرید
سرور NAT پشت درگاه ما یک نشانی خصوصی دارد. داشبورد یک میزبان و یک پورت شخصی نشان میدهد، و اینطور وصل میشوید:
ssh -p 20123 root@host
این پورت به پورت 22 داخل سرور شما میرسد. همهٔ پورتهای ورودی دیگر روی IPv4 از بیرون بستهاند و راهی برای فوروارد کردن پورت بیشتر وجود ندارد. سمت خروجی داستان دیگری است: سرور به هر جای اینترنت میرسد، جز پورتهای SMTP یعنی 25 و 465 که روی همهٔ تعرفهها بستهاند، چه NAT باشد چه نباشد. قواعد کامل در شبکه و پورتها آمده است.
یک نکتهٔ دیگر هم برای بعضیها مهم است: نشانی خروجی متعلق به خود شما نیست. ترافیک از نشانیای بیرون میرود که کنترلش دست شما نیست، پس نمیتوانید برایش DNS معکوس تنظیم کنید و نمیتوانید رویش اعتبار فرستنده بسازید.
چه چیزهایی پشت یک پورت بهخوبی اجرا میشوند
هر چیزی که خودش گفتوگو را شروع کند. این دسته از آنچه به نظر میرسد بزرگتر است:
- رباتهایی که polling میکنند. ربات Telegram با long polling، ربات Discord روی اتصال gateway، ربات معاملاتی که با API یک صرافی حرف میزند. همه خروجیاند.
- ایجنتهای هوش مصنوعی. ایجنتی که API مدلها را صدا میزند، در وب میگردد، فایل مینویسد و کد اجرا میکند، لازم ندارد کسی صدایش بزند. به CPU، حافظه و یک اتصال رو به بیرون نیاز دارد.
- کارگرها و اسکرپرها. هر چیزی که از صف کار برمیدارد، صفحهها را میخزد یا طبق برنامه داده همگام میکند.
- ماشینهای build و runnerها. runnerهای CI معمولاً خودشان در سرور ثبت میشوند و کار را میکشند، پس روی NAT راحتاند.
برای چنین باری، ارزانترین تعرفه صادقانه کافی است. Nano ماهانه 3 دلار است برای 2 vCPU، 1 GB رم و 15 GB دیسک؛ Small هم 8 دلار برای 4 vCPU، 4 GB و 35 GB. فهرست کامل در صفحهٔ جداگانهٔ تعرفههای NAT است.
جایی که یک پورت کافی نیست
دیوار، هر چیزی است که در آن طرف دیگر باید اتصال را شروع کند.
سایت روشنترین مثال است. مرورگرها به پورت 443 (و برای ریدایرکت به 80) وصل میشوند، و در تعرفهٔ NAT این پورتها از بیرون اصلاً وجود ندارند. پورت غیراستاندارد هم کمکی نمیکند، دستکم نه به شکلی که بازدیدکنندهها بپذیرند.
دامنهٔ خودتان با HTTPS دو بار به همان دیوار میخورد. میتوانید رکورد DNS را به نشانی درگاه اشاره بدهید، اما جز پورت SSH شما هیچ چیزی که آنجا میرسد به سرورتان فرستاده نمیشود. روش معمول گرفتن گواهی رایگان هم سرور را روی پورت 80 یا 443 بررسی میکند.
Webhookها بیصدا شکست میخورند. اعلانهای پرداخت، پلتفرم رباتها که بهروزرسانی میفرستد، سرور Git که commit تازه را اعلام میکند: همه باید به شما برسند. رباتی که با long polling عالی کار میکرد، درست همان لحظه که آن را به webhook میبرید از کار میافتد.
نقطههای پایانی VPN، سرورهای بازی و سرورهای ایمیل ذاتاً به پورت ورودی نیاز دارند. همینطور هر چیزی که بخواهید همکارتان در مرورگر باز کند.
راهحلهای جایگزین، صادقانه
نشانی IPv6. سرورهای Linux تازه یک نشانی IPv6 عمومی میگیرند، و در تعرفههای NAT این نشانی مستقیم و روی هر پورتی به سرور میرسد. اگر همهٔ کلاینتهای سرویس شما مال خودتان باشند (لپتاپ، سرورهای دیگر، یک کاوشگر پایش با IPv6)، خوب کار میکند. برای سایت عمومی نه: بخشی از بازدیدکنندهها هنوز روی شبکههای بدون IPv6 هستند و هرگز صفحه را بار نمیکنند. تعرفههای Windows فعلاً فقط IPv4 دارند.
تونل. میتوانید یک ایجنت کوچک اجرا کنید که اتصالی خروجی به یک رله در جای دیگر نگه دارد، و رله ترافیک عمومی را از تونل برگرداند. کار میکند و برای دمو یا داشبورد داخلی معقول است. اما برای هر چیز مهمی، یک طرف سوم را وسط هر درخواست گذاشتهاید، بهاضافهٔ یک قطعهٔ دیگر که ساعت سه بامداد ممکن است خراب شود.
تونل SSH برای خودتان. اگر پنل مدیریت فقط به کار خودتان میآید، اصلاً آن را بیرون نگذارید. از همان پورت SSH که دارید فوروارد کنید:
ssh -p 20123 -L 8080:localhost:8080 root@host
بعد http://localhost:8080 را روی دستگاه خودتان باز کنید. این دستکمگرفتهترین ترفند روی سرور NAT است و در هر حال امنتر از گذاشتن پنل روی اینترنت.
نظر صادقانهٔ من: IPv6 و تونلهای SSH ابزارهای خوبیاند. اما سرویس عمومی دائمیای که فقط چون سرور IPv4 ندارد از تونل رد میشود، معمولاً نشانهٔ این است که NAT برایتان کوچک شده.
رفتن به IPv4 اختصاصی بدون نصب دوباره
لازم نیست چیزی را از نو بسازید. سرور را در داشبورد باز کنید، «تغییر تعرفه» را بزنید و تعرفهای با IP اختصاصی هماندازه یا بزرگتر انتخاب کنید. سرور یک بار ریاستارت میشود و با IPv4 عمومی خودش، دیسکش و هر چیزی که نصب کرده بودید برمیگردد. پورتهای 80، 443 و هر چیزی که در فایروال باز کنید از بیرون در دسترس میشوند، و SSH به پورت معمول 22 منتقل میشود. جزئیات در تغییر تعرفه آمده است.
چند نکته که خوب است پیش از کلیک بدانید:
- مابهالتفاوت نسبی باقیماندهٔ دورهٔ فعلی را از موجودیتان میپردازید. Nano-IP ماهانه 8 دلار است در برابر 3 دلار Nano؛ Small-IP هم 16 دلار در برابر 8 دلار.
- در محل سرور شما باید یک نشانی آزاد وجود داشته باشد. اگر الان نباشد، داشبورد پیش از هر کسر مبلغی خبرتان میکند.
- اگر پیکربندی شبکه را داخل سرور دستی تغییر دادهاید، بعد از ریاستارت بررسیاش کنید. روی ایمیج استاندارد خودکار اعمال میشود.
- اول نسخهٔ پشتیبان بگیرید. فقط یک ریاستارت است، اما دادهها مال شماست.
جایی که NAT مناسب نیست، و جایی که IPv4 هم مناسب نیست
NAT برای هر چیز عمومی، هر چیزی که webhook میگیرد و هر چیزی که به نشانی ثابتی نیاز دارد که کسی آن را در فهرست مجاز بگذارد، انتخاب اشتباهی است. روزها را صرف دور زدنش نکنید. اختلاف قیمت Nano و Nano-IP ماهانه 5 دلار است.
اما IPv4 اختصاصی هم جادو نیست. سایتی را که نشانیهای مراکز داده را مسدود میکند وادار نمیکند راهتان بدهد، و اسکرپری را که به محدودیت نرخ خورده نجات نمیدهد، چون این تصمیمها به شبکهای که در آن هستید مربوطاند، نه به اینکه چه کس دیگری از آن نشانی استفاده میکند. و اگر کل پروژهٔ شما چند ربات و یک ایجنت است، خریدن IPv4ای که هیچکس هرگز به آن وصل نمیشود دور ریختن پول است.
اگر به هر حال برنامهٔ رفتن به پیکربندی بزرگتری دارید، انتقال VPS بدون قطعی ترتیب کارها را توضیح میدهد، و چطور مشخصات VPS را بخوانیم در مقایسهٔ تعرفهها کمکتان میکند.
نظرات
هنوز نظری نیست. اولین نفر باشید.