زمان آن فرا رسیده است که 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 در آنها با تمام عواقب عملکردی در فضای کاربران اجرا میشود. انتظار می رود در آینده نزدیک پشتیبانی ویندوز اضافه شود.
من متخصص VPN نیستم. من یک بار OpenVPN را به صورت دستی تنظیم کردم و بسیار خسته کننده بود و حتی IPSec را امتحان نکردم. تصمیمات زیادی برای گرفتن وجود دارد، بسیار آسان است که به پای خود شلیک کنید. بنابراین، من همیشه از اسکریپت های آماده برای پیکربندی سرور استفاده می کردم.
بنابراین، WireGuard، از دیدگاه من، به طور کلی برای کاربر ایده آل است. تمام تصمیمات سطح پایین در مشخصات گرفته می شود، بنابراین فرآیند آماده سازی یک زیرساخت VPN معمولی تنها چند دقیقه طول می کشد. تقلب در پیکربندی تقریبا غیرممکن است.
تنها چیزی که باقی می ماند این است که NAT را روی سرور پیکربندی کنید تا کلاینت ها بتوانند به اینترنت دسترسی داشته باشند و کار شما تمام است!
این سهولت استفاده و فشرده بودن پایه کد با حذف عملکرد توزیع کلید به دست آمد. هیچ سیستم گواهی پیچیده و این همه وحشت شرکتی وجود ندارد؛ کلیدهای رمزگذاری کوتاه بسیار شبیه کلیدهای SSH توزیع می شوند. اما این یک مشکل ایجاد می کند: پیاده سازی WireGuard در برخی از شبکه های موجود چندان آسان نخواهد بود.
در میان معایب، شایان ذکر است که WireGuard از طریق پروکسی HTTP کار نخواهد کرد، زیرا فقط پروتکل UDP به عنوان یک انتقال در دسترس است. این سوال مطرح می شود: آیا می توان پروتکل را مبهم کرد؟ البته، این وظیفه مستقیم VPN نیست، اما برای مثال OpenVPN، راه هایی برای پنهان کردن خود به عنوان HTTPS وجود دارد که به ساکنان کشورهای توتالیتر کمک می کند تا به طور کامل از اینترنت استفاده کنند.
یافته ها
به طور خلاصه، این یک پروژه بسیار جالب و امیدوارکننده است، شما می توانید از آن در سرورهای شخصی استفاده کنید. چه سودی دارد؟ عملکرد بالا در سیستم های لینوکس، سهولت راه اندازی و پشتیبانی، پایه کد فشرده و قابل خواندن. با این حال، خیلی زود است که برای انتقال یک زیرساخت پیچیده به WireGuard عجله کنیم؛ باید منتظر گنجاندن آن در هسته لینوکس باشیم.
برای صرفه جویی در وقت من (و شما)، توسعه دادم نصب کننده اتوماتیک WireGuard. با کمک آن می توانید یک VPN شخصی برای خود و دوستان خود راه اندازی کنید بدون اینکه حتی چیزی در مورد آن بدانید.