SSD Nodes Learn 8GB RAM — سالی $66
راهنماها Matt Connorتوسط Matt Connor · به‌روزرسانی شده 2026-08-01

WireGuard یا OpenVPN برای self-host کدام بهتر است؟

برای بیشتر کاربران self-host، WireGuard از نظر سرعت، حجم پیکربندی و سطح ممیزی بهتر است؛ اما 4 مورد مشخص وجود دارد که OpenVPN انتخاب مناسب‌تری خواهد بود.

پاسخ کوتاه

برای یک نفر که VPN server را روی VPS شخصی خود اجرا می‌کند، مقایسه WireGuard و OpenVPN رقابت نزدیکی نیست: WireGuard را انتخاب کنید. WireGuard کوچک‌تر است، داخل Linux kernel اجرا می‌شود، در کسری از ثانیه متصل می‌شود و پیکربندی client فعال آن حدود 10 خط است. OpenVPN چهار کاربرد واقعی دارد و اگر هیچ‌کدام از آن‌ها برای شما مطرح نیست، به آن نیاز ندارید.

این چهار کاربرد عبارت‌اند از عبور از شبکه‌ای که فقط TCP port 443 را مجاز می‌داند، اتصال به یک certificate authority موجود، احراز هویت کاربران نام‌برده با password یا عامل دوم، و bridge کردن در Layer 2. تمام مطالب زیر شواهد این توصیه و نقطه دقیق آغاز کاربرد هر استثنا برای شماست.

چرا WireGuard برای مدیران مستقل برتری پیدا کرد

خواندن کد آن به‌اندازه کافی آسان است. پروژه WireGuard پیاده‌سازی پروتکل خود را در حدود 4,000 خط کد ارائه می‌کند. با احتساب کتابخانه OpenSSL که OpenVPN برای همه عملیات رمزنگاری به آن متکی است، کد OpenVPN به بیش از 100,000 خط می‌رسد. اندازه اهمیت دارد، زیرا هر خط کد سطح حمله است و نه شما و نه بازبینتان قرار نیست 100,000 خط را بخوانید. اما می‌توانید 4,000 خط را بخوانید.

در kernel اجرا می‌شود. WireGuard از Linux 5.6 در شاخه اصلی آن قرار دارد؛ بنابراین Ubuntu 24.04 و Debian 13 آن را بدون نیاز به کامپایل عرضه می‌کنند. بسته‌ها در همان جایی رمزنگاری می‌شوند که از قبل قرار دارند، یعنی در فضای kernel، و نیازی به کپی‌کردن آن‌ها به یک فرایند userspace و بازگرداندنشان نیست. ابتدا این مورد را بررسی کنید:

sudo modprobe wireguard && echo ok

در یک KVM VPS، این دستور ok را چاپ می‌کند. در مجازی‌سازی کانتینری که kernel میزبان را به اشتراک می‌گذارد، مانند OpenVZ یا LXC، با Operation not supported شکست می‌خورد، زیرا نمی‌توانید ماژولی را در kernelای بارگذاری کنید که متعلق به شما نیست.

چیزی برای مذاکره وجود ندارد. WireGuard فقط یک مجموعه رمز ثابت دارد: ChaCha20-Poly1305 برای داده‌ها و کلیدهای Curve25519. نسخه‌ای وجود ندارد که بتوان آن را به نسخه پایین‌تر تنزل داد و گزینه‌ای هم نیست که اشتباه انتخاب شود. OpenVPN مجموعه رمز و نسخه TLS (امنیت لایه انتقال) را با هر client مذاکره می‌کند. این انعطاف‌پذیری است، اما محل بروز پیکربندی نادرست نیز هست. سروری که با data-ciphers AES-256-GCM:AES-128-CBC رها شده باشد، برای clientای که گزینه بهتری ارائه نمی‌کند، با رضایت به رمز CBC برمی‌گردد و هیچ‌چیز در log این وضعیت را مشکل اعلام نمی‌کند.

