Skip to content

Instantly share code, notes, and snippets.

@httpsx
Last active September 17, 2024 16:54
Show Gist options
  • Save httpsx/76a98ea28e6f3a4ffc947e768c0b6c01 to your computer and use it in GitHub Desktop.
Save httpsx/76a98ea28e6f3a4ffc947e768c0b6c01 to your computer and use it in GitHub Desktop.
WireGuard DPI обход РКН - Windows

Для обхода блокировки достаточно отправить 1 любой udp пакет, тем самым нарушим начальное определение протокола WireGuard
Способ с использованием Windows PowerShell. Без скачивания Nmap и подобного софта.

Шаг 0: Отключитесь от всех туннелей.

Шаг 1: Редактируем Клиент конфиг

Добавим в него "ListenPort", это позволит иметь статичный порт на котором будет работать WireGuard
Нажмите ПКМ на нужный "туннель" и выберите "Редактировать выбранный туннель..." Step1

После DNS добавляем новую строку

ListenPort = 56123

Step1-1

Нажимаем сохранить.

Warning

🔴 Важно! Не пытайтесь подключиться к серверу сразу после того как указали порт.

Шаг 2: Открываем "Windows PowerShell"

Необходимо изменить в скрипте данные сервера, к которому вы будете подключаться.
Их можно посмотреть в конфиге, [Peer] -> Endpoint
Как пример:

Step2

В моем примере $wgIP и $wgPort будут следующие:
$wgIP = "154.77.3.272"
$wgPORT = 51820

Script:

$wgListenPort = 56123
$wgIP = "DEST IP ADDRESS"
$wgPORT = DEST PORT

$EndPoints = New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Parse([System.Net.Dns]::GetHostAddresses($wgIP)), $wgPORT) 
$Socket = New-Object System.Net.Sockets.UDPClient $wgListenPort
$SendMessage = $Socket.Send([Text.Encoding]::ASCII.GetBytes(":)"), 2, $EndPoints) 
$Socket.Close() 

После того, как изменили в скрипте $wgIP и $wgPORT, вставляем его в PowerShell и нажимаем Enter. Разрешите доступ Брандмауэру Windows если запросит.

Шаг 3: Подключаемся к WireGuard

Можете подключаться к своему WireGuard.

F.A.Q

  1. Что делать, если я попытался подключиться к серверу без PowerShell Скрипта?
  • Поменять ListenPort в конфиге клиента и поменять в скрипте значение $wgListenPort . Порт должен совпадать.
  • Либо подождать 5-10 минут, пока пройдет время блокировки порта. После этого запускаете сначало скрипт PowerShell - а затем пытаетесь подключиться к WireGuard
  1. Как определить что проблема именно в блокировке протокола WireGuard от РКН ?
  • Если в информации о переданных данных будет статично при подключение: "Получено 92 Б" или "Получено 148 Б" - Значит ваш провайдер заблокировал Handshake Response с протоколом wireguard. Данный гайд помогает обойти эту блокировку.
@Andrey52222
Copy link

Подскажите как на кинетик со скриптом все это дело провернуть?

Обновляетесь на 4.2 бета 2, а потом вводите команду ASC в CLI. У меня так варп заработал. Подробнее об этом на форуме кинетика написано.

Спасибо! Помог)
Жаль только что скорость втрое упала

@terloid
Copy link

terloid commented Sep 1, 2024

warp со скриптом работает, а proton нет. Победил кто нибудь последнего?

@crnomonethis079
Copy link

завел wireguard на клиенте keeneti

Подскажи, пожалуйста, как настроить на keenetic. Ни где не могу найти нормальную инструкцию. Не сильно шарю в этом.

@HPo1nt
Copy link

HPo1nt commented Sep 1, 2024

завел wireguard на клиенте keeneti

Подскажи, пожалуйста, как настроить на keenetic. Ни где не могу найти нормальную инструкцию. Не сильно шарю в этом.

