آیا WireGuard VPN عالی آینده است؟

آیا WireGuard VPN عالی آینده است؟

زمان آن فرا رسیده است که VPN دیگر ابزار عجیب و غریب مدیران سیستم ریشو نیست. کاربران وظایف مختلفی دارند، اما واقعیت این است که همه به VPN نیاز دارند.

مشکل راه‌حل‌های VPN فعلی این است که پیکربندی صحیح آنها دشوار است، نگهداری آن گران است و مملو از کدهای قدیمی با کیفیت مشکوک است.

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

مزایای ادعا شده WireGuard نسبت به سایر راه حل های VPN:

  • آسان برای استفاده.
  • از رمزنگاری مدرن استفاده می کند: چارچوب پروتکل نویز، Curve25519، ChaCha20، Poly1305، BLAKE2، SipHash24، HKDF و غیره.
  • کد فشرده، قابل خواندن، آسان تر برای بررسی آسیب پذیری ها.
  • عملکرد بالا
  • واضح و مفصل مشخصات.

گلوله نقره ای پیدا شده است؟ آیا زمان دفن OpenVPN و IPSec فرا رسیده است؟ تصمیم گرفتم با این موضوع کنار بیایم و در عین حال انجام دادم اسکریپت برای نصب خودکار سرور VPN شخصی.

اصول کار

اصول عملیات را می توان چیزی شبیه به این شرح داد:

  • یک رابط WireGuard ایجاد می شود و یک کلید خصوصی و آدرس IP به آن اختصاص می یابد. تنظیمات سایر همتایان بارگذاری می شوند: کلیدهای عمومی، آدرس های IP و غیره.
  • تمام بسته های IP که به رابط WireGuard می رسند در UDP و کپسوله می شوند با خیال راحت تحویل داده شد سایر همسالان
  • کلاینت ها آدرس IP عمومی سرور را در تنظیمات مشخص می کنند. سرور به طور خودکار آدرس های خارجی کلاینت ها را زمانی که داده های احراز هویت صحیح از آنها دریافت می شود، تشخیص می دهد.
  • سرور می تواند آدرس IP عمومی را بدون وقفه در کار خود تغییر دهد. در همان زمان، یک هشدار به مشتریان متصل ارسال می کند و آنها پیکربندی خود را در پرواز به روز می کنند.
  • از مفهوم مسیریابی استفاده می شود مسیریابی رمزنگاری. WireGuard بسته ها را بر اساس کلید عمومی همتا می پذیرد و ارسال می کند. هنگامی که سرور یک بسته به درستی احراز هویت شده را رمزگشایی می کند، فیلد src آن بررسی می شود. اگر با پیکربندی مطابقت دارد allowed-ips همتا تایید شده، بسته توسط رابط WireGuard دریافت می شود. هنگام ارسال یک بسته خروجی، روال مربوطه اتفاق می افتد: فیلد dst بسته گرفته می شود و بر اساس آن، همتای مربوطه انتخاب می شود، بسته با کلید خود امضا می شود، با کلید همتا رمزگذاری می شود و به نقطه پایانی راه دور ارسال می شود. .

تمام منطق اصلی WireGuard کمتر از 4 هزار خط کد را اشغال می کند، در حالی که OpenVPN و IPSec صدها هزار خط دارند. برای پشتیبانی از الگوریتم‌های رمزنگاری مدرن، پیشنهاد می‌شود یک API رمزنگاری جدید در هسته لینوکس اضافه شود. روی. در حال حاضر بحثی در حال انجام است که آیا این ایده خوبی است یا خیر.

کارایی

حداکثر مزیت عملکرد (در مقایسه با OpenVPN و IPSec) در سیستم های لینوکس قابل توجه خواهد بود، زیرا WireGuard به عنوان یک ماژول هسته در آنجا پیاده سازی شده است. علاوه بر این، macOS، Android، iOS، FreeBSD و OpenBSD پشتیبانی می‌شوند، اما WireGuard در آنها با تمام عواقب عملکردی در فضای کاربران اجرا می‌شود. انتظار می رود در آینده نزدیک پشتیبانی ویندوز اضافه شود.