پورت پاسخ نمی‌دهد. بسته WireGuard که بررسی احراز اصالت پیام را رد کند، بدون هیچ پاسخی حذف می‌شود؛ بنابراین nmap -sU -p 51820 در هر حال open|filtered را برمی‌گرداند، چه چیزی در حال گوش‌دادن باشد و چه نباشد. سرور OpenVPN در حالت TCP، پیش از آنکه تصمیم بگیرد دسترسی شما را رد کند، handshake مربوط به TCP را کامل می‌کند. همین برای اثبات وجود یک سرویس به scanner کافی است. اجرای OpenVPN روی UDP همراه با tls-crypt تقریباً به همین اندازه بی‌پاسخ است؛ بنابراین این استدلالی علیه اجرای OpenVPN روی TCP است، نه علیه خود OpenVPN.

جابجایی بین شبکه‌ها هزینه‌ای ندارد. یک peer در WireGuard با کلید عمومی خود شناسایی می‌شود، نه با آدرسش. laptop شما از شبکه خانگی به mobile hotspot منتقل می‌شود، یک handshake از آدرس جدید ارسال می‌کند و server، endpointای را که به آن پاسخ می‌دهد به‌روزرسانی می‌کند. چیزی دوباره متصل نمی‌شود، زیرا از ابتدا اتصال پایداری وجود نداشته است. OpenVPN با float می‌تواند کاری مشابه انجام دهد، اما client معمولاً نشست کامل TLS را می‌بندد و دوباره ایجاد می‌کند. به همین دلیل مکث هنگام بازشدن درِ laptop در OpenVPN محسوس است، اما در WireGuard نیست.

سرعت در 2026: فاصله کمتر شده است

سال‌ها استدلال درست درباره سرعت این بود که OpenVPN هر بسته را به فضای کاربر کپی می‌کند، آن را همان‌جا رمزگذاری می‌کند و سپس دوباره به فضای هسته کپی می‌کند؛ درحالی‌که WireGuard هرگز از فضای هسته خارج نمی‌شود. این دیگر تمام ماجرا نیست و مقایسه‌ای که این تغییر را نادیده بگیرد، قدیمی است.

OpenVPN 2.7 در فوریه 2026 با پشتیبانی از ماژول هسته بالادستی ovpn منتشر شد؛ این ماژول در Linux 6.16 ادغام شده است. این قابلیت DCO (data channel offload) نام دارد: کانال کنترل در فضای کاربر باقی می‌ماند و مسیر داده اصلی به هسته منتقل می‌شود؛ تقریباً همان کاری که WireGuard همیشه انجام داده است. در هسته و نسخه OpenVPN جدیدی که بتوانند از این قابلیت استفاده کنند، توان عملیاتی در یک رده قرار می‌گیرد، نه در دو رده متفاوت. آنچه واقعاً در اختیار دارید بررسی کنید:

uname -r
openvpn --version | head -n 1
modinfo ovpn 2>/dev/null | head -n 3

از ژوئیه 2026، نسخه استاندارد Ubuntu 24.04 LTS، OpenVPN 2.6 را ارائه می‌کند، نه 2.7؛ و ماژول ovpn به نسخه 2.7 نیاز دارد. در این نسخه، offload فقط از طریق بسته قدیمی‌تر openvpn-dco-dkms در دسترس است. این بسته یک ماژول خارج از درخت را در برابر هسته در حال اجرای شما می‌سازد و بنابراین پس از هر ارتقای هسته باید دوباره ساخته شود. این یک مؤلفه متغیر است که WireGuard ندارد.

پیش از آنکه DCO را دلیلی برای ادامه استفاده از OpenVPN بدانید، محدودیت‌های آن را دقیق بخوانید. این قابلیت فقط از تونل‌های Layer 3 پشتیبانی می‌کند، فقط cipherهای AEAD را می‌پذیرد (رمزگذاری تأییدشده همراه با داده مرتبط: AES-GCM یا ChaCha20-Poly1305)، از فشرده‌سازی پشتیبانی نمی‌کند و در سمت سرور فقط با topology subnet کار می‌کند. هر یک از این محدودیت‌ها بخشی از انعطاف‌پذیری OpenVPN را از بین می‌برد؛ همان انعطاف‌پذیری که در اصل مزیت OpenVPN محسوب می‌شد. OpenVPN سریع، همان OpenVPN است که طوری پیکربندی شده تا شبیه WireGuard عمل کند.

