تفاوت VPS، VM و VPC چیست؟ راهنمای جامع مفاهیم
تفاوت دقیق میان ماشین مجازی، سرور مجازی و شبکه ابری را بدانید. در این مقاله بررسی میکنیم چرا VM یک تکنولوژی، VPS یک محصول اجارهای و VPC یک شبکه خصوصی است.
VPS، VM و VPC در یک پاراگراف
یک VM (ماشین مجازی) کامپیوتری است که از نرمافزار ساخته شده است: یک هایپروایزر (hypervisor) یک سرور فیزیکی را به چندین ماشین مستقل تقسیم میکند و هر کدام هسته (kernel) خود را اجرا میکنند. یک VPS (سرور خصوصی مجازی) سروری است که بهعنوان یک محصول به شما اجاره داده میشود؛ شامل یک سیستمعامل، معمولاً دسترسی root و قیمت ماهانه. اکثر پلنهای VPS ماشینهای مجازی هستند، اما برخی میزبانها کانتینرهایی را میفروشند که هسته میزبان را به اشتراک میگذارند و از همان نام استفاده میکنند. یک VPC (ابر خصوصی مجازی) اصلاً یک سرور نیست. این یک شبکه خصوصی است که شما در داخل یک حساب ابری تعریف میکنید و منابع خود را در آن قرار میدهید. VM تکنولوژی معمول است. VPS محصول است. VPC شبکه پیرامون آن محصول است.
دو مورد از این کلمات یک ماشین را توصیف میکنند. سومی یک شبکه را توصیف میکند. تقریباً تمام سردرگمیها از همین عدم تطابق ناشی میشود، زیرا افراد آنها را طوری مقایسه میکنند که گویی سه محصول روی یک قفسه هستند.
ماشین مجازی (VM) چیست
هایپروایزر (hypervisor) لایهای است که نقش سختافزار را بازی میکند. این لایه به هر سیستمعامل مهمان، یک CPU مجازی، بخشی از حافظه، یک دیسک مجازی و یک کارت شبکه مجازی اختصاص میدهد و از دیدن یکدیگر توسط سیستمعاملهای مهمان جلوگیری میکند. KVM، Xen، Hyper-V و VMware ESXi از رایجترین نمونهها در سرورها هستند. هایپروایزرهای مدرن از قابلیتهای مجازیسازی CPU (مانند Intel VT-x و AMD-V) استفاده میکنند تا دستورات سیستمعامل مهمان با سرعتی نزدیک به سرعت اصلی روی CPU واقعی اجرا شوند و نیازی به تفسیر (interpret) آنها نباشد.
بخشی که برای یک مدیر سیستم اهمیت دارد، هسته (kernel) است. یک VM هسته اختصاصی خود را بوت میکند؛ بنابراین شما توزیع سیستمعامل را انتخاب میکنید، ماژولهای هسته را بارگذاری میکنید و مقادیر sysctl را طوری تنظیم میکنید که فقط برای شما اعمال شوند. این موضوع با کانتینر (مانند LXC یا Docker) متفاوت است، زیرا کانتینر از هسته میزبان استفاده میکند و تنها دیدگاه مستقلی از پردازشها و فایلها دارد.
شما میتوانید پاسخ این موضوع را در هر سیستم لینوکسی با یک دستور مشاهده کنید.
systemd-detect-virtkvm به این معنی است که شما در یک ماشین مجازی روی هایپروایزر KVM هستید. lxc یا openvz نشان میدهد که شما در یک کانتینر روی هسته شخص دیگری قرار دارید. none یعنی هیچ مجازیسازی پشتیبانیشدهای شناسایی نشد. اگر این دستور موجود نباشد، lscpu | grep -i hypervisor اطلاعات هایپروایزر را نمایش میدهد، اما کانتینرها را شناسایی نمیکند.
VPS چیست
یک VPS در واقع یک بستهبندی تجاری برای یک سرور ایزوله است که معمولاً به شکل یک VM ارائه میشود. فناوری زیرساختی آن مجازیسازی است و واژه "VPS" ویژگیهایی را به آن اضافه میکند که آن را قابلفروش میسازد: یک ایمیج سیستمعامل که میتوانید آن را دوباره نصب کنید، یک آدرس IP، سهمیه پهنای باند، یک پنل مدیریتی، قیمت ماهانه و پشتیبانی برای زمانی که میزبان از دسترس خارج میشود. واژه "Private" برای متمایز کردن آن از هاستینگ اشتراکی استفاده شده است؛ جایی که صدها سایت از یک سیستمعامل و یک پیکربندی PHP مشترک استفاده میکنند.
از آنجا که VPS یک نام تجاری است و نه یک اصطلاح فنی، همیشه به معنای یک VM کامل نیست. برخی طرحهای اقتصادی، کانتینرها را با همین نام میفروشند و OpenVZ که پلتفرم کانتینری پشت بسیاری از آنهاست، کانتینرهای خود را "همچنین شناختهشده به عنوان سرورهای خصوصی مجازی" توصیف میکند. تفاوت زمانی آشکار میشود که به هسته (kernel) نیاز پیدا کنید. در طرحهای مبتنی بر کانتینر، هسته متعلق به میزبان است و شما اجازه تغییر آن را ندارید. sudo modprobe wireguard اگر نتواند ماژول را در دایرکتوری ماژولهای کانتینر پیدا کند با خطا مواجه میشود، حتی اگر میزبان قبلاً آن را بارگذاری کرده باشد؛ بارگذاری یک ماژول مفقود نیز نیازمند دسترسی برای تغییر هسته میزبان است. اگر هسته میزبان فاقد پشتیبانی از WireGuard باشد، ایجاد اینترفیس (ip link add dev wg0 type wireguard) با خطای RTNETLINK answers: Operation not supported مواجه میشود. در این حالت wg-quick به یک پیادهسازی فضای کاربری (بهصورت پیشفرض wireguard-go) بازمیگردد (در صورتی که نصب شده باشد) و پیام "Missing WireGuard kernel module. Falling back to slow userspace implementation." را چاپ میکند. آن بازگشت (fallback) همچنان نیازمند این است که کانتینر اجازه استفاده از دستگاه TUN را داشته باشد، که هر میزبانی آن را مجاز نمیداند، و بدون وجود باینری فضای کاربری، wg-quick در همان مرحله خطا متوقف میشود. در طرحهای KVM، هسته متعلق به شماست: شما WireGuard را نصب میکنید، ماژول را در صورت عدم بارگذاری، لود میکنید، اینترفیس را پیکربندی میکنید و تونل بالا میآید. اگر قصد دارید Docker، یک VPN، هستههای سفارشی یا ماشینهای مجازی خودتان را داخل سرور اجرا کنید، پیش از خرید نوع مجازیسازی را بررسی کنید. اجرای ماشینهای مجازی داخل یک VPS نیازمند KVM با قابلیت nested virtualisation است که در سمت میزبان فعال شده باشد؛ این قابلیت در تعداد محدودتری از طرحها ارائه میشود.
VPC چیست
یک VPC یک شبکهٔ تعریفشده با نرمافزار (software-defined) در داخل یک ارائهدهندهٔ خدمات ابری است. در اکثر سرویسهای ابری، شما یک محدودهٔ آدرس با نماد CIDR مانند 10.0.0.0/16 به آن اختصاص میدهید و سپس زیرشبکههایی (subnets) از آن جدا میکنید (Google Cloud محدودهٔ کلی شبکه را نادیده میگیرد و به هر زیرشبکهٔ منطقهای، محدودهٔ خاص خودش را میدهد). شما جداول مسیریابی (route tables) را به آن متصل میکنید و قوانین فایروال (security groups) را در مقابل منابع داخلی قرار میدهید. این شبکه نه CPU دارد، نه حافظه و نه دیسک. هیچ چیزی برای ورود (login) به آن وجود ندارد. حذف تمام سرورها در یک VPC باعث میشود که خود VPC همچنان باقی بماند، خالی و معمولاً رایگان.
آنچه VPC برای شما فراهم میکند، آدرسدهی خصوصی است. دو سرور در یک VPC از طریق آدرسهایی مانند 10.0.1.15 روی بستر داخلی ارائهدهنده با هم صحبت میکنند، بهطوری که ترافیک هرگز با اینترنت عمومی تماس پیدا نمیکند و به عنوان خروجی اینترنت (egress) محاسبه نمیشود. در این حالت، یک دیتابیس میتواند فقط روی آدرس خصوصی خود گوش دهد و هیچ پورتی در معرض دید جهان قرار نگیرد.
ip -4 addr showیک آدرس در محدودهٔ 10.0.0.0/8، 172.16.0.0/12 یا 192.168.0.0/16 خصوصی محسوب میشود. داشتن یک آدرس عمومی بهتنهایی باعث نمیشود که سرور از طریق اینترنت قابل دسترسی باشد: قوانین مسیریابی و فایروال نیز باید اجازهٔ دسترسی را صادر کنند.
آیا VPC سرور من را خصوصی میکند؟
خیر، و این گرانترین سوءتفاهم در مورد این سه اصطلاح است. یک VPC مسیریابی و آدرسدهی را کنترل میکند. این ابزار تصمیم نمیگیرد که آیا اینترنت میتواند به یک ماشین دسترسی داشته باشد یا خیر. اگر یک instance دارای IP عمومی باشد، زیرشبکه (subnet) آن به اینترنت متصل باشد و قوانین امنیتی اجازه دسترسی به پورت 22 را از 0.0.0.0/0 بدهند، آن سرور دقیقاً به همان اندازهای که هر سرور دیگری (چه در VPC باشد و چه نباشد) در معرض خطر است، در معرض اینترنت قرار دارد. در یک VPC پیشفرض، آن مسیر به سمت اینترنت از قبل وجود دارد. ایزولهسازی که از یک VPC دریافت میکنید، توانایی تخصیص ندادن هیچ آدرس عمومی به یک منبع، به همراه قوانینی است که مشخص میکند کدام زیرشبکهها مجاز به برقراری ارتباط با یکدیگر هستند.
این سه واژه همچنین وعده انواع متفاوتی از ایزولهسازی را میدهند. یک VM منابع محاسباتی را ایزوله میکند: هایپروایزر زمان CPU و حافظه را جدا میکند، بنابراین یک مهمان دیگر نمیتواند RAM شما را بخواند. این ایزولهسازی برای دیسک و شبکه ضعیفتر است، جایی که یک همسایه پرمصرف روی همان میزبان همچنان میتواند سرعت شما را کاهش دهد. یک VPS مبتنی بر کانتینر از یک هسته (kernel) مشترک استفاده میکند، بنابراین یک باگ در سطح هسته یک ریسک مشترک محسوب میشود. یک VPC هیچگونه ایزولهسازی در مورد منابع محاسباتی انجام نمیدهد. این ابزار فقط شبکه را شکل میدهد.
مدل ذهنی قیمتگذاری
یک VPS معمولاً با قیمت ماهانه ثابت برای یک ماشین مشخص فروخته میشود. شما پیش از شروع ماه از مبلغ صورتحساب آگاه هستید و هزینه دیسک و سهمیه انتقال داده در آن لحاظ شده است. همین پیشبینیپذیری، دلیل اصلی انتخاب VPS بهجای cloud instance برای بارهای کاری کوچک است.
یک cloud VM بهصورت متریک (ساعتی یا ثانیهای) محاسبه میشود. هزینه instance، دیسک، اسنپشاتها، load balancer و ترافیک خروجی بهصورت جداگانه محاسبه میگردد. VPC معمولاً رایگان است، اما اجزای مدیریتشدهای که به آن متصل میشوند، خیر: یک NAT gateway که به instanceهای خصوصی اجازه دسترسی به اینترنت میدهد، ساعتی محاسبه میشود و نحوه محاسبه هزینه ترافیک آن به ارائهدهنده بستگی دارد. AWS برای هر گیگابایت ترافیکی که NAT gateway پردازش میکند هزینه دریافت میکند، در حالی که OVHcloud اعلام کرده است که Public Cloud Gateway بهصورت ساعتی و بر اساس میزان استفاده محاسبه میشود و ترافیک در آن لحاظ شده است. در AWS، ترافیکی که از availability zoneها عبور میکند نیز مشمول هزینه است، در حالی که Azure برای ترافیک بین zoneهای خود در یک region واحد هزینهای دریافت نمیکند. طبق اطلاعات تاریخ 27 اکتبر 2026، راهنمای AWS VPC بیان میکند که شما در هر region یک VPC پیشفرض دارید، در حالی که در بخش FAQ مربوط به AWS VPC آمده است که حسابهای ایجادشده پیش از 18 مارس 2013 میتوانند از VPCهای پیشفرض در regionهای فعال استفاده کنند، مشروط بر اینکه قبلاً در آنجا instanceهای EC2 را اجرا نکرده یا منابع ELB، RDS، ElastiCache یا Redshift را provision نکرده باشند. یک VPC پیشفرضِ حذفشده قابل بازسازی است اما بازیابی نمیشود. Google Cloud برای هر پروژه جدید یک شبکه پیشفرض ایجاد میکند مگر اینکه مدیر سیستم آن را غیرفعال کند، و Azure نیز اگر شبکه موجودی را انتخاب نکنید، در کنار VM جدید یک شبکه مجازی میسازد. در هر صورت، cloud VM شما چه بخواهید و چه نخواهید، درون یکی از این شبکهها قرار میگیرد.
به کدام یک واقعاً نیاز دارید
- یک سرور برای وبسایت، اپلیکیشن، سرور بازی یا VPN: یک VPS. ده دقیقه اول روی یک VPS جدید اهمیت بیشتری نسبت به عنوان طرح انتخابی دارد.
- چندین سرور که باید از طریق آدرسهای خصوصی با یکدیگر در ارتباط باشند: یک VPC، یا قابلیت شبکه خصوصی که ارائهدهنده VPS شما با نامی متفاوت ارائه میدهد.
- باری کاری که باید در صورت از دسترس خارج شدن کل یک دیتاسنتر همچنان فعال بماند: یک محیط ابری با چندین zone، که به معنای استفاده از VMها درون یک VPC است.
- کنترل کامل بر kernel، یا اجرای hypervisor شخصی روی آن: یک VPS مبتنی بر KVM (در صورت نیاز به hypervisor، قابلیت nested virtualisation را فعال کنید) یا یک سرور اختصاصی؛ هنگام مقایسه، حتماً نوع دیسک پشت طرح را بررسی کنید.
بیشتر پروژههای تکسروره هرگز به VPC نیاز ندارند. قابلیت شبکه خصوصی که همراه با VPS ارائه میشود، همین نیاز را برای تعداد کمی ماشین بهخوبی پوشف میکند.
FAQ
آیا VPS همان VM است؟
معمولاً بله، اما نه همیشه. هر VPS که بر پایه KVM، Xen یا VMware ساخته شده باشد یک ماشین مجازی (VM) است، اما هر ماشین مجازی لزوماً VPS نیست؛ چرا که VMای که روی لپتاپ شما در VirtualBox اجرا میشود، محصول تجاری هیچ شرکتی نیست. همچنین هر VPSای هم VM نیست: پلنهایی که بر پایه OpenVZ یا LXC هستند، در واقع کانتینرهایی هستند که از هسته (kernel) میزبان بهصورت اشتراکی استفاده میکنند، با این حال خود OpenVZ به کانتینرهایش سرور مجازی خصوصی میگوید. پیش از آنکه به دسترسی به هسته وابسته شوید، این موضوع را با systemd-detect-virt تایید کنید.
آیا میتوانم یک VPS را درون یک VPC قرار دهم؟
معمولاً خیر، زیرا VPC یک ساختار متعلق به یک ارائهدهنده ابری خاص است؛ AWS همچنین از اشتراکگذاری زیرشبکهها (subnets) بین حسابهای یک سازمان واحد پشتیبانی میکند. یک VPS از یک ارائهدهنده مستقل، در شبکه همان ارائهدهنده قرار دارد. اگر به ارتباط خصوصی بین این دو نیاز دارید، باید یک تونل VPN بین آنها ایجاد کنید تا VPS بتواند از طریق آن به زیرشبکههای خصوصی دسترسی پیدا کند.
چرا صورتحساب ابری من از یک VPS مشابه بیشتر است؟
قیمت instance تنها بخشی از هزینه است. فضای ذخیرهسازی، اسنپشاتها، ترافیک خروجی، لود بالانسرها و NAT gatewayها در سرویسهای ابریِ مبتنی بر مصرف، ردیفهای هزینهای جداگانهای هستند و هزینه یک NAT gateway بهتنهایی میتواند در ماه از یک VPS کوچک بیشتر باشد. یک VPS با قیمت ثابت، هزینه دیسک و سهمیه انتقال داده را در یک عدد واحد ادغام میکند، به همین دلیل است که اجرای یک بار کاری (workload) مشابه در آنجا اغلب ارزانتر به نظر میرسد.
چگونه بررسی کنم که آیا سرور من دسترسی واقعی به هسته (kernel) دارد؟
دستور systemd-detect-virt را اجرا کنید و خروجی آن را بخوانید. خروجیهای kvm، xen یا vmware (یا amazon در instanceهای جدیدتر EC2) به این معنی است که شما هسته اختصاصی خود را دارید و modprobe میتواند ماژولها را در آن بارگذاری کند. خروجیهای lxc، lxc-libvirt یا openvz به این معنی است که شما از هسته میزبان بهصورت اشتراکی استفاده میکنید؛ بارگذاری ماژولها در این حالت نیازمند دسترسیهای هسته میزبان است، در حالی که تنظیمات namespaced تحت /proc/sys، از جمله تنظیمات شبکه، در صورتی که میزبان اجازه دهد قابل پیکربندی باقی میمانند. تایید دوم، دستور uname -r است که در پلنهای کانتینری اغلب نسخهای از هسته را گزارش میدهد که توزیع سیستمعامل شما هرگز آن را ارائه نکرده است.