Skip to content

Instantly share code, notes, and snippets.

@httpsx
Last active April 28, 2025 14:27
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. Данный гайд помогает обойти эту блокировку.
@Filipp0vAP
Copy link

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

[Interface]
...
PreUp = powershell -Command "$wgListenPort = 56123; $wgIP = '***EndpointIP***'; $wgPORT = 35501; $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()"

вдруг кому пригодиться)

нужно только строке PreUp поменять EndpointIP на свой и поменять порт на свой

Что бы это сработало нужно еще wg разрешить выполнение скриптов
вот тут подробнее об этом написано
https://github.com/WireGuard/wireguard-windows/blob/master/docs/adminregistry.md

@Cr0c81
Copy link

Cr0c81 commented Nov 2, 2024

перестал работать, хз по какой причине, всё также, возможно порт в бане, пробовал другие без результатов

Было такое. Попробуйте поменять значения

Jc = 4
Jmin = 8
Jmax = 32

(в зависимости от реализации механизма подключения - эти значения будут в разных местах) Главное чтобы Jmax было больше Jmin. И Jc в разумных пределах.. От 2 до 500..

Ну и порт очень желательно менять перед каждым подключением. Скрипт должен это учитывать.. Мне помогло.

В какой раздел конфига это писать? Interface или Peer?

@ferdinand-II
Copy link

перестал работать, хз по какой причине, всё также, возможно порт в бане, пробовал другие без результатов

Было такое. Попробуйте поменять значения

Jc = 4
Jmin = 8
Jmax = 32

(в зависимости от реализации механизма подключения - эти значения будут в разных местах) Главное чтобы Jmax было больше Jmin. И Jc в разумных пределах.. От 2 до 500..
Ну и порт очень желательно менять перед каждым подключением. Скрипт должен это учитывать.. Мне помогло.

В какой раздел конфига это писать? Interface или Peer?

Interface

@Vertybird
Copy link

Vertybird commented Nov 13, 2024

Арендовал VPS под ВПН. Пытаюсь подружить WireGuard с TunnlTo. После выполнения скрипта из поста сам WireGuard работает, но при загрузке конфига в TunnlTo соединение не проходит дальше рукопожатия, в логах пишет каждые 5 секунд сообщения типа:

2024-11-13 13:04:40 [TUN]: keep_alive_thread: Sending Handshake packet to WireGuard Server success

Соединение с интернетом падает, пока не вырублю тоннель. Есть мысли, как решить проблему? Может в TunnlTo какие то данные из WireGuard дописать? Нужно ограничить WireGuard для некоторых программ, чтобы айпи оставался российским.

@Anarhia93
Copy link

День добрый, последняя неделя отлетает WG.
Установлен на роутер, есть ли способ обойти?
Буду очень признателен за помощь.

@Kuray0
Copy link

Kuray0 commented Mar 21, 2025

обход не робит, что делать?

@ferdinand-II
Copy link

обход не робит, что делать?

сушить вёсла,лавочка прикрылась

@JoyZzzzz
Copy link

обход не робит, что делать?

Попробуйте другой способ. Например вот этот https://gist.github.com/koolvn/993d9c7eb2666dbf15bdccc7d3c4fe33

@Andrey52222
Copy link

Кто поднял wireguard на keenetic? Поделитесь методом пожалуйста

@Andrey52222
Copy link

Andrey52222 commented Apr 2, 2025

Кто поднял wireguard на keenetic? Поделитесь методом пожалуйста

Вот это помогло https://github.com/Ground-Zerro/Wireguard-DPI-blocking-bypass/releases/tag/v0.2.0

@mgryaznov
Copy link

Доброго времени суток. И все-таки, как аналогичное реализовать на телефоне с Android?

@mgryaznov
Copy link

Доброго времени суток. И все-таки, как аналогичное реализовать на телефоне с Android?

Сам разобрался.
DeepDeek помог) Переписал код на python и запустил его через Termux.

@MugenMan
Copy link

MugenMan commented Apr 2, 2025

на андройде работает 3 8 32, а на ios нет
писал так:
Jc = 126
Jmin = 99
Jmax = 1099
S1 = 10
S2 = 15
H1 = 1
H2 = 2
H3 = 3
H4 = 4

есть идеи? использую amneziawg

@ropucyka
Copy link

ropucyka commented Apr 2, 2025

Доброго времени суток. И все-таки, как аналогичное реализовать на телефоне с Android?

Сам разобрался. DeepDeek помог) Переписал код на python и запустил его через Termux.

Так покажи чё как