به عدد توان عملیاتی منتشرشده توسط دیگران، ازجمله این صفحه، اعتماد نکنید. سقف عملکرد در یک VPS معمولاً به سهم CPU یا سهم شبکه محدود می‌شود، نه به پروتکل. مقدار را با iperf3 که از طریق تونل اجرا می‌شود اندازه‌گیری کنید، سپس همان آزمایش را خارج از تونل انجام دهید و دو نتیجه را مقایسه کنید.

جاهایی که OpenVPN همچنان کاربرد دارد

باید از طریق TCP port 443 به بیرون متصل شوید. WireGuard عمداً فقط UDP است و حالت TCP برای آن ارائه نخواهد شد. شبکه هتل یا proxy سازمانی که فقط TCP 443 را مجاز می‌داند، OpenVPN را در صورت پیکربندی با proto tcp-server و port 443 عبور می‌دهد، زیرا این ترافیک شبیه یک نشست معمولی TLS است. WireGuard برای عبور از همان شبکه به یک wrapper مانند wstunnel یا udp2raw نیاز دارد؛ در نتیجه باید یک فرایند دیگر را اجرا و به‌روزرسانی امنیتی کنید. به این تداخل توجه کنید: اگر یک web server در همان IP address از قبل TCP 443 را در اختیار دارد، یکی از این دو باید به port دیگری منتقل شود.

از قبل یک certificate authority اجرا می‌کنید. OpenVPN با X.509 certificates احراز هویت می‌کند؛ بنابراین مستقیماً در PKI (public key infrastructure) که از قبل اداره می‌کنید قرار می‌گیرد. Certificates به‌صورت خودکار منقضی می‌شوند و با افزودن یک certificate به certificate revocation list که server از طریق crl-verify می‌خواند، آن را باطل می‌کنید. WireGuard certificate، انقضا یا certificate revocation list ندارد. حذف یک peer به معنای ویرایش server config و بارگذاری مجدد آن است. برای 10 peer این کار مشکلی ندارد. اما برای 400 peer، در شرایطی که audit الزامی است، مدل certificate واقعاً بار مدیریتی شما را کاهش می‌دهد.

به کاربران نام‌دار نیاز دارید، نه فقط keyها. OpenVPN می‌تواند احراز هویت را با auth-user-pass-verify یا افزونه‌ای مانند openvpn-plugin-auth-pam.so به یک سیستم خارجی واگذار کند؛ به این ترتیب می‌توان LDAP یا عامل دوم مبتنی بر رمز یک‌بارمصرف را اضافه کرد. WireGuard اصلاً مفهومی به نام user ندارد. یک key یا در config قرار دارد یا ندارد. اگر نیاز شما این است که «Sara باید کدی را از تلفن خود وارد کند»، WireGuard به‌تنهایی نمی‌تواند چنین سازوکاری را پیاده‌سازی کند.

به Layer 2 یا client برای یک سیستم قدیمی نیاز دارید. OpenVPN با dev tap فریم‌های Ethernet را bridge می‌کند؛ این قابلیت برای پروتکل‌های broadcast و بازی‌های قدیمی LAN اهمیت دارد. WireGuard فقط Layer 3 است و همیشه همین‌طور خواهد بود. OpenVPN همچنین clientهایی برای hardware و operating systemهایی دارد که هرگز برنامه WireGuard را دریافت نخواهند کرد. هر دوی این موارد به‌تدریج اهمیت کمتری پیدا می‌کنند و dev tap با DCO سازگار نیست؛ بنابراین هنگام استفاده از bridge، مسیر کندتر را انتخاب می‌کنید.

هزینه واقعی این دو راه‌اندازی برای شما

