Параллельное использование впн

Discussion in 'Безопасность и Анонимность' started by Lolinas, 30 Jun 2022.

  1. Lolinas

    Lolinas Member

    Joined:
    20 Oct 2019
    Messages:
    126
    Likes Received:
    54
    Reputations:
    19
    Всем доброго времени суток. При поиске бесплатного впн всегда сталкиваемся с некими проблемами: ограничение трафика, времени, скорости и т.д. Но все же хочется комфортно использовать впн для просмотра ютуба, вк, фейбука и прочего добра. Мне кажется, что такого бесплатного впна не существует. Из бесплатных, наверное, самый популярный это фриопенвпн (freeopenvpn.org). Это очень хороший впн, который можно проксифицировать, ведь он может работать по tcp. Этот впн имеет два ограничения – скорость и время работы (около 2мб\с и вводить пароль с каптчи раз в 10-12 часов). Вечерами скорость обычно просаживается до полумегабита. С этим ничего нельзя поделать, ну разве что купить премиум. И как-то пришла идея, а почему бы не запустить еще такой же впн и распределить нагрузку между ними, и тем самым расширить канал. Создадим виртуальные машины

    [​IMG]

    Route I – receiver – принимает трафик от машин с впн
    Vpn I nl, Vpn I uk, Vpn I usa – машины на которых запущены впн
    Vpn I receiver – принимает трафик от ютуба, вк и прочего, затем распределяет его между впн.
    Что же касается настройки, рассмотрим машины приема трафика от впн. Тут все просто, ccproxy и proxifier

    [​IMG]

    На машинах с впн еще нужен файервол, для ограничения трафика, ведь ос windows будет стремится обновится, проверить активацию и т.д. Режим все кроме нужд впн, службы времени, прокси сервера. Еще важный момент, в конфиге впн-файла прописаны доменные имена, нам нужно изменить их на ip. Это сделаем для упрощения, чтобы не вводить днс сервер и не прописывать дополнительные правила для файерволов

    [​IMG]

    И рассмотрим машину, которая делит трафик между впнами. Разделение трафика происходит с помощью проксифайера, а именно создание прокси цепочки и присвоение ей атрибута load balancing

    [​IMG]

    Почему не ставим файерволы на все машины, а только на некоторые? Да потому, что они там попросту не нужны, а только усложнят прописку правил. Так как машины находятся в изолированной внутренней сети, и не могут быть подвергнуты атакам из вне. Также на них отсутствует основной шлюз, что препятствует протеканию трафика «самоходом», ведь трафику попросту некуда идти, так как отсутствует направление. Такие машины имеют высокую степень безопасности и без файерволов

    [​IMG]

    В отличии от машин на которых установлены впн клиенты, там необходим любой маршрут по умолчанию, для работы впна, например, поставим основной шлюз на nl машине на машину «route I – receiver». Трафик будет стучаться на машину, но зайдет в тупик и некому не навредит

    [​IMG]

    В статье рассказано про три конфига - nl, uk, usa. Это не означает, что нельзя использовать один и тот же конфиг три или более раз. Конечно можно, тем самым будет легче вводить код авторизации один для всех, нежели для каждого отдельно. Но все же рекомендую использовать разные конфиги, так как нагрузка на сервера разная. Сегодня может еле-еле работать uk сервер, а завтра usa.
    vk.com/id58924119​
     
    K800 and Suicide like this.
  2. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Извращенство какое-то. И в добавок у вас в цепи "слабое звено" есть, откройте географическую карту и посмотрите на вашу цепочку. Как вообще в голову пришло что добавив цепочку медленных сетей на выходе будет одна быстрая?)) Это желание халявы и нежелание учиться создает такие высеры забавные. Купите себе VDS да поднимите личный VPN с приличной скоростью и постоянным IP чтоб капчу не выдавал каждый сайт. если бюджет очень ограничен покупайте максимально дешевые хостинги рублей по 100 за сервер. Я для себя взял Амазон, он не дешевый но я могу менять локацию сервера в момент, что позволяет мне иметь максимально выгодные маршруты с минимальными пингами.
    P.S в моей сети где в промежутках используется ТОР даже скорость в 10 раз выше чем в вашей сети))
     
  3. Lolinas

    Lolinas Member

    Joined:
    20 Oct 2019
    Messages:
    126
    Likes Received:
    54
    Reputations:
    19
    Слабое звено? Какую карту отрыть надо, и что там можно увидеть? Что я использую три впна сразу? Слабое звено до жути, аж страшно теперь мне стало.

    Мне в голову много чего интересного приходит, некоторые идеи воплощаю в жизнь. То что будет скорость якобы выше, это действительно так, так как идет распределение трафика. Ютуб работает на одном, вк на другом

    Суть сделать что то из бесплатного.
     
  4. Lolinas

    Lolinas Member

    Joined:
    20 Oct 2019
    Messages:
    126
    Likes Received:
    54
    Reputations:
    19
    Немного автоматизации

    Когда имеется несколько виртуальных машин с одинаковыми впн, то надоедает выполнять однотипные действия на всех машинах. А на фриопенвпн еще и 2 раза в день! Поэтому нужно свести порядок действий к минимуму и воспользуемся скриптовым языком автоит. Допустим, у нас есть три впн клиента, которые имеют одинаковую конфигурацию. Благо то, что openvpn способен управляться с консоли, например, есть команды для подключения и отключения конфигов. Нужно только дать эти команды с одной машины на три другие.

    Рассмотрим клиентский скрипт, который будет слушать 33333 tcp порт на своем айпи адресе, и при получении данных произведет работу. Посмотрим на сам скрипт

    #include <Process.au3>
    $ip = IniReadSection("ip.ini", "ip")
    TCPStartup()
    OnAutoItExitRegister("_exit")
    $iListenSocket = TCPListen($ip[1][1], 33333)

    While True

    Do
    $iSocket = TCPAccept($iListenSocket)
    Sleep(100)
    Until $iSocket <> -1
    While True

    $sData = TCPRecv($iSocket, 2048)
    If @Error Then ExitLoop
    $sData = BinaryToString($sData, 4)
    If $sData Then _go()
    Sleep(100)
    WEnd
    WEnd

    Func _go()

    $country = StringLeft($sData, 2)
    $pass = StringTrimLeft($sData, 2)
    $file = FileOpen("C:\Users\pepsi\OpenVPN\config\login", 2)
    FileWrite($file, "freeopenvpn" & @crlf & $pass)
    FileClose($file)
    For $i = 1 To 2
    If $i = 1 Then

    _RunDos('"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect_all')
    Sleep(10000)
    EndIf

    _RunDos('"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect ' & $country & '.ovpn --silent_connection 1')
    Sleep(25000)

    PixelSearch(680, 732, 895, 764, 0x72E672)
    If Not @Error Then
    ExitLoop
    EndIf

    PixelSearch(680, 732, 895, 764, 0xFFFF80)
    If Not @Error Then
    _RunDos('"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect_all')
    Sleep(25000)
    EndIf
    Next
    EndFunc
    Func _exit()
    TCPShutdown()
    EndFunc



    Теперь рассмотрим сам конфиг опенвпн клиента, пример приведу на uk, там много лишнего записано, какие-то идентификаторы и прочие настройки, очистим их и получим

    Code:
    client
    dev tun
    dev-type tun
    remote 85.239.62.22 443 tcp-client
    remote-random
    nobind
    persist-tun
    cipher AES-128-CBC
    auth SHA1
    verb 0
    mute 0
    push-peer-info
    remote-cert-tls server
    comp-lzo no
    auth-user-pass login
    key-direction 1
    Разумеется, сертификаты не трогаем, их нету смысла редактировать. Важным тут является строка auth-user-pass login, которая указывает на файл с логином\паролем.

    Теперь рассмотрим серверную часть программы

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    TCPStartup()
    OnAutoItExitRegister("_exit")
    $ini = IniReadSection("vpnserv.ini", "pass")

    $iSocket1_1 = TCPConnect("192.168.100.8", "33333")
    $iSocket1_2 = TCPConnect("192.168.100.9", "33333")
    $iSocket1_3 = TCPConnect("192.168.100.10", "33333")
    ;~ $iSocket1_3 = TCPConnect("192.168.100.10", "33333")

    GUICreate("", 270, 80, -1, -1)
    $input = GUICtrlCreateInput($ini[1][1], 5, 5, 150, 35)
    GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
    $go = GUICtrlCreateButton("go", 160, 5, 40, 35)

    $nCh1_1 = GUICtrlCreateCheckbox("vpn 1.1", 2, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
    GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
    GUICtrlSetState($nCh1_1, Execute($ini[3][1]))

    $nCh1_2 = GUICtrlCreateCheckbox("vpn 1.2", 70, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
    GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
    GUICtrlSetState(-1, Execute($ini[4][1]))

    $nCh1_3 = GUICtrlCreateCheckbox("vpn 1.3", 140, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
    GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")
    GUICtrlSetState(-1, Execute($ini[5][1]))

    $nCh2 = GUICtrlCreateCheckbox("vpn2", 205, 50, 62, 25, $BS_PUSHLIKE + $BS_ICON)
    GUICtrlSetFont(-1, 12, 400, 1, "Comic Sans MS")

    $res = GUICtrlCreateButton("res", 210, 5, 40, 35)
    GUICtrlSetState(-1, $GUI_disable)
    GUISetState(@SW_SHOW)

    If $ini[2][1] = "yes" then
    IniWrite("vpnserv.ini", "pass", "go", "no")
    _go()
    Endif

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $go
    _ini_checkbox()
    IniWrite("vpnserv.ini", "pass", "go", "yes")
    _res()
    Case $res
    _ini_checkbox()
    _res()
    EndSwitch
    Wend

    Func _ini_checkbox()
    IniWrite("vpnserv.ini", "pass", "pass", GUICtrlRead($input))
    If GUICtrlRead($nCh1_1) = $GUI_CHECKED Then
    IniWrite("vpnserv.ini", "pass", "vpn1", "$GUI_CHECKED")
    Else
    IniWrite("vpnserv.ini", "pass", "vpn1", "$GUI_UNCHECKED")
    EndIf
    If GUICtrlRead($nCh1_2) = $GUI_CHECKED Then
    IniWrite("vpnserv.ini", "pass", "vpn2", "$GUI_CHECKED")
    Else
    IniWrite("vpnserv.ini", "pass", "vpn2", "$GUI_UNCHECKED")
    EndIf
    If GUICtrlRead($nCh1_3) = $GUI_CHECKED Then
    IniWrite("vpnserv.ini", "pass", "vpn3", "$GUI_CHECKED")
    Else
    IniWrite("vpnserv.ini", "pass", "vpn3", "$GUI_UNCHECKED")
    EndIf
    EndFunc

    Func _res()
    If Not StringInStr($CmdLineRaw, "/CmdLineRun") Then Run(@AutoItExe & ' "' & @ScriptFullPath & '"')
    TCPShutdown()
    Exit
    EndFunc
    Func _go()

    If GUICtrlRead($nCh1_1) = $GUI_CHECKED Then TCPSend($iSocket1_1, StringToBinary(GUICtrlRead($input), 4))
    If GUICtrlRead($nCh1_2) = $GUI_CHECKED Then TCPSend($iSocket1_2, StringToBinary(GUICtrlRead($input), 4))
    If GUICtrlRead($nCh1_3) = $GUI_CHECKED Then TCPSend($iSocket1_3, StringToBinary(GUICtrlRead($input), 4))
    EndFunc
    Func _exit()
    _ini_checkbox()
    TCPShutdown()
    EndFunc


    Полагаю, в коде пояснять нечего, все понятно без слов, единственное что стоит добавить, так это ини файл, содержимое его такое

    Code:
    [pass]
    pass=uk516416641
    go=no
    vpn1=$GUI_CHECKED
    vpn2=$GUI_CHECKED
    vpn3=$GUI_CHECKED
    [​IMG]

    Вводим пароль, выбираем впн, и запускаем скрипт кнопкой «go». Все данные программы сохраняются после закрытия.

    Теперь посмотрим, откуда же берется пароль. К примеру с этого сайта (https://www.freeopenvpn.org/premium.php?cntid=UK&lang=en). Он очень насыщен рекламой, и привередлив к блокировщикам (не показывает пароль). Поэтому воспользуемся каскадными таблицами, напишем правила с помощью плагина stylish (для firefox)

    Code:
    .passchng,body > center:nth-child(8),body > div:nth-child(9) > h1:nth-child(1), html body center div div p.exclam,html body center div div p.attn_2, p.data:nth-child(1), p.data:nth-child(2), .attn_1 > span:nth-child(1),body > div:nth-child(7),body > hr:nth-child(4),body > hr:nth-child(6),.offer, body > div:nth-child(1) > center:nth-child(1),body > div:nth-child(5), body > div:nth-child(1),body > div:nth-child(2), body > div:nth-child(14), body > center:nth-child(13) > div:nth-child(1)  {display: none !important;}
    #result > img:nth-child(1) {margin-left: -150px !important; margin-top: -80px  !important;}
    body > div:nth-child(9),.adsbygoogle, body > center:nth-child(10) > div:nth-child(1) > div:nth-child(1), body > center:nth-child(10) > div:nth-child(1) > div:nth-child(3),body > center:nth-child(11) > div:nth-child(1)   {margin-left: -4090px !important;}
    После таких манипуляций останется только капча. Для удобства уменьшим размер сайта, и он примет вот такую форму

    [​IMG]

    Данные в скрипте корректируются в зависимости от разрешения экрана, так как существует поиск цвета по координатам в клиентском скрипте.
     
    #4 Lolinas, 23 Aug 2022
    Last edited: 23 Aug 2022
    Suicide likes this.