Как обойти ограничения OpenVPN Access Server

openvpn icon

В связи с последними событиями ко мне часто обра­щают­ся знакомые и друзья с прось­бами помочь получить дос­туп к Instagram, Facebook, YouTube и остальным недос­тупным сай­там, где мог­ла остать­ся важ­ная информа­ция. Что­бы помочь им, я всег­да исполь­зовал OpenVPN Access Server, но у него есть ряд ограничений, которые мы попробуем обойти в этой статье.

Еще по теме: Установка OpenVPN на Debian

OpenVPN Access Server — удобное инструмент, который уста­нав­лива­ется на сер­вере в пару команд и поз­воля­ет комфортно работать с кли­ента­ми: изменять под­сети, про­фили и пароли и другие настройки. Делать все это вруч­ную было бы нам­ного тяжелее.

В бес­плат­ной вер­сии OpenVPN Access Server есть огра­ниче­ние на чис­ло под­клю­чений: одновременно могут подключаться только два кли­ента. Плат­ная лицен­зия, кроме того, что сто­ит дорого, ее теперь невозможно физически опла­тить.

Мы не будем изоб­ретать велоси­пед, а посмотрим, какое решение предлагает поисковик. Гуглим зап­рос «OpenVPN Access Server license unlimited». Находим один уда­лен­ный с GitHub репози­торий. Находим зер­кало и читаем опи­сание: тре­бует­ся вер­сия CentOS 7. В скрип­те установки пос­ле инстал­ляции самого пакета openvpn-as меняется фай­л pyovpn-2.0-py2.7.egg по пути:

Я бы не стал менять всле­пую этот важ­ный эле­мент сис­темы, который оветчает том чис­ле за веб‑фрон­тенди. Тем более в ПО, свя­зан­ным с кон­фиден­циаль­ностью. Поэто­му для начала глянем, что там внут­ри.

Срав­ним модифицированные вари­анты файлов с исходны­ми.

Вытащим ори­гиналь­ный RPM в поис­ках pyovpn-2.0-py2.7.egg. Для распаковки .rpm сгодиться обыч­ный tar:

А .egg — обыч­ный ZIP, который находится по адре­су:

Да­лее рас­паковы­ваем модифицированный pyovpn-2.0-py2.7.egg из ком­плек­та:

Попробуем отыскать фай­лы, в которых что‑то менялось.

Те­перь срав­ним сами фай­лы, но прежде их нуж­но деком­пилиро­вать, потому что .pyc — это байт‑код. Для этого будем использовать ути­литу decompile6, которая прекрасно работа­ет с вер­сиями Python 2.7, 3.7, 3.8.

В моем случае используется macOS, но в ОС Linux коман­ды вряд ли отли­чают­ся.

Глянем содер­жимое деком­пилиро­ван­ного фай­ла:

Ин­терес­но! Цикл for — это перебор всех атри­бутов uprop2. Те атри­буты, наз­вания которых начина­ются с двух под­черки­ваний, про­пус­кают­ся. Фун­кция old_figure ста­новит­ся ссыл­кой на метод figure клас­са UsageProperties, а фун­кция в клас­се UsageFigure ссы­лает­ся на new_figure.

Слож­но ска­зать, зачем это сде­лано. Могу пред­положить, что класс UsageProperties исполь­зует­ся где‑то еще, и, что­бы не менять вез­де, сде­лали такой неоче­вид­ный трюк.

Де­ком­пилиру­ем uprop2 и понима­ем, что это ори­гиналь­ный uprop, в котором и выпол­няет­ся про­вер­ка лицен­зии.

Раз­работ­чик кря­ка исполь­зовал под­мену объ­екта, не тро­гая основной файл. Прин­цип понятен.

Те­перь поп­робу­ем про­вер­нуть то же самое, толь­ко для акту­аль­ной вер­сии OpenVPN Aсcess Server. Экспе­римен­тировать буду на VPS с акту­аль­ной Debian 11 Bullseye.

Ска­чива­ем пос­леднюю вер­сию с сай­та раз­работ­чика. Уста­нав­лива­ем или рас­паковы­ваем архив .deb и смот­рим вер­сию Python, для которой написан pyovpn:

Ага, 3.9, что не очень под­ходит, так как деком­пиляция для этой вер­сии Python пока не реали­зова­на.

Ты можешь под­держать раз­работ­чика деком­пилято­ра и помочь в работе над про­ектом. Под­робнее — в его об­ращении.

Что‑то мне под­ска­зыва­ет, что вер­сия для Debian 10 будет под­ходящей, так как, изу­чив вики, уз­наем, что в 11-й вер­сии (Bullseye) уже Python 3.9, а в 10-й (Buster) — 3.7.
Установка в Debian 10

Пос­коль­ку VPS новая, прос­то поменяю ОС на десятую вер­сию и пос­мотрю дос­тупные вер­сии OpenVPS-AS:

От­лично, вер­сия пос­ледняя, как в 11-й, а зна­чит, акту­аль­ная. Уста­нав­лива­ем и смот­рим вер­сию Python, которая исполь­зует­ся в pyovpn. Дол­жно быть 3.7.

Так и есть: это пос­ледняя вер­сия (2.10.1) и она исполь­зует Python 3.7. Все скла­дыва­ется. Давай про­верим, мно­гое ли изме­нилось по срав­нению с вер­сией 2.0.5, которая была изна­чаль­но най­дена похекан­ной. Что­бы не тас­кать фай­лы туда‑сюда, став­лю на сер­вере python-decompile3:

И сно­ва рас­паковы­ваем .egg:

За­тем деком­пилиру­ем:

Смот­рим отли­чия и видим, что все то же самое, кро­ме неболь­ших рас­хожде­ний в син­такси­се. Но что имел в виду автор хака, ког­да исполь­зовал два фай­ла? Почему прос­то не ука­зать явно в кон­це фун­кции figure количес­тво соеди­нений, минуя все про­вер­ки?

Да­вай поп­робу­ем более прос­той вари­ант. Добав­ляем ret[‘concurrent_connections’] = 1337 перед воз­вра­том (ret):

Сох­раня­ем файл, ком­пилиру­ем:

Ар­хивиру­ем и заменя­ем пакет .egg:

И перезаг­ружа­ем openvpn-as. Я уда­лял логи, так как ловил ошиб­ки во вре­мя экспе­римен­тов. Это делать необя­затель­но.

За­пус­каем сер­вис openvpnas:

Убеж­даем­ся, что все в поряд­ке и оши­бок нет:

Идем в админку на пор­те 943/admin и видим, что нам дос­тупно 1337 под­клю­чений.

Как обойти ограничения лицензии OpenVPN Access Server
Пять активных под­клю­чений из 1337 воз­можных
Ес­ли ты вдруг потерял пароль и не можешь попасть в админку, напиши passwd openvpn.

Тес­тирова­ние показа­ло отличную работу с дву­мя и более устрой­ства­ми.

Заключение

Мно­гие VPN сей­час под бло­киров­ками или не могут при­нять опла­ту, поэто­му Access Server — неп­лохой спо­соб быс­тро раз­вернуть собс­твен­ный ана­лог с воз­можностью управлять про­филя­ми поль­зовате­лей. Поль­зовать­ся ли пират­ским методом его акти­вации — решать тебе, но это, как ока­залось, сов­сем не слож­но.

ВКонтакте
OK
Telegram
WhatsApp
Viber

Один комментарий

  1. Avatar
    Andrey

    Спасибо огромное! Работает!

Добавить комментарий

Ваш адрес email не будет опубликован.