نتایج محک با وب سایت رسمی شرکت:

آیا WireGuard VPN عالی آینده است؟

تجربه استفاده من

من متخصص VPN نیستم. من یک بار OpenVPN را به صورت دستی تنظیم کردم و بسیار خسته کننده بود و حتی IPSec را امتحان نکردم. تصمیمات زیادی برای گرفتن وجود دارد، بسیار آسان است که به پای خود شلیک کنید. بنابراین، من همیشه از اسکریپت های آماده برای پیکربندی سرور استفاده می کردم.

بنابراین، WireGuard، از دیدگاه من، به طور کلی برای کاربر ایده آل است. تمام تصمیمات سطح پایین در مشخصات گرفته می شود، بنابراین فرآیند آماده سازی یک زیرساخت VPN معمولی تنها چند دقیقه طول می کشد. تقلب در پیکربندی تقریبا غیرممکن است.

مراحل نصب به تفصیل شرح داده شده است در وب سایت رسمی، من می خواهم به طور جداگانه به موارد عالی اشاره کنم پشتیبانی از OpenWRT.

کلیدهای رمزگذاری توسط ابزار تولید می شوند wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

بعد، شما باید یک پیکربندی سرور ایجاد کنید /etc/wireguard/wg0.conf با محتوای زیر:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

و تونل را با یک اسکریپت بالا ببرید wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

در سیستم های دارای systemd می توانید به جای آن از این استفاده کنید sudo systemctl start [email protected].

در دستگاه مشتری، یک پیکربندی ایجاد کنید /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Внешний IP сервера
PersistentKeepalive = 25 

و تونل را به همین ترتیب بالا بیاورید:

sudo wg-quick up /etc/wireguard/wg0.conf

تنها چیزی که باقی می ماند این است که NAT را روی سرور پیکربندی کنید تا کلاینت ها بتوانند به اینترنت دسترسی داشته باشند و کار شما تمام است!

این سهولت استفاده و فشرده بودن پایه کد با حذف عملکرد توزیع کلید به دست آمد. هیچ سیستم گواهی پیچیده و این همه وحشت شرکتی وجود ندارد؛ کلیدهای رمزگذاری کوتاه بسیار شبیه کلیدهای SSH توزیع می شوند. اما این یک مشکل ایجاد می کند: پیاده سازی WireGuard در برخی از شبکه های موجود چندان آسان نخواهد بود.

در میان معایب، شایان ذکر است که WireGuard از طریق پروکسی HTTP کار نخواهد کرد، زیرا فقط پروتکل UDP به عنوان یک انتقال در دسترس است. این سوال مطرح می شود: آیا می توان پروتکل را مبهم کرد؟ البته، این وظیفه مستقیم VPN نیست، اما برای مثال OpenVPN، راه هایی برای پنهان کردن خود به عنوان HTTPS وجود دارد که به ساکنان کشورهای توتالیتر کمک می کند تا به طور کامل از اینترنت استفاده کنند.

یافته ها

به طور خلاصه، این یک پروژه بسیار جالب و امیدوارکننده است، شما می توانید از آن در سرورهای شخصی استفاده کنید. چه سودی دارد؟ عملکرد بالا در سیستم های لینوکس، سهولت راه اندازی و پشتیبانی، پایه کد فشرده و قابل خواندن. با این حال، خیلی زود است که برای انتقال یک زیرساخت پیچیده به WireGuard عجله کنیم؛ باید منتظر گنجاندن آن در هسته لینوکس باشیم.

برای صرفه جویی در وقت من (و شما)، توسعه دادم نصب کننده اتوماتیک WireGuard. با کمک آن می توانید یک VPN شخصی برای خود و دوستان خود راه اندازی کنید بدون اینکه حتی چیزی در مورد آن بدانید.

منبع: www.habr.com

اضافه کردن نظر