هویت WireGuard با یک فرمان ایجاد می‌شود. پرانتزها مهم هستند، زیرا پیش از ایجاد کلید، حالت فایل را تنظیم می‌کنند:

(umask 077; wg genkey > private.key)
wg pubkey < private.key > public.key

معادل OpenVPN، یک مرجع صدور گواهی است که تا زمانی که VPN فعال است، مسئولیت آن با شما خواهد بود:

sudo apt install -y easy-rsa
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server

هیچ‌یک از این فهرست‌ها ناعادلانه نیست. CA امکان انقضا و ابطال را فراهم می‌کند، اما در مقابل، باید یک کلید خصوصی را برای سال‌ها محافظت کنید، تمدید گواهی را به خاطر بسپارید و در صورت گم‌کردن آن، سامانه را دوباره بسازید. اگر از قابلیت‌هایی که CA فراهم می‌کند استفاده نمی‌کنید، هزینه‌ای بدون فایده پرداخت می‌کنید. روش کامل WireGuard، شامل forwarding، NAT (ترجمه نشانی شبکه) و خطاهای handshake که ساعت‌ها زمان شما را تلف می‌کنند، در راهنمای میزبانی شخصی یک WireGuard VPN روی VPS آمده است.

هرکدام از فایروال شما چه می‌خواهند

WireGuard دقیقاً به یک قانون ورودی نیاز دارد؛ این قانون باید برای UDP و پورتی باشد که در ListenPort مشخص شده است:

sudo ufw allow 51820/udp
sudo ufw status verbose

OpenVPN به‌صورت پیش‌فرض به UDP روی پورت 1194 نیاز دارد، یا اگر آن مسیر را انتخاب کرده باشید، به TCP روی پورت 443 نیازمند است. سپس هر دو پروتکل به فعال بودن IP forwarding و یک قانون source NAT نیاز دارند، زیرا یک سیستم Linux بسته‌هایی را که برای آن آدرس‌دهی نشده‌اند، حذف می‌کند. این بخش برای هر دو پروتکل یکسان است و بیشتر گزارش‌های «تونل متصل می‌شود، اما اینترنت وجود ندارد» از همین‌جا ناشی می‌شوند. اگر ufw برای شما جدید است، با مبانی فایروال ufw در یک VPS شروع کنید و به یاد داشته باشید که بیشتر ارائه‌دهندگان، یک network firewall دوم را نیز در control panel خود اجرا می‌کنند: اگر بسته هرگز به سرور نرسد، قانونی که روی سرور اضافه کرده‌اید هیچ اثری ندارد. درک پورت چیست و Linux چگونه روی آن به درخواست‌ها گوش می‌دهد بررسی هر دو مورد را سریع‌تر می‌کند.

نحوه انتخاب، در یک پاراگراف

WireGuard را اجرا کنید، مگر اینکه بتوانید مورد مشخصی را نام ببرید که این ابزار نمی‌تواند برای شما انجام دهد. اگر برای عبور از یک شبکه محدودکننده به TCP 443 نیاز دارید، OpenVPN را در همان‌جا اجرا کنید و اجرای هر دو را نیز در نظر بگیرید: این دو از پورت‌های متفاوت استفاده می‌کنند و بدون تداخل روی یک سرور هم‌زمان کار می‌کنند. اگر به حساب‌های کاربری مجزا یا عامل دوم نیاز دارید، برای تحمیل این قابلیت به WireGuard تلاش نکنید. در عوض، یک لایه هویتی در بالای آن قرار دهید. یک سرور کنترلی Headscale با میزبانی خودتان در لایه زیرین از WireGuard استفاده می‌کند و مدل حساب کاربری، توزیع کلید و تأیید دستگاه را اضافه می‌کند؛ قابلیت‌هایی که WireGuard ساده بر عهده خودتان می‌گذارد.

مهاجرت از OpenVPN بدون قطعی

