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

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.
    1. b3

      b3 Banned

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

        Lolinas Member

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

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

        Суть сделать что то из бесплатного.
         
        1. 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.