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