تبدیلی وجود ندارد. PKI مربوط به OpenVPN به کلیدهای WireGuard تبدیل نمی‌شود، زیرا WireGuard گواهی‌ای ندارد که بتوان آن را تبدیل کرد. برای هر کلاینت یک جفت‌کلید جدید ایجاد کنید؛ این جفت‌کلید با همان روشی تولید می‌شود که جفت‌کلید سرور تولید می‌شود.

به‌جای تعویض ناگهانی، مهاجرت را به‌صورت موازی انجام دهید. WireGuard روی UDP 51820 و OpenVPN روی 1194 می‌توانند هم‌زمان روی همان سیستم اجرا شوند. بنابراین wg0 را راه‌اندازی کنید، با sudo wg show و نمایش یک latest handshake اخیر آن را تأیید کنید، سپس کلاینت‌ها را یکی‌یکی منتقل کنید. وقتی فهرست peerهای OpenVPN دیگر تغییری نکرد، سرویس را با sudo systemctl disable --now openvpn-server@server متوقف کنید. فایل‌های CA را تا زمانی که مطمئن نشده‌اید نگه دارید، زیرا بازسازی یک کلاینت revoked با CA حذف‌شده ممکن نیست.

یک مورد واقعاً منتقل نمی‌شود: حساب‌های مبتنی بر نام کاربری و گذرواژه، و سابقه ابطال مرتبط با آن‌ها. پیش از خاموش کردن سرور قدیمی مشخص کنید این اطلاعات در کجا نگهداری می‌شوند، نه پس از آن.

FAQ

آیا WireGuard از OpenVPN سریع‌تر است؟

در یک سرور استاندارد Ubuntu 24.04، پاسخ مثبت است و اختلاف نیز زیاد است؛ زیرا WireGuard داده‌ها را در kernel رمزگذاری می‌کند، درحالی‌که OpenVPN 2.6 هر بسته را از یک فرایند userspace عبور می‌دهد. با OpenVPN 2.7 و ماژول kernel موسوم به ovpn در Linux 6.16، مسیر داده نیز در kernel قرار دارد و این دو در یک رده هستند. سرعت اتصال خود را با iperf3 در سراسر تونل اندازه‌گیری کنید و به عددی از یک وبلاگ اعتماد نکنید؛ زیرا در یک VPS، محدودیت معمولاً CPU یا سهمیه پهنای‌باند شماست.

آیا WireGuard می‌تواند روی TCP port 443 اجرا شود؟

به‌تنهایی خیر. WireGuard ذاتاً فقط از UDP استفاده می‌کند و برنامه‌ای برای افزودن حالت TCP وجود ندارد. برای عبور از شبکه‌ای که فقط TCP 443 را مجاز می‌داند، آن را در تونلی مانند wstunnel یا udp2raw قرار دهید. این کار به اجرای یک فرایند و اعمال وصله در هر دو سمت نیاز دارد. اگر این محدودیت در محیط کاری معمول شما وجود دارد، OpenVPN با proto tcp-server و port 443 گزینه ساده‌تری است.

آیا OpenVPN اکنون ناامن است؟

خیر. یک OpenVPN به‌روز که از یک رمزنگاری AEAD مانند AES-256-GCM استفاده می‌کند و tls-crypt در آن فعال است، یک VPN مطمئن است. دلیل ترجیح WireGuard چیز دیگری است: OpenVPN کد و گزینه‌های بسیار بیشتری دارد. بنابراین راه‌های بسیار بیشتری برای پیکربندی نادرست آن در اختیار مدیر خسته قرار می‌دهد. گزینه‌های کمتر یعنی خطاهای کمتر.

برای یک VPN شخصی روی VPS کدام گزینه را انتخاب کنم؟

WireGuard. برای هر دستگاه یک جفت کلید، یک فایل پیکربندی حدوداً ده‌خطی، یک UDP port باز، و یک handshake که پیش از آنکه متوجه شروعش شوید تمام می‌شود. فقط در صورتی OpenVPN را انتخاب کنید که مرتباً از شبکه‌هایی متصل می‌شوید که UDP را مسدود می‌کنند، یا باید با یک certificate authority یا user directory موجود سازگار شوید.