Skip to content

Instantly share code, notes, and snippets.

@httpsx
Last active July 17, 2025 06:15
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. Данный гайд помогает обойти эту блокировку.
@ropucyka
Copy link

А чем со смартфона пакеты отправить можно?

@koolvn
Copy link

koolvn commented Aug 31, 2024

Добрые люди! А скажите как заставить на asuswrt этот скрипт крутить?

https://gist.github.com/koolvn/993d9c7eb2666dbf15bdccc7d3c4fe33

@HPo1nt
Copy link

HPo1nt commented Aug 31, 2024

А чем со смартфона пакеты отправить можно?

На 4пда советовали hiddify со скриптом варпа.

@morzexxx
Copy link

morzexxx commented Aug 31, 2024

Интересная мысль пришла мне в голову. Если ТСПУ анализируют начало всех соединений (несклько байт) давайте может начнем массово создавать эти соединения и посмотрим что будет? Кто нить может написать такой скрипт?) Что если устроить "бесконечное начало"?

@Andrey52222
Copy link

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

@HPo1nt
Copy link

HPo1nt commented Aug 31, 2024

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

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

@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

wiktorbgu commented Sep 2, 2024

Будущие обновления будут тут: https://gist.github.com/wiktorbgu/1f2dfe99837d8f2803483be95814d2e5

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

Upd.: увеличил время в фильтре до 2м30с как защита от ложных срабатываний у медленных подключений.
Считаю выполнение скрипта раз в 2 минуты средним нормальным значением.
Так же добавил в скрипт закомментированную строку с возможность исключения какого-либо wg интерфейса из проверки.

Update for ROS >= 7.17: у пиров изменили свойство is-responder на responder! добавил закоментированную строку в скрипт.
Если при выполнении скрипта на этапе генерации трафика выходит ошибка в лог, то:
выполнить команду /system/device-mode/print
если получаем mode: advanced и при этом в выводе нету traffic-gen: yes,
выполняем команду
/system/device-mode/update traffic-gen=yes и следуем инструкциям.
Официальная справка по device-mode.

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

# Для версии ROS >= 7.17
#:foreach i in=[find where disabled=no and responder!=yes] do={

# Исключить подключение wireguard-client по имени интерфейса чтобы скрипт его никогда не трогал
#:foreach i in=[find where disabled=no and is-responder!=yes and interface!="wireguard-client"] do={

: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 "2m30s"]) 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 строчки с вариациями (меняйте эти числа, не нужно их повторять) и наслаждаемся!

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