Skip to content

Instantly share code, notes, and snippets.

@httpsx
Last active June 30, 2026 20:08
Show Gist options
  • Select an option

  • Save httpsx/76a98ea28e6f3a4ffc947e768c0b6c01 to your computer and use it in GitHub Desktop.

Select an option

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. Данный гайд помогает обойти эту блокировку.
@pablobablo

pablobablo commented Aug 29, 2024

Copy link
Copy Markdown

Спасибо! Проверил - работает.
То же самое но скрипт для Linux/MacOs

wgIP="111.222.333.444"
wgPORT=51820
wgListenPort=56123
echo -n ":)" | nc -u -p $wgListenPort $wgIP $wgPORT -w 1

@azharkov78

azharkov78 commented Aug 30, 2024

Copy link
Copy Markdown

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

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

@Wyou-VK

Wyou-VK commented Aug 30, 2024

Copy link
Copy Markdown

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

@Eurgen

Eurgen commented Aug 30, 2024

Copy link
Copy Markdown

У вас на таком 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={

@Altair200333

Copy link
Copy Markdown

У меня способ больше не работает, хотя недавно помогало. Смена порта и даже сообщения не помогает, передача виснет на 828b (иногда и в kb уходит и встаёт)

@ropucyka

Copy link
Copy Markdown

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

@koolvn

koolvn commented Aug 31, 2024

Copy link
Copy Markdown

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

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

@HPo1nt

HPo1nt commented Aug 31, 2024

Copy link
Copy Markdown

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

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

@morzexxx

morzexxx commented Aug 31, 2024

Copy link
Copy Markdown

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

@Andrey52222

Copy link
Copy Markdown

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

@HPo1nt

HPo1nt commented Aug 31, 2024

Copy link
Copy Markdown

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

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

@Andrey52222

Copy link
Copy Markdown

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

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

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

@terloid

terloid commented Sep 1, 2024

Copy link
Copy Markdown

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

@crnomonethis079

Copy link
Copy Markdown

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

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

@HPo1nt

HPo1nt commented Sep 1, 2024

Copy link
Copy Markdown

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

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

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

@crnomonethis079

Copy link
Copy Markdown

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

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

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

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

@HPo1nt

HPo1nt commented Sep 2, 2024

Copy link
Copy Markdown

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

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

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

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

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

@azharkov78

Copy link
Copy Markdown

У вас на таком 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
Copy Markdown

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

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

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

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

@wiktorbgu

wiktorbgu commented Sep 2, 2024

Copy link
Copy Markdown

Будущие обновления будут тут: 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

HPo1nt commented Sep 2, 2024

Copy link
Copy Markdown

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

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

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

@krusnik01

Copy link
Copy Markdown

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

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

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

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

@HPo1nt

HPo1nt commented Sep 3, 2024

Copy link
Copy Markdown

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

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

@Art-Vis

Art-Vis commented Sep 3, 2024

Copy link
Copy Markdown

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

@JoyZzzzz

JoyZzzzz commented Sep 4, 2024

Copy link
Copy Markdown

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

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

@JoyZzzzz

JoyZzzzz commented Sep 4, 2024

Copy link
Copy Markdown

@GPSMapper @koolvn

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

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

@Chupakabra303

Copy link
Copy Markdown

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

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

@dialbat

dialbat commented Sep 5, 2024

Copy link
Copy Markdown
fuckdpi

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

@JoyZzzzz

JoyZzzzz commented Sep 5, 2024

Copy link
Copy Markdown

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

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

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

@Chupakabra303

Chupakabra303 commented Sep 5, 2024

Copy link
Copy Markdown

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

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

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

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

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