https://telegra.ph/Nastrojka-Amnezia-WireGuard-na-routere-s-KeeneticOS-BLACKTEMPLESPACE-08-19

@crnomonethis079
Copy link

завел wireguard на клиенте keeneti

Подскажи, пожалуйста, как настроить на keenetic. Ни где не могу найти нормальную инструкцию. Не сильно шарю в этом.

https://telegra.ph/Nastrojka-Amnezia-WireGuard-na-routere-s-KeeneticOS-BLACKTEMPLESPACE-08-19

Так вроде кто-то выше писал, что скорость падает от этой настройки, не?

@HPo1nt
Copy link

HPo1nt commented Sep 2, 2024

завел wireguard на клиенте keeneti

Подскажи, пожалуйста, как настроить на keenetic. Ни где не могу найти нормальную инструкцию. Не сильно шарю в этом.

https://telegra.ph/Nastrojka-Amnezia-WireGuard-na-routere-s-KeeneticOS-BLACKTEMPLESPACE-08-19

Так вроде кто-то выше писал, что скорость падает от этой настройки, не?

Скорость упала потому что человек перешёл с телефона/компьютера на проксирование через роутер. Эта настройка делает то же самое, чему посвящена вся эта тема, а именно посылает шум перед хэндшейком, чтобы обойти обнаружение DPI.

@azharkov78
Copy link

У вас на таком peer указано is-responder=yes?

Сейчас указал. Это пир, который создает сам Mikrotik, когда создаешь "backtohome" :) Не работает, предыдущая отрабатывает. Может фильтр по имени сделать? что-то вроде name not local* А если убрать is-responder, то помогает секунды на 4

Попробуйте заменить строку:

:if (($isResponder = "no" or $isResponder = "") and (([:tostr $LastHandshake] = "") or (($LastHandshake > [:totime "2m"]) and ($Rx->[:tostr $i] = $LocalRx)))) do={
на
:if (($isResponder != true) and (([:tostr $LastHandshake] = "") or (($LastHandshake > [:totime "2m"]) and ($Rx->[:tostr $i] = $LocalRx)))) do={

Да, так работает. Но странно, Скрипт отработал, 3-4 секунды и снова трафика нет.

@krusnik01
Copy link

завел wireguard на клиенте keeneti

Подскажи, пожалуйста, как настроить на keenetic. Ни где не могу найти нормальную инструкцию. Не сильно шарю в этом.

https://telegra.ph/Nastrojka-Amnezia-WireGuard-na-routere-s-KeeneticOS-BLACKTEMPLESPACE-08-19

А как сделать без AmneziaWG подобное на KeeneticOS?

@wiktorbgu
Copy link

Чуть подправил скрипт от vlsi, чтобы лишний раз не бегал по клиентским пирам, которые подключаются к этому роутеру,
а только где роутер как клиент
Работает убойно! Proton и Warp пробивает)

:global Tx
:global Rx
/interface/wireguard/peers

:foreach i in=[find where disabled=no and is-responder!=yes] do={
  :local LocalTx [get $i tx]
  :local LocalRx [get $i rx]
  :local LastHandshake [get $i last-handshake]
  :if (([:tostr $LastHandshake] = "") or (($LastHandshake > [:totime "2m"]) and ($Rx->[:tostr $i] = $LocalRx))) do={
    :local rawHeader [:rndstr length=4 from=123456789abcdef]
    :local EndpointAddress [get $i endpoint-address]
    :local EndpointAddressIP $EndpointAddress
    :local EndpointAddressIP [get $i current-endpoint-address]
    :local name [get $i name]
    :local wgDstPort [get $i current-endpoint-port]
    :local interface [get $i interface]
    
    # Сбрасываем исходящий порт на уровне интерфейса
    /interface wireguard set $interface listen-port=0
    :local srcport [/interface/wireguard/get $interface listen-port];

    :log info ("WG name is $name, EndpointAddress $EndpointAddress , LastHandshake $LastHandshake, LastTx " . $Tx->[:tostr $i] . ", CurrentTx $LocalTx, LastRx " . $Rx->[:tostr $i] . ", CurrentRx $LocalRx")
    :log info ("WG Currentinterface $interface, srcport $srcport, EndpointAddressIP $EndpointAddressIP, DstPort $wgDstPort")
    :log info ("Generating spam for RKN")
    set $i disabled=yes
    /tool traffic-generator stream remove [find]
    /tool traffic-generator packet-template remove [find]
    :delay 1
    /tool/traffic-generator/packet-template/add header-stack=mac,ip,udp,raw ip-dst=$EndpointAddressIP name=packet-template-wg raw-header=$rawHeader special-footer=no udp-dst-port=$wgDstPort udp-src-port=$srcport
    :delay 1
    /tool traffic-generator stream add disabled=no mbps=1 name=stream1 id=3 packet-size=1450 pps=0 tx-template=packet-template-wg
    :delay 1
    /tool traffic-generator quick duration=4
    :delay 1

    :log info ("Starting WG $EndpointAddress")
    set $i endpoint-address=$EndpointAddress
    set $i disabled=no
  }
  :set ($Tx->[:tostr $i]) $LocalTx
  :set ($Rx->[:tostr $i]) $LocalRx
}

@HPo1nt
Copy link

HPo1nt commented Sep 2, 2024

https://telegra.ph/Nastrojka-Amnezia-WireGuard-na-routere-s-KeeneticOS-BLACKTEMPLESPACE-08-19

А как сделать без AmneziaWG подобное на KeeneticOS?

Вам не обязательно на уровне сервера ставить амнезию, просто укажите параметры ASC в кинетике для любого конфига wireguard и сможете обойти DPI.

@krusnik01
Copy link

https://telegra.ph/Nastrojka-Amnezia-WireGuard-na-routere-s-KeeneticOS-BLACKTEMPLESPACE-08-19

А как сделать без AmneziaWG подобное на KeeneticOS?

Вам не обязательно на уровне сервера ставить амнезию, просто укажите параметры ASC в кинетике для любого конфига wireguard и сможете обойти DPI.

А где изначально брать эти параметры ASC? Можно взять любые чужие?

@HPo1nt
Copy link

HPo1nt commented Sep 3, 2024

А где изначально брать эти параметры ASC? Можно взять любые чужие?

Попробуйте сначала эти
interface Wireguard0 wireguard asc 120 23 911 0 0 1 2 3 4
Я брал значения отсюда https://github.com/ImMALWARE/bash-warp-generator

@Art-Vis
Copy link

Art-Vis commented Sep 3, 2024

Добрый вечер, подскажите пожалуйста, есть решение для iOS ?
А то постоянно, «получено данных: 92б».

@JoyZzzzz
Copy link

JoyZzzzz commented Sep 4, 2024

Добрый вечер, подскажите пожалуйста, есть решение для iOS ? А то постоянно, «получено данных: 92б».

Используйте клиент AmneziaWG

@JoyZzzzz
Copy link

JoyZzzzz commented Sep 4, 2024

@GPSMapper @koolvn

у меня скрипт рабоатет нормально, вы не забыли ему chmod +x сделать?

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

@Chupakabra303
Copy link

warp со скриптом работает, а proton нет. Победил кто нибудь последнего?

Я нет. Похоже его по ip адресам блочат. Работает только over warp, такой вот слоеный пирог.
Я знал, что рано или поздно мы перейдем и на эту дрянь

@dialbat
Copy link

dialbat commented Sep 5, 2024

fuckdpi

подскажите, в какой момент запускать скрип на микротике? или он постоянно должен крутиться?

@JoyZzzzz
Copy link

JoyZzzzz commented Sep 5, 2024

warp со скриптом работает, а proton нет. Победил кто нибудь последнего?

Я нет. Похоже его по ip адресам блочат. Работает только over warp, такой вот слоеный пирог. Я знал, что рано или поздно мы перейдем и на эту дрянь

Я запустил без проблем ProtonVPN с WG конфигом в клиенте AmneziaWG с добавлением
Jc = 3
Jmin = 8
Jmax = 32

@Chupakabra303
Copy link

Chupakabra303 commented Sep 5, 2024

warp со скриптом работает, а proton нет. Победил кто нибудь последнего?

Я нет. Похоже его по ip адресам блочат. Работает только over warp, такой вот слоеный пирог. Я знал, что рано или поздно мы перейдем и на эту дрянь

Я запустил без проблем ProtonVPN с WG конфигом в клиенте AmneziaWG с добавлением Jc = 3 Jmin = 8 Jmax = 32

Ну если совсем точно выразиться. У меня не заработали в микротик бесплатные сервера в Нидерландах и США, а вот японские работали, но с диким пингом и лагами. У Вас?

@JoyZzzzz
Copy link

JoyZzzzz commented Sep 5, 2024

Ну если совсем точно выразиться. У меня не заработали в микротик бесплатные сервера в Нидерландах и США, а вот японские работали, но с диким пингом и лагами. У Вас?

У меня роутер Asus с простым wireguard + скрипт для отсылки мусора при соединении и Proton free с локацией в Нидерландах. А на компьютере клиент AmneziaWG. Пинги в районе 50.
И тут в коментах было описание как на микротиках сделать остылку мусора для обхода блокировок.

@Art-Vis
Copy link

Art-Vis commented Sep 6, 2024

warp со скриптом работает, а proton нет. Победил кто нибудь последнего?

Я нет. Похоже его по ip адресам блочат. Работает только over warp, такой вот слоеный пирог. Я знал, что рано или поздно мы перейдем и на эту дрянь

Я запустил без проблем ProtonVPN с WG конфигом в клиенте AmneziaWG с добавлением Jc = 3 Jmin = 8 Jmax = 32

Ну если совсем точно выразиться. У меня не заработали в микротик бесплатные сервера в Нидерландах и США, а вот японские работали, но с диким пингом и лагами. У Вас?

Я сменил 4 сервера, и только на 5 заработал WG.
Просто IP в блоке.

@koolvn
Copy link

koolvn commented Sep 6, 2024

@JoyZzzzz попробуй использовать последнюю версию скрипта
https://gist.github.com/koolvn/993d9c7eb2666dbf15bdccc7d3c4fe33#file-wgclient-start

@DisKass
Copy link

DisKass commented Sep 6, 2024

Если от клиента уходит серверу первый пакет на 92б, то может можно посылать мусорный пакет наоборот от сервера любому клиенту, который хоть что-то прислал? Или важно, чтобы именно первый ушедший пакет был не wg'шный?

@morzexxx
Copy link

morzexxx commented Sep 8, 2024

Всем всем всем у кого AmneziaWG не работает по причине Windows 7. Ставите и патчите этим патчером файл C:\Program Files\AmneziaWG\amneziawg.exe
Далее экспорт-импорт конфигов, добавляете в Interface волшебные 3 строчки с вариациями (меняйте эти числа, не нужно их повторять) и наслаждаемся!

@JoyZzzzz
Copy link

JoyZzzzz commented Sep 8, 2024

@koolvn

попробуй использовать последнюю версию скрипта

Новыая версия хорошо отрабатывает и коннектиться быстро.
Но заметил небольшое неудобство которое скорее всего связанно с самой прошивкой Asus. Если у WG подключения нет активных клиентов и трафика, то похоже скрипт не срабатывает. При появлении локального пользователя WG, то все нормально начинает работать.

@alexunderboots
Copy link

Чуть подправил скрипт от vlsi, чтобы лишний раз не бегал по клиентским пирам, которые подключаются к этому роутеру, а только где роутер как клиент Работает убойно! Proton и Warp пробивает)

:global Tx
:global Rx
/interface/wireguard/peers

:foreach i in=[find where disabled=no and is-responder!=yes] do={
  :local LocalTx [get $i tx]
  :local LocalRx [get $i rx]
  :local LastHandshake [get $i last-handshake]
  :if (([:tostr $LastHandshake] = "") or (($LastHandshake > [:totime "2m"]) and ($Rx->[:tostr $i] = $LocalRx))) do={
    :local rawHeader [:rndstr length=4 from=123456789abcdef]
    :local EndpointAddress [get $i endpoint-address]
    :local EndpointAddressIP $EndpointAddress
    :local EndpointAddressIP [get $i current-endpoint-address]
    :local name [get $i name]
    :local wgDstPort [get $i current-endpoint-port]
    :local interface [get $i interface]
    
    # Сбрасываем исходящий порт на уровне интерфейса
    /interface wireguard set $interface listen-port=0
    :local srcport [/interface/wireguard/get $interface listen-port];

    :log info ("WG name is $name, EndpointAddress $EndpointAddress , LastHandshake $LastHandshake, LastTx " . $Tx->[:tostr $i] . ", CurrentTx $LocalTx, LastRx " . $Rx->[:tostr $i] . ", CurrentRx $LocalRx")
    :log info ("WG Currentinterface $interface, srcport $srcport, EndpointAddressIP $EndpointAddressIP, DstPort $wgDstPort")
    :log info ("Generating spam for RKN")
    set $i disabled=yes
    /tool traffic-generator stream remove [find]
    /tool traffic-generator packet-template remove [find]
    :delay 1
    /tool/traffic-generator/packet-template/add header-stack=mac,ip,udp,raw ip-dst=$EndpointAddressIP name=packet-template-wg raw-header=$rawHeader special-footer=no udp-dst-port=$wgDstPort udp-src-port=$srcport
    :delay 1
    /tool traffic-generator stream add disabled=no mbps=1 name=stream1 id=3 packet-size=1450 pps=0 tx-template=packet-template-wg
    :delay 1
    /tool traffic-generator quick duration=4
    :delay 1

    :log info ("Starting WG $EndpointAddress")
    set $i endpoint-address=$EndpointAddress
    set $i disabled=no
  }
  :set ($Tx->[:tostr $i]) $LocalTx
  :set ($Rx->[:tostr $i]) $LocalRx
}

на 7.12 не отрабатывает (((

@alexunderboots
Copy link

:local EndpointAddressIP $EndpointAddress
:local EndpointAddressIP [get $i current-endpoint-address]

Верхняя строчка наверное лишняя

@fivl26
Copy link

fivl26 commented Sep 11, 2024

Посмотрите мой скрипт выше, я его привел к виду, где косвенные параметры получаются из настроек WG и пира. Остается только задать название интерфейса WG и интернет-интерфейса (нужен для извлечения ip адреса интернет-интерфейса). От последнего можно было бы избавиться тоже, но у меня на интернет-интерфейсе висит еще второй ip (192.168.... не спрашивайте зачем). Поэтому в моем скрипте мутноватая схема извлечения ip интернет-интерфейса, но должно работать и у всех. Ну и конечно когда меняете настройки нужно удалить вручную шаблон пакета, т.к. в моем скрипте он создается 1 раз, и большинство настроек в нем потом не меняется: /tool/traffic-generator/packet-template/remove packet-template-wg

@Chupakabra303 а в чём может быть проблема? запускаю скрипт вручную, порт меняется, пакет создаётся, но соединение из-под блока не выходит. Могут ли быть проблемы в момент отправки мусорного пакета? Как удостовериться, что он отправляется?

@DanzoGit
Copy link

От души 💖 Скрипт помог.

@VladimirPavlyuk
Copy link

Спасибо!
Помогло.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment