Last active
April 29, 2026 08:06
-
-
Save mrkhachaturov/732ed274b35b38cf4cb86037f6035584 to your computer and use it in GitHub Desktop.
Revisions
-
mrkhachaturov revised this gist
Aug 25, 2024 . 1 changed file with 3 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -342,6 +342,7 @@ </details> <details> <summary> Шаг 6: Динамическое получение списка заблокированных доменов из внешнего источника и маршрутизация по VPN</summary> Раздел в разработке. </details> -
mrkhachaturov revised this gist
Aug 25, 2024 . 1 changed file with 3 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,7 @@ # Обход блокировок WireGuard с помощью скрипта на AsusWRT-Merlin В связи с блокировками со стороны Роскомнадзора, возникает необходимость обойти такие ограничения для WireGuard на вашем роутере. Это можно сделать путем отправки одного произвольного UDP-пакета, который нарушает первоначальное распознавание протокола WireGuard. Следуйте этим шагам, чтобы настроить решение на базе прошивки AsusWRT-Merlin. Сейчас я разрабатываю установку AmneziaWG для роутеров ASUS с прошивкой AsusWRT-Merlin, что обеспечит более устойчивое и автоматизированное решение этих проблем. Отправка UDP-пакета является временным решением для обхода текущих ограничений, пока не будет завершена интеграция AmneziaWG <details> <summary> Шаг 1: Установка прошивки [AsusWRT-Merlin](https://www.asuswrt-merlin.net/)</summary> -
mrkhachaturov revised this gist
Aug 25, 2024 . 1 changed file with 4 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -337,6 +337,9 @@ # Задача будет запускать скрипт каждую 5 минут cru a wireguard_script "*/5 * * * * /jffs/scripts/wireguard.sh" ``` </details> <details> <summary> Шаг 6: Динамическое получение списка заблокированных доменов из внешнего источника и маршрутизация по VPN:</summary> В разработке. </details> -
mrkhachaturov revised this gist
Aug 25, 2024 . 2 changed files with 342 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +0,0 @@ This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,342 @@ # Обход блокировок WireGuard с помощью скрипта на AsusWRT-Merlin В связи с блокировками со стороны РНК, возникает необходимость обойти такие ограничения для WireGuard на вашем роутере. Это можно сделать путем отправки одного произвольного UDP-пакета, который нарушает первоначальное распознавание протокола WireGuard. Следуйте этим шагам, чтобы настроить решение на базе прошивки AsusWRT-Merlin. <details> <summary> Шаг 1: Установка прошивки [AsusWRT-Merlin](https://www.asuswrt-merlin.net/)</summary> Начнем с того, что роутер должен быть прошит прошивкой AsusWRT-Merlin. Проверьте, поддерживается ли ваш роутер, перейдя на сайт AsusWRT-Merlin. Следуйте инструкциям на сайте для установки прошивки. </details> <details> <summary>Шаг 2: Подключение USB флешки и установка [Entware](https://github.com/RMerl/asuswrt-merlin.ng/wiki/Entware)</summary> 1. Процесс установки и настройки должен выполняться через telnet или SSH. Если эта часть кажется вам сложной, то лучше сразу отказаться от использования Entware, поскольку все необходимо устанавливать и настраивать через telnet/SSH. 2. Для начала, перейдите в веб-интерфейс вашего роутера, чтобы включить доступ по SSH. В данном примере эта настройка находится следующим образом: Администрирование -> Система.  3. Вам необходимо подключить USB-диск, отформатированный в нативной файловой системе Linux (ext2, ext3 или ext4). Чтобы отформатировать диск, используйте утилиту amtm. Подключите USB-диск к вашему роутеру, затем запустите amtm командой ``` amtm ``` <img src="https://gist.github.com/user-attachments/assets/e2a9b262-84a8-4c9d-ab98-1e5f96f8c0ba" alt="CleanShot 2024-08-25" width="500"/> и выберите опцию 'fd' для форматирования диска. 4. Чтобы начать процесс установки Entware запустите приложение amtm в терминале, выполнив команду ``` amtm ``` Меню предложит вам опцию 'ep' для начала установки Entware. Если у вас используется версия прошивки старше 384.15 (или 384.13_4 для моделей RT-AC87U и RT-AC3200), тогда начните установку, запустив скрипт "entware-setup.sh". </details> <details> <summary> Шаг 3: Установка [WireGuard Manager](https://github.com/MartineauUK/wireguard)</summary> 1. Для установки WireGuard Manager, выполните: ``` amtm ``` 2. Набирайте `i` далее `wg` для устновки Wireguard Manager. 3. После установки, для доступа к интерфейсу WireGuard Manager в терминале роутера введите: ``` wg_manager ```  </details> <details> <summary> Шаг 4: Добавление [клиента](https://github.com/ZebMcKayhan/WireguardManager?tab=readme-ov-file#import-client)</summary> 1. Разместите файл конфигурации клиента в: ``` /opt/etc/wireguard.d/ ``` 2. Назовите файл, как вам удобно, но завершите его .conf (например, wireguard.conf). Включите ListenPort в конфигурацию. ``` [Interface] ## wireguard.conf Address = 10.2.100.2/32 PrivateKey = 2D8Y..../Uo= DNS = 10.100.0.1. # DNS указан ip адреса роутера для использования dnsmasq с ipset ListenPort=56012 [Peer] PublicKey = nK8eL....HE= PreSharedKey = L....= AllowedIPs = 0.0.0.0/0, ::/0 Endpoint = 11.22.33.44:443 # Адрес сервера PersistentKeepalive = 10 ``` 3. Импортируйте конфигурацию в WireGuard Manager, используя: ``` E:Option ==> import wireguard.conf ``` 4. Проверьте успешность импорта командой peer в WireGuard Manager.  5. Интерфейс можно активирвовать командой `start wg11`, где wg11 - это имя вашего клиента. Пока автивировать не нужно. Дополнительные команды можно найти [здесь](https://github.com/ZebMcKayhan/WireguardManager?tab=readme-ov-file#import-client) </details> <details> <summary> Шаг 5: Установка скрипта для автоматической отправки пакетов UDP</summary> 1. Установите socat: ``` opkg update opkg install socat ``` 2. Перейдите в `/jffs/scripts` и создайте новый скрипт `wireguard.sh`: ``` nano /jffs/scripts/wireguard.sh ``` Примечание: Если nano не установлен, выполните: ``` opkg update opkg install nano ``` 3. Вставьте в редактор следующий скрипт и измените название интерфейсов, если необходимо. Обратите внимание на строку, где указан список интерфейсов WireGuard. Измените значение WG_INTERFACES на название интерфейса, который вы используете. ``` #!/bin/bash # Определяем файл журнала на USB-устройстве LOG_FILE="/tmp/mnt/usb/logs/wireguard_unblock.log" # Убедимся, что каталог для лога существует mkdir -p "$(dirname "$LOG_FILE")" # Перенаправляем stdout и stderr в файл журнала exec 1>>"$LOG_FILE" 2>&1 # Функция для записи сообщений в лог с отметкой времени log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" } # Список интерфейсов WireGuard, которые нужно обработать, в виде строки WG_INTERFACES="wg11" # Начало выполнения скрипта log "Script execution started" # Обрабатываем каждый интерфейс из списка строк for WG_INTERFACE in $WG_INTERFACES; do WG_CONFIG="/opt/etc/wireguard.d/$WG_INTERFACE.conf" # Убедимся, что файл конфигурации существует if [ ! -f "$WG_CONFIG" ]; then log "Файл конфигурации для $WG_INTERFACE не существует: $WG_CONFIG" continue fi log "Обработка интерфейса $WG_INTERFACE" # Определяем необходимые функции и логику здесь get_wireguard_endpoint() { grep "Endpoint" "$WG_CONFIG" | cut -d'=' -f2 | tr -d ' ' } get_wireguard_ip() { local ip_with_mask ip_with_mask=$(grep "Address" "$WG_CONFIG" | cut -d'=' -f2 | tr -d ' ') echo "${ip_with_mask%/*}" } get_listen_port() { grep "ListenPort" "$WG_CONFIG" | cut -d'=' -f2 | tr -d ' ' } get_peer_public_key() { grep "PublicKey" "$WG_CONFIG" | cut -d'=' -f2 | tr -d ' ' } update_listen_port() { local new_port="$1" log "Изменение ListenPort в конфигурации WireGuard на $new_port" sed -i "s/^ListenPort=.*/ListenPort=$new_port/" "$WG_CONFIG" } is_wireguard_running() { ip link show "$WG_INTERFACE" > /dev/null 2>&1 return $? # Возвращает 0, если интерфейс найден, и ненулевое значение, если нет } send_socat_packet() { local source_port="$1" local endpoint="$2" log "Отправка UDP-пакета с использованием socat с исходного порта $source_port на конечную точку $endpoint" echo ":)" | socat - UDP:"$endpoint",sourceport="$source_port" } check_data_transfer_status() { local peer_public_key="$1" local data_received data_received=$(wg show "$WG_INTERFACE" transfer | grep "$peer_public_key" | awk '{print $3}') log "Получено данных: $data_received байт" if [ "$data_received" -eq 92 ] || [ "$data_received" -eq 148 ]; then log "Полученные данные остаются постоянными на уровне $data_received байт, что может указывать на блокировку рукопожатия" return 1 else log "Передача данных выглядит нормально" return 0 fi } attempt_wireguard_connection() { local port="$1" local endpoint="$2" local peer_public_key="$3" log "Попытка подключения WireGuard с портом $port и конечной точкой $endpoint для интерфейса $WG_INTERFACE" send_socat_packet "$port" "$endpoint" sleep 2 log "Запуск интерфейса WireGuard $WG_INTERFACE" wgmExpo "start $WG_INTERFACE" sleep 10 if check_data_transfer_status "$peer_public_key"; then log "Подключение успешно" return 0 else log "Ошибка из-за возможной блокировки рукопожатия" return 1 fi } if is_wireguard_running; then log "Интерфейс WireGuard $WG_INTERFACE выполняется" peer_public_key=$(get_peer_public_key) log "Использование Peer PublicKey $peer_public_key из конфигурации WireGuard" if check_data_transfer_status "$peer_public_key"; then log "Рукопожатие действительно, пропуск интерфейса $WG_INTERFACE." continue fi fi endpoint=$(get_wireguard_endpoint) log "Использование Endpoint $endpoint из конфигурации WireGuard" initial_port=$(get_listen_port) log "Использование первоначального ListenPort $initial_port из конфигурации WireGuard" if attempt_wireguard_connection "$initial_port" "$endpoint" "$peer_public_key"; then log "Подключение WireGuard успешно установлено с портом $initial_port" continue fi while true; do log "Остановка интерфейса WireGuard $WG_INTERFACE" wgmExpo "stop $WG_INTERFACE" sleep 10 new_port=$((RANDOM % (65535 - 49152 + 1) + 49152)) log "Попытка нового случайного ListenPort: $new_port" update_listen_port "$new_port" if attempt_wireguard_connection "$new_port" "$endpoint" "$peer_public_key"; then log "Подключение WireGuard успешно установлено с портом $new_port" break fi log "Ожидание перед повторной попыткой с новым портом..." sleep 5 done done log "Выполнение скрипта завершено" ``` Этот скрипт предназначен для управления подключениями WireGuard на вашем роутере и включает следующие основные функции: Логирование: Создает файл журнала на подключенном USB-устройстве, чтобы записывать всю активность скрипта, включая ошибки и статус операций. Обработка интерфейсов WireGuard: Пробегает по списку заданных интерфейсов WireGuard (например, "wg11"), указанных в переменной WG_INTERFACES. Для каждого интерфейса скрипт извлекает конфигурационные параметры, такие как направление сервера (Endpoint), IP-адрес и порт для прослушивания. Проверка Handshake: Проверяет, успешно ли установлен handshake (рукопожатие) с сервером WireGuard. Это необходимо для проверки работоспособности соединения. Изменение порта и повторная попытка подключения: Если handshake не был успешным, скрипт изменяет порт прослушивания и отправляет произвольный UDP-пакет для сброса первоначального состояния. После изменения порта и отправки пакета скрипт снова пробует подключиться к серверу WireGuard для установления соединения. --- Чтобы скрипт wireguard.sh запускался автоматически при старте роутера, нужно добавить его в инит-скрипт `/jffs/scripts/post-mount`. Ниже приведены инструкции, как это сделать, а также пример содержания файла post-mount. 1. Откройте файл `/jffs/scripts/post-mount` в текстовом редакторе, например, `nano`: ``` nano /jffs/scripts/post-mount ``` 2. Убедитесь, что ваш скрипт wireguard.sh включен в этот файл. Если строка отсутствует, добавьте её: ``` #!/bin/sh . /jffs/addons/amtm/mount-entware.mod # Added by amtm /jffs/addons/wireguard/wg_manager.sh init "" & # WireGuard Manager /jffs/scripts/wireguard.sh & # Автоматический запуск скрипта WireGuard ``` 3. Сохраните изменения и выйдите из редактора. 4. Убедитесь, что файл post-mount и wireguard.sh имеет право на исполнение: ``` chmod +x /jffs/scripts/post-mount chmod +x /jffs/scripts/wireguard.sh ``` --- Чтобы ваш скрипт `wireguard.sh` запускался каждые 5 минут для проверки соединения, вы можете использовать встроенную в роутер систему планирования задач, которая называется `cron`. AsusWRT-Merlin прошивка поддерживает эту систему через утилиту `cru`. Вот как можно добавить эту задачу: 1. Откройте или создайте файл `/jffs/scripts/init-start`, который используется для конфигурации задач, выполняющихся при запуске роутера: ``` nano /jffs/scripts/init-start ``` 2. Добавление задачи в планировщик cron: Вставьте следующее содержимое в файл, чтобы конфигурировать автоматический запуск скрипта: ``` #!/bin/sh # /jffs/scripts/init-start # Добавляем задачу в cron с помощью cru # Задача будет запускать скрипт каждую 5 минут cru a wireguard_script "*/5 * * * * /jffs/scripts/wireguard.sh" ``` </details> -
mrkhachaturov created this gist
Aug 25, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ Тест