Создаем свой VPN с защищенным от блокировок протоколом AmneziaWG, или WireGuard на максималках
Создаем свой VPN с защищенным от блокировок протоколом AmneziaWG, или WireGuard на максималках
Всем привет! Возможно уже совсем скоро разные новостные и IT‑ресурсы будут подчищать информацию о способах обхода блокировок. А пока этого не случилось, запасаемся полезными гайдами и разворачиваем свои собственные VPN с защищенными от блокировок протоколами. Расскажу как это сделать, как изменилась Amnezia и как мы защитили WireGuard от блокировок.
Мини‑гайд в конце статьи, а я сначала скажу пару слов о проекте. Amnezia — это бесплатное self‑hosted приложение с открытым исходным кодом. Amnezia позволяет в два клика создать персональный VPN на личном сервере. Пользователю нужно просто приобрести виртуальный сервер (VPS) у любого VPS‑провайдера и ввести данные сервера в приложение и выбрать уровень цензуры его регионе. Более подробно о принципе работы в предыдущей статье.
За время существования проекта мы добавили множество протоколов, среди них WireGuard, OpenVPN и IKEv2 для Windows. А после начала массовых блокировок сайтов и VPN‑протоколов на территории России мы серьезно задумались об уязвимостях перед системами DPI и добавили поддержку ShadowSocks и OpenVPN over Cloak.
ShadowSocks первых версий оказался уязвим к блокировкам во многих странах, поэтому в будущем мы планируем его добавить в более современной и защищенной интерпретации. OpenVPN over Cloak, напротив, оказался очень устойчивым к блокировкам, и сейчас используется жителями Ирана, Туркменистана и Китая. Это одно из тех немногих решений, которое, на данный момент, не подвержено блокировкам в этих регионах.
Несмотря на все преимущества, OpenVPN over Cloak во многих случаях замедляет работу интернета, поэтому мы занялись поисками защищенного протокола с более высокой скоростью работы. Мы много думали, и временно отложив другие задачи, пришли к решению — просто защитить любимый всеми WireGuard. Так на основе WireGuard‑GO, мы выпустили собственный форк — AmneziaWG. Он уже доступен в приложении Amnezia.
Немного о принципе работы AmneziaWG
Протоколработает в рамках обратной совместимости. То есть реализация AmneziaWG позволяет изменить некоторые статичные параметры в WireGuard, по которым этот протокол обычно и распознают системы DPI. А если оставить эти параметры по умолчанию (равными 0), то протокол работает как обычный WireGuard.
В AmneziaWG изменены заголовки всех пакетов: пакета рукопожатия (Initiator to Responder), ответного пакета (Responder to Initiator), пакета данных, а также специального пакета «Under Load» — по умолчанию они имеют рандомные значения, но их можно самостоятельно поменять в настройках.
Так как заголовки пакетов у каждого пользователя разные, то написать универсальное правило на основе заголовков для систем отслеживания, чтобы вычислить протокол и заблокировать, просто невозможно.
Еще одно слабое место WireGuard — это размеры пакетов авторизации. В AmneziaWG к каждому auth‑пакету дописываются рандомные байты, чтобы изменить их размер. Так «init и response пакеты» рукопожатия дополнительно имеют «мусор» в начале данных, размер которого определяется значениями S1 и S2. По умолчанию инициирующий пакет рукопожатия имеет фиксированный размер (148 байт), а после добавления мусора, его размер будет равен 148 байтам +S1.
В реализации AmneziaWG предусмотрен и еще один трюк для более надежной маскировки. Перед началом сессии Amnezia отправляет некоторое количество «мусорных» пакетов, чтобы окончательно запутать системы DPI. Количество таких пакетов и их минимальный и максимальный размер в байтах тоже задается в настройках, параметрами Jc, Jmin и Jmax.
Нам уже удалось успешно протестировать AmneziaWG в Китае и в России. Оказалось, что по скорости оно практически не уступает обычному WireGuard. Кстати, будем рады, если вы присоединитесь к тестированию и напишите нам свои впечатление на почту [email protected], как начать тестирование описано в мини‑гайде, в конце статьи.
Немного о новом дизайне Amnezia.
Кроме нового протокола, Amnezia 4 версии кардинально отличается от предыдущих версий дизайном. Три года назад Amnezia была проектом одного человека, именно тогда был создан дизайн неизменный до сегодняшнего дня. Сейчас Amnezia — приложение с множеством протоколов и сервисов, над которым работает целая команда. Мы стараемся сделать его приятнее для использования.
Так четвертая версия теперь исполнена полностью в темной теме. Мы также постарались сделать приложение намного понятнее, чтобы каждый пользователь смог найти ту функцию или кнопку, которая ему нужна. Еще мы увеличили скорость работы UI, что позволяет избавится от микро‑задержек и старых багов. Так же были исправлены регрессионные баги из 3 версии приложения и добавлены удобные мелочи. Самая главное — к Английскому мы наконец добавили Русский и Китайский языки, и в ближайшем будущем планируем добавить Фарси.
Кроме приложения у нас появился новый Сайт с 30 новыми инструкциями для каждого пользовательского сценария, и переработан раздел с инструкциями по покупке VPS, так что теперь каждый сможет найти ответ на любой вопрос связанный с приложением. В общем, лучше один раз показать чем писать много текста .https://amnezia.org/
Мини-гайд
Спасибо что дочитали. Как и обещал, мини‑гайд по созданию собственного VPN с защищенным от блокировок WireGuard — AmneziaWG.
- Покупаем любой VPS у любого хостинг провайдера. Важно чтобы была операционная система Ubuntu (официально поддерживаемая версия — 22.04), или Debian 11. Вот тут есть пошаговые инструкции в качестве примера, но вы можете выбрать любой другой.
- Устанавливаем приложениеhttps://amnezia.org/, есть версии для Windows, Linux, MacOS, IOS и Android.
- Вносим данные сервера в приложение, и выбираем «Средний или Высокий» уровень цензуры (или вручную выбираем протокол AmneziaWG). Ну и нажимаем «Подключиться»!
Профит! Теперь у Вас есть собственный VPN с защищенным от блокировок протоколом AmneziaWG. Его можно использовать на неограниченном количестве устройств и делиться с другими людьми.