@mgryaznov
Copy link

Доброго времени суток. И все-таки, как аналогичное реализовать на телефоне с Android?

Сам разобрался. DeepDeek помог) Переписал код на python и запустил его через Termux.

Так покажи чё как

Код на питоне:

import socket

# Настройки (замените на свои!)
SERVER_IP = "x.x.x.x"
SERVER_PORT = xxxxx
LOCAL_PORT = 56123  # Порт из ListenPort

# Создаем UDP-сокет, привязанный к порту 56123
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", LOCAL_PORT))

try:
    # Отправляем "магический" пакет (содержимое не важно)
    sock.sendto(b":)", (SERVER_IP, SERVER_PORT))
    print("[+] UDP-пакет отправлен с порта 56123!")
except Exception as e:
    print(f"[-] Ошибка: {e}")
finally:
    sock.close()

На телефон ставим Termux, запускаем.
В консоли пишем:

pkg update
pkg install python
pip install scapy

Чтобы код можно было вставить извне в Termux:
pkg install termux-api
Копируем код в буфер, затем вставляем в буфер Termux:
termux-clipboard-get
Далее в Termux из буфера вставляем в файл:
termux-clipboard-get > send_udp.py
В дальнейшем исправить порт можно в nano:
nano send_udp.py

Последний этап, посылаем пакет:
python send_udp.py
Запускаем wireguard с добавленным ListenPort.

@kesha-eh
Copy link

kesha-eh commented Apr 4, 2025

Благодарю вас обоих.
Но если можно вас попросить сделать авто скрипт на питоне, который возьмёт конфиг вайра и сделает свой send_udp.py (вместо send_udp будет имя конфига вг.

@sa1tshaker
Copy link

для роутера есть какой то вариант такой? keenetic miktorik или openwrt

@degrodanya
Copy link

для роутера есть какой то вариант такой? keenetic miktorik или openwrt

нашёл что-нибудь?

@sa1tshaker
Copy link

для роутера есть какой то вариант такой? keenetic miktorik или openwrt

нашёл что-нибудь?

пока ничего достойного, какие то костыли

@ropucyka
Copy link

ropucyka commented Apr 8, 2025

Последний этап, посылаем пакет: python send_udp.py Запускаем wireguard с добавленным ListenPort.

О спасибо конечно, но лавочку уже закрыли. По крайней мере местно.

@mgryaznov
Copy link

Последний этап, посылаем пакет: python send_udp.py Запускаем wireguard с добавленным ListenPort.

О спасибо конечно, но лавочку уже закрыли. По крайней мере местно.

МТС Москва работает.

@khokmoon
Copy link

@arzam16 На OpenWRT я добавил строку для обработки pre-up в функцию if_call в /sbin/ifup:
И создал скрипт 41-antidpi в /etc/hotplug.d/iface:

[ pre-up = "$ACTION" ] && {
	if_type=`uci -q get network.$INTERFACE.proto`
	if [ "$if_type" == "wireguard" ]; then
		ip_addr=`uci -q get network.@wireguard_$INTERFACE[0].endpoint_host`
		port=`uci -q get network.@wireguard_$INTERFACE[0].endpoint_port`
		sourceport=`uci -q get network.$INTERFACE.listen_port`
		head -n 20 /dev/random | socat - UDP:$ip_addr:$port,sourceport=$sourceport
		sleep 1
	fi
}

привет. прописал все как у тебя, делаю service network restart выдает ошибки:
/sbin/hotplug-call: /etc/hotplug.d/iface/41-antidpi: line 10: syntax error: unexpected "}" (expecting "then")
не подскажешь где ковырять?

@ggb-st
Copy link

ggb-st commented Apr 26, 2025

Сегодня перестал работать. Что случилось? Я изменил ListenPort и в powershell, и в wireguard, но данные все равно не приходят.

Извините за плохой русский, это было переведено

@ABBAD0H
Copy link

ABBAD0H commented Apr 28, 2025

Скрипт как то странно себя ведет. Если его запустить то даже без Wireguard впн заработает, а если подключиться к тунелю то сеть упадет. Но с другой стороы непонятно, как остановить его работу, если не считать перезагрузки?

@ggb-st
Copy link

ggb-st commented Apr 28, 2025

Сегодня перестал работать. Что случилось? Я изменил ListenPort и в powershell, и в wireguard, но данные все равно не приходят.

Извините за плохой русский, это было переведено

Я исправил свою проблему, запуская это при каждой перезагрузке:
sudo sysctl -w net.ipv4.ip_forward=1

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