Инструменты пользователя

Инструменты сайта


awg20

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
awg20 [17.02.2026 15:32] – создано auginawg20 [17.02.2026 16:20] (текущий) – [Скрипты запуска] augin
Строка 1: Строка 1:
-$\textcolor{green}{\text{v2026-02-12}}$ +====== entware ====== 
-# Использование AWG-Go c KeenOS 5.0 +<code bash>opkg install mc htop curl</code> 
-***+<code bash>cd ~;mkdir awg2-go;cd awg2-go</code> 
 +<code bash> 
 +wget http://zyxnerd.zyxmon.org/files/awg2/amneziawg-go_v0.2.16-1_aarch64-3.10.ipk 
 +wget http://zyxnerd.zyxmon.org/files/awg2/amneziawg-tools_1.0.20250903-2_aarch64-3.10.ipk 
 +</code> 
 +<code bash>opkg install /opt/root/awg2-go/amneziawg-tools*.ipk && opkg install /opt/root/awg2-go/amneziawg-go*.ipk 
 +</code>
  
-Есть 2 варианта использования:   
-1) Точно так же, как и для прошивки [KeenOS 4.3](/../../blob/main/blob/02__KeenOS_4.3/KeenOS_4.3.md)  .   
-2) Через новый интерфейс *OpkgTun*, который стал доступен в прошивке KeenOS 5.0.   
-Ниже рассмотрим именно последний вариант. 
  
  
-## 1) Изменяем и загружаем conf-файл на роутер   +[[https://gitlab.com/ShidlaSGC/keenetic-entware-awg-go/-/blob/main/blob/02__KeenOS_5.0_(OpkgTun)/KeenOS_5.0_(OpkgTun).md?ref_type=heads]] 
-На этапе подготовки был сделан файл *awg0.conf* с вписанными в него параметрами *i1...i5*.   +  - Изменяем и загружаем conf-файл на роутер
-Для корректной работы с интерфейсом ***OpkgTun*** данный файл надо немного подправить, так же переименуем его в *awg0-opkgtun0.conf*, что бы не запутаться в файлах. В файле *awg0-opkgtun0.conf* $\textcolor{red}{\text{обязательно}}$ удалить строчки *Address* и *DNS* **или** закомментировать их как на скриншоте ниже:   +
-![awg0-opkgtun0](!img/00__awg0-opkgtun0_with_SpecialJunk.png)  +
  
-Теперь файл *awg0-opkgtun0.confтребуется загрузить в роутер по пути */opt/etc/amnezia/amneziawg/или же через общую сетевую папку  +На этапе подготовки был сделан файл awg0.conf с вписанными в него параметрами i1...i5. 
-![Copy opkgtun-conf-file](!img/01__Copy_awg0-opkgtun0.png)  +Для корректной работы с интерфейсом OpkgTun данный файл надо немного подправить, так же переименуем его в awg0-opkgtun0.conf, что бы не запутаться в файлах. В файле awg0-opkgtun0.conf обязательно удалить строчки Address и DNS или закомментировать их как на скриншоте ниже:
  
 +Теперь файл awg0-opkgtun0.conf требуется загрузить в роутер по пути /opt/etc/amnezia/amneziawg/ или же через общую сетевую папку:
 + 
 +  - Добавляем интерфейс OpkgTun в роутер
  
-## 2) Добавляем интерфейс *OpkgTun* в роутер +! ВНИМАНИЕ ! команды ниже выполнять СТРОГО из под обычного логина ssh! НЕ через exec sh, иначе получите ошибку ndmc: system failed [0xcffd0060]
-### ! ВНИМАНИЕ ! команды ниже выполнять *СТРОГОиз под обычного логина ssh! НЕ через *exec sh*, иначе получите ошибку *ndmc: system failed [0xcffd0060]+
-Есть два пути, хотя смысл у них один - добавление интерфейса через cli роутера.   +
-В данной статье будем добавлять через ssh-консоль. Для этого нужно последовательно выполнить команды ниже.   +
-1) Создание самого интерфейса *OpkgTun0*:   +
-    ``` shell +
-    ndmc -c interface OpkgTun0 +
-    ``` +
-2) Задаём описание, т.е. как интерфейс *OpkgTun0* будет называться в веб-морде роутера, в данном случае это ***AWG-Go***:   +
-    ``` shell +
-    ndmc -c interface OpkgTun0 description AWG-Go +
-    ``` +
-    Вы можете придумать название самостоятельно.  +
  
-3) Команда для отображения, статуса, подсчёта трафика интерфейса *OpkgTun0*:   +Есть два пути, хотя смысл у них один - добавление интерфейса через cli роутера. 
-    ``` shell +В данной статье будем добавлять через ssh-консоль. Для этого нужно последовательно выполнить команды ниже.
-    ndmc -c interface OpkgTun0 ip global auto +
-    ```+
  
-4) Назначаем IP-адрес и маску подсети интерфейсу *OpkgTun0*  +====== Создание самого интерфейса OpkgTun0: ====== 
-    ``` shell +<code bash>ndmc -c interface OpkgTun0</code> 
-    ndmc -c interface OpkgTun0 ip address 10.8.1.6 255.255.255.255 +Задаём описание, т.е. как интерфейс OpkgTun0 будет называться в веб-морде роутера, в данном случае это AWG-Go: 
-    ``` +<code bash>ndmc -c interface OpkgTun0 description AWG-Go</code> 
-    $\textcolor{ORANGE}{\text{IP-адрес обязательно должен быть такой же, как и в поле}}$ *Address* $\textcolor{ORANGE}{\text{в файле}}$ *awg0-opkgtun0.conf*!+Вы можете придумать название самостоятельно. 
 +Команда для отображения, статуса, подсчёта трафика интерфейса OpkgTun0: 
 +<code bash>ndmc -c interface OpkgTun0 ip global auto</code> 
 +Назначаем IP-адрес и маску подсети интерфейсу OpkgTun0: 
 +<code bash>ndmc -c interface OpkgTun0 ip address 10.8.1.6 255.255.255.255</code> 
 +IP-адрес обязательно должен быть такой же, как и в поле\textcolor{ORANGE}{\text{IP-адрес обязательно должен быть такой же, как и в поле}}IP-адрес обязательно должен быть такой же, как и в поле Address в файле\textcolor{ORANGE}{\text{в файле}}в файле awg0-opkgtun0.conf! 
 +Устанавливаем MTU для интерфейса OpkgTun0: 
 +<code bash>ndmc -c interface OpkgTun0 ip mtu 1376</code> 
 +Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети. Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети.}}Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети. В моём случае подходит значение 1376. Если не уверены - Вы можете использовать значение 1280, как то, которое с вероятностью 99% Вам подойдёт.
  
-5) Устанавливаем MTU для интерфейса *OpkgTun0*:   +Настройка, которая корректирует максимальный размер сегмента TCP, чтобы он соответствовал PMTU, то есть минимальному MTU на всём пути следования пакета до получателя, автоматически подстраивая его: 
-    ``` shell +<code bash>ndmc -c interface OpkgTun0 ip tcp adjust-mss pmtu</code> 
-    ndmc -c interface OpkgTun0 ip mtu 1376 +Поднимаем сам интерфейс OpkgTun0: 
-    ``` +<code bash>ndmc -c interface OpkgTun0 up</code> 
-    > $\textcolor{ORANGE}{\text{Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети.}}$ В моём случае подходит значение *1376*. Если не уверены Вы можете использовать значение *1280*, как то, которое с вероятностью 99% Вам подойдёт.+Добавляем правило маршрутизации для работы интерфейса OpkgTun0 в политиках доступа
 +<code bash>ndmc -c ip route default OpkgTun0</code> 
 +Сохраняем настройки системы: 
 +<code bash>ndmc -c system configuration save</code>
  
-6) Настройка, которая корректирует максимальный размер сегмента TCP, чтобы он соответствовал PMTU, то есть минимальному MTU на всём пути следования пакета до получателя, автоматически подстраивая его:   
-    ``` shell 
-    ndmc -c interface OpkgTun0 ip tcp adjust-mss pmtu 
-    ``` 
  
-7) Поднимаем сам интерфейс *OpkgTun0*:   
-    ``` shell 
-    ndmc -c interface OpkgTun0 up 
-    ``` 
-8) Добавляем правило маршрутизации для работы интерфейса *OpkgTun0* в политиках доступа:   
-    ``` shell 
-    ndmc -c ip route default OpkgTun0 
-    ``` 
-9) Сохраняем настройки системы:   
-    ``` shell 
-    ndmc -c system configuration save 
-    ``` 
  
-В ssh-терминале запуск выглядит примерно так:   +====== Скрипты запуска ======
-![OpkgTun creation](!img/03__Create_OpkgTun0_via_SSH.png)+
  
 +Для работы AWG-Go с интерфейсом OpkgTun0 требуется добавить в роутер другой скрипт запуска S52awg-opkgtun0.
 +Скачать скрипт в папку запуска можно вводом команды:
  
 +<code bash>cd /opt/etc/init.d/ && curl -OLf "https://gitlab.com/ShidlaSGC/keenetic-entware-awg-go/-/raw/main/blob/02__KeenOS_5.0_(OpkgTun)/S52awg-opkgtun0" && chmod +x S52awg-opkgtun0</code>
  
-## 3) Скрипты запуска   +Так же если требуется отключить автозапуск  /opt/etc/init.d/S89amnezia-wg-quick- нужно переименовать S89amnezia-wg-quick в K89amnezia-wg-quick. Это можно сделать или через общую сетевую папку или через команду: 
-Для работы AWG-Go с интерфейсом ***OpkgTun0*** требуется добавить в роутер другой скрипт запуска *S52awg-opkgtun0*.   +<code bash>
-Скачать скрипт в папку запуска можно вводом команды:   +
-``` shell +
-cd /opt/etc/init.d/ && curl -OLf "https://gitlab.com/ShidlaSGC/keenetic-entware-awg-go/-/raw/main/blob/02__KeenOS_5.0_(OpkgTun)/S52awg-opkgtun0" && chmod +x S52awg-opkgtun0 +
-``` +
- +
-Так же если требуется отключить автозапуск  */opt/etc/init.d/S89amnezia-wg-quick*- нужно переименовать *S89amnezia-wg-quickв ***K**89amnezia-wg-quick*. Это можно сделать или через общую сетевую папку или через команду:   +
-``` shell+
 mv /opt/etc/init.d/S89amnezia-wg-quick /opt/etc/init.d/K89amnezia-wg-quick mv /opt/etc/init.d/S89amnezia-wg-quick /opt/etc/init.d/K89amnezia-wg-quick
-``` 
  
 +</code>
 +
 +<code bash>/opt/etc/init.d/S52awg-opkgtun0 start</code>
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +====== S52awg-opkgtun0 ======
 +<code bash>
 +#!/bin/sh
 +
 +
 +ENABLED=yes
 +PROCS="amneziawg-go"
 +PATH="/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
 +DESC="AmneziaWG OpkgTun"
 +PROGRAM="${0##*/}"
 +AWG_BIN="/opt/bin/awg"
 +VER="v2025-12-26 Fin"
 +KEENOS_VER_MAJOR=$(ndmc -c "show version" | grep -o 'title: [0-9]' | cut -d' ' -f2)
 +KEENOS_VER=$(ndmc -c "show version" | grep -oE 'title: [0-9.]+' | cut -d' ' -f2)
 +
 +# ================== НАСТРОЙКИ ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ==================
 +# Интерфейс OpkgTun
 +OPKGTUN_INTERFACE="opkgtun0"
 +
 +# Размер MTU, применяемый к интерфейсу OpkgTun
 +OPKGTUN_MTU="1376"
 +
 +# Файл конфигурации AWG
 +AWG_CONF="/opt/etc/amnezia/amneziawg/awg0-opkgtun0.conf"
 +
 +
 +# Сервер:порт для проверки скорости через iperf3.
 +SPEEDTEST_SRV_ADDRESSES="
 +it1.speedtest.aruba.it:5201
 +mskst.st.mtsws.net:3333
 +"
 +# Время в секундах на тестирование скорости в каждую сторону
 +SPEEDTEST_TIME="5"
 +# =================================================================
 +
 +
 +cmd_start() {
 +    [ "$ENABLED" != "yes" ] && die "⚠️ Service is disabled in script (ENABLED=no)."
 +    check_binary_files
 +    [ -f "$AWG_CONF" ] || die "⚠️ AWG config-file \e[3m $AWG_CONF \e[0m does not exist!"
 +
 +    if pgrep -f "/opt/bin/$PROCS $OPKGTUN_INTERFACE" > /dev/null; then
 +        log "ℹ️ AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m already running!"
 +        log "ℹ️ Use \"\e[3m$PROGRAM restart\e[0m\" if you need restart this interface." && echo "" && return 0
 +    fi
 +
 +    log "ℹ️ Starting AmneziaWG \e[3m$OPKGTUN_INTERFACE\e[0m interface..."
 +    logger -t "[Entware AWG-Go][Info]" "Starting AWG for \"$OPKGTUN_INTERFACE\" interface..."
 +    "/opt/bin/$PROCS" "$OPKGTUN_INTERFACE" >/dev/null 2>&1 &
 +
 +    local retries=10
 +    while [ ! -d "/sys/class/net/$OPKGTUN_INTERFACE" ] && [ $retries -gt 0 ]; do
 +        sleep 1 && retries=$((retries - 1))
 +    done
 +    sleep 2
 +    if [ -d "/sys/class/net/$OPKGTUN_INTERFACE" ]; then
 +        if ip link set dev "$OPKGTUN_INTERFACE" up; then
 +            if ("$AWG_BIN" setconf "$OPKGTUN_INTERFACE" "$AWG_CONF") ; then
 +                if ip link set dev "$OPKGTUN_INTERFACE" mtu "$OPKGTUN_MTU" 2>/dev/null; then
 +                    logger -t "[Entware AWG-Go][Info]" "MTU \"$OPKGTUN_MTU\" successfully set on \"$OPKGTUN_INTERFACE\""
 +                else
 +                    logger -t "[Entware AWG-Go][Err]" "Failed to set MTU \"$OPKGTUN_MTU\" on \"$OPKGTUN_INTERFACE\""
 +                fi
 +                logger -t "[Entware AWG-Go][Info]" "Successfully configured \"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\""
 +                log "✅ Successfully configured AWG-opkgtun: \e[3m$OPKGTUN_INTERFACE\e[0m  |  MTU \e[3m$OPKGTUN_MTU\e[0m"
 +                sleep 2 && echo ""&& cmd_status
 +            else
 +                sleep 2 && cmd_stop
 +                logger -t "[Entware AWG-Go][Err]" "Failed to apply config \"$AWG_CONF\" to \"$OPKGTUN_INTERFACE\"!"
 +                die "❌ Failed to apply config \e[3m$AWG_CONF\e[0m to \e[3m$OPKGTUN_INTERFACE\e[0m."
 +            fi
 +        else
 +            cmd_stop
 +            logger -t "[Entware AWG-Go][Err]" "Failed to UP network interface \"$OPKGTUN_INTERFACE\"!"
 +            die "❌ Failed to UP network interface \e[3m$OPKGTUN_INTERFACE\e[0m."
 +        fi
 +    else
 +        logger -t "[Entware AWG-Go][Err]" "Interface \"$OPKGTUN_INTERFACE\" did not appear after start!"
 +        die "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m did not appear after start."
 +    fi
 +}
 +
 +
 +cmd_stop() {
 +    check_binary_files
 +
 +    local AWG_PID=$(pgrep -f "/opt/bin/$PROCS $OPKGTUN_INTERFACE")
 +    if [ -n "$AWG_PID" ]; then
 +        logger -t "[Entware AWG-Go][Info]" "Stopping  AWG for \"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\"..."
 +        log "ℹ️ Stopping AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m (PID: $AWG_PID)..."
 +        kill "$AWG_PID" > /dev/null 2>&1
 +
 +        local timeout=5
 +        while pgrep -f "/opt/bin/$PROCS $OPKGTUN_INTERFACE" > /dev/null && [ $timeout -gt 0 ]; do
 +            sleep 1 && timeout=$((timeout - 1))
 +        done
 +
 +        if pgrep -f "/opt/bin/$PROCS $OPKGTUN_INTERFACE" > /dev/null; then
 +            logger -t "[Entware AWG-Go][Warn]" "Process did not respond, forcing termination AWG for \"$OPKGTUN_INTERFACE\"..."
 +            log "⚠️ Process did not respond, forcing termination... ⚠️"
 +            kill -9 "$AWG_PID" > /dev/null 2>&1
 +        fi
 +
 +        if [ -d "/sys/class/net/$OPKGTUN_INTERFACE" ]; then
 +             ip link set dev "$OPKGTUN_INTERFACE" down
 +        fi
 +        logger -t "[Entware AWG-Go][Info]" "AWG for \"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\" stopped successfully."
 +        log "✅ AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m stopped successfully." && echo ""
 +    else
 +        log "ℹ️ AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m is NOT running." && echo ""
 +    fi
 +}
 +
 +
 +cmd_status() {
 +    check_binary_files
 +    check_package_installed "curl" "^curl"
 +
 +    echo -e "==================== INTERFACE \e[3m$OPKGTUN_INTERFACE\e[0m STATUS ===================="
 +    if [ ! -d "/sys/class/net/$OPKGTUN_INTERFACE" ]; then
 +        die "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m does NOT exist!"
 +    else
 +
 +#        ip -c -br link show dev "$OPKGTUN_INTERFACE"
 +    INTERFACE_INFO=$(ip addr show $OPKGTUN_INTERFACE 2>/dev/null)
 +    if [ -z "$INTERFACE_INFO" ]; then
 +        die "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m does NOT exist!" && exit 1
 +    fi
 +    INTERFACE_IP=$(echo "$INTERFACE_INFO" | grep -oE 'inet [0-9.]+' | cut -d' ' -f2)
 +    [ -z "$INTERFACE_IP" ] && INTERFACE_IP="❌ Not assigned"
 +    RAW_STATE=$(echo "$INTERFACE_INFO" | grep -oE 'state [A-Z]+' | cut -d' ' -f2)
 +    case "$RAW_STATE" in
 +        UP)      INTERFACE_STATE="\033[1;32mUP\033[0m" ;;
 +        DOWN)    INTERFACE_STATE="\033[1;31mDOWN\033[0m" ;;
 +        *)       INTERFACE_STATE="\033[1;33mUNKNOWN\033[0m" ;;
 +    esac
 +    INTERFACE_MTU=$(echo "$INTERFACE_INFO" | grep -oE 'mtu [0-9]+' | cut -d' ' -f2)
 +    log "IP: \e[3m$INTERFACE_IP\e[0m | State: \e[3m$INTERFACE_STATE\e[0m | MTU: \e[3m$INTERFACE_MTU\e[0m"
 +
 +        
 +        if pgrep -f "/opt/bin/$PROCS $OPKGTUN_INTERFACE" > /dev/null; then
 +            logger -t "[Entware AWG-Go][Info]" "AWG-Go for \"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\" running"
 +            log "✅ AWG-Go for \e[3m$OPKGTUN_INTERFACE\e[0m running"
 +            local RAW_LASTHANDSHAKE=$("$AWG_BIN" show "$OPKGTUN_INTERFACE" latest-handshakes 2>/dev/null)
 +            LASTHANDSHAKE=$(echo "$RAW_LASTHANDSHAKE" | awk '{print $2}' 2>/dev/null)
 +            if [ -n "$LASTHANDSHAKE" ] && [ "$LASTHANDSHAKE" -ne 0 ] 2>/dev/null; then
 +                logger -t "[Entware AWG-Go][Info]" "\"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\" Last Handshake: $(date -d "@$LASTHANDSHAKE" '+%Y-%m-%d %H:%M:%S')"
 +                log "ℹ️ Last Handshake: $(date -d "@$LASTHANDSHAKE" '+%Y-%m-%d %H:%M:%S')"
 +            else
 +                logger -t "[Entware AWG-Go][Warn]" "\"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\" Last Handshake: NONE (No connection)"
 +                log "⚠️ Last Handshake: ❌ \e[31mNONE\e[0m (No connection)"
 +            fi
 +
 +            echo "-------------------------------------------------------------------"
 +            log "ℹ️ Testing external IP via \e[3m$OPKGTUN_INTERFACE\e[0m..."
 +            local VPS_IP=$(curl --interface "$OPKGTUN_INTERFACE" -s --max-time 3 ifconfig.me 2>/dev/null)
 +            if [ -n "$VPS_IP" ]; then
 +                logger -t "[Entware AWG-Go][Info]" "External IP via \"$OPKGTUN_INTERFACE\": $VPS_IP"
 +                log "✅ External IP via \e[3m$OPKGTUN_INTERFACE\e[0m: \e[33m$VPS_IP\e[0m"
 +            else
 +                logger -t "[Entware AWG-Go][Warn]" "Failed to obtain external IP via \"$OPKGTUN_INTERFACE\""
 +                log "❌ \e[31mFailed to obtain external IP\e[0m via \e[3m$OPKGTUN_INTERFACE\e[0m"
 +            fi
 +        else
 +            log "ℹ️ AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m NOT running!"
 +        fi
 +    fi
 +    echo "==================================================================="
 +    echo -e "                                            \e[3;1;34m $VER \e[0m" && echo ""
 +}
 +
 +
 +select_speedtest_server() {
 +    for srv in $SPEEDTEST_SRV_ADDRESSES; do
 +        SPEEDTEST_SRV_ADDR=${srv%%:*}
 +        SPEEDTEST_SRV_PORT=${srv##*:}
 +
 +        log "ℹ️ Checking SpeedTest server \e[3m$SPEEDTEST_SRV_ADDR:$SPEEDTEST_SRV_PORT\e[0m"
 +
 +        if curl --interface "$OPKGTUN_INTERFACE" -s --head \
 +                --connect-timeout 5 \
 +                "http://$SPEEDTEST_SRV_ADDR" >/dev/null 2>&1; then
 +            log "✅ Selected SpeedTest server \e[3m$SPEEDTEST_SRV_ADDR:$SPEEDTEST_SRV_PORT\e[0m is accessible via \e[3m$OPKGTUN_INTERFACE\e[0m"
 +            return 0
 +        fi
 +    done
 +
 +    return 1
 +}
 +
 +
 +cmd_speedtest () {
 +    check_binary_files
 +    check_package_installed "curl" "^curl"
 +    check_package_installed "iperf3" "^iperf3 -"
 +
 +    echo -e "==================== INTERFACE \e[3m$OPKGTUN_INTERFACE\e[0m SPEEDTEST ===================="
 +
 +    if [ ! -d "/sys/class/net/$OPKGTUN_INTERFACE" ]; then
 +        echo -e "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m does NOT exist!"
 +        echo "======================================================================" && echo "" && return 1
 +    fi
 +
 +    if ! pgrep -f "/opt/bin/$PROCS $OPKGTUN_INTERFACE" >/dev/null; then
 +        log "⚠️ AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m NOT running!"
 +        log "ℹ️ Can't run SpeedTest."
 +        echo "======================================================================" && echo "" && return 1
 +    fi
 +
 +    logger -t "[Entware AWG-Go][Info]" \
 +        "AWG-Go for \"$OPKGTUN_INTERFACE\" with \"$AWG_CONF\" running, begin SpeedTest..."
 +    log "✅ AWG-Go for \e[3m$OPKGTUN_INTERFACE\e[0m running, begin SpeedTest..."
 +
 +    OPKGTUN_IP=$(ip -4 -br addr show "$OPKGTUN_INTERFACE" | awk '{print $3}' | cut -d'/' -f1 2>/dev/null)
 +
 +    if [ -z "$OPKGTUN_IP" ]; then
 +        logger -t "[Entware AWG-Go][Err]" \
 +            "Can't obtain \"$OPKGTUN_INTERFACE\" IPv4 address. Stopping SpeedTest."
 +        log "❌ \e[31mCan't obtain\e[0m \e[3m$OPKGTUN_INTERFACE\e[0m IPv4 address. Stopping SpeedTest."
 +        echo "======================================================================" && echo "" && return 1
 +    fi
 +
 +    if ! select_speedtest_server; then
 +        die "❌ No available SpeedTest servers via \e[3m$OPKGTUN_INTERFACE\e[0m"
 +    fi
  
-## 4) Запуск AWG-Go через интерфейс OpkgTun   +    echo "----------------------------------------------------------------------" 
-Доступные команды для скрипта *S52awg-opkgtun0*:   +    run_speedtest "↓↓ Download" "-R" "$OPKGTUN_IP" 
-Значение   | Описание +    log "----------------------------------------" 
----------- --------------- +    run_speedtest "↑↑ Upload" "" "$OPKGTUN_IP"
-start      | Запуск AWG-Go на интерфейсе OpkgTun +
-stop       | Остановка AWG-Go на интерфейсе OpkgTun +
-restart    | Перезапуск AWG-Go на интерфейсе OpkgTun +
-status     | Статистика +
-speedtest  | Проверка скорости соединения с помощью *iperf3* через *OpkgTun*  +
  
-В ssh-терминале запускаем скрипт:   +    echo "======================================================================" && echo "" 
-``` shell +}
-/opt/etc/init.d/S52awg-opkgtun0 start +
-``` +
-В ssh-терминале запуск выглядит примерно так:   +
-![AWG-Go OpkgTun start](!img/04__Start_awg0-opkgtun0.png)  +
  
-После команды *S52awg-opkgtun0 start* в WebUI появится информация о том, что интерфейс подключен и идут данные:   
-![AWG-Go OpkgTun WebUI](!img/05__OpkgTun-Web.png)   
  
-Можно запустить проверку скорости соединения через интерфейс *OpkgTun*:   
-``` shell 
-/opt/etc/init.d/S52awg-opkgtun0 speedtest 
-``` 
-Ниже два примера вывода, когда всё прошло успешно и когда один адрес оказался недоступен:   
-![opkgtun speedtest 1](!img/04__awg0-opkgtun0_speed-test_1.png)   
-![opkgtun speedtest 2](!img/04__awg0-opkgtun0_speed-test_2.png)   
  
-Так же для пользователей доступны настройки непосредственно в скрипте:   +log() { 
-![S52awg-opkgtun0 user settings](!img/04__awg0-opkgtun0_settings.png)   +    echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] $1" 
-Обратите внимание, что тест на публичных iperf3 серверах не показатель.   +}
-Ниже будет пример для замера скорости через сайт *speedtest.org*.  +
  
  
-## 5Пример настройки маршрутизации по доменным именам   +die({ 
-Переходим в настройки маршрутизации по DNS и добавляем список доменных имён и/или IP  +    log "ERROR$*" >&2 
-![WebUI DNS Routes](!img/05__Go-to_DNS-Routes.png)   +    echo -e "                                            \e[3;1;34m $VER \e[0m&& echo "
-> $\textcolor{orange}{\text{Диапазоны IP нельзя указывать в списках маршрутов DNS!}}$    +    echo "" && exit 1 
-$\textcolor{orange}{\text{Для диапазонов IP - используйте стандартную маршрутизацию из раздела WebUI "IPv*-маршруты."}}$+}
  
-Для примера создадим список из трёх сайтов:   
-![WebUI DNS Routes list add](!img/06__Create_routing_list.png)   
  
-Теперь добавляем непосредственно правила маршрутизации:   +run_speedtest() { 
-![WebUI DNS Routes add](!img/07__Create_routing_rules.png  +    local mode=$1 
-Где: +    local extra_args=$2 
-Название                | Значение +    local interface_ip=$3
------------------------ | ---------------------------------------- +
-Имя списка              | Список доменных имён и/или IP адресов (НЕ диапазонов!) +
-Адрес шлюза             | *Для соединений WG оставляем пустым* +
-Интерфейс               | Куда будут перенаправляться запросы из соответствующего списка +
-Добавлять автоматически | Обязательно к установке +
-Эксклюзивный маршрут    | Предотвращает обращение по адресам, если интерфейс недоступен, рекомендуется поставить+
  
-Теперь можно проверить, что на сайтах 2ip.io и 2ip.ru отображается IP VPS и страна изменилась.  +    for srv in $SPEEDTEST_SRV_ADDRESSES; do 
 +        SPEEDTEST_SRV_ADDR=${srv%%:*} 
 +        SPEEDTEST_SRV_PORT=${srv##*:}
  
-При переходе на сайты из списка, статистика трафика и график интерфейса OpkgTun *AWG-Go* должен меняться, т.к. идёт обмен данными  +        log "$modeTrying server \e[3m$SPEEDTEST_SRV_ADDR:$SPEEDTEST_SRV_PORT\e[0m (\e[1;3;31mtest time: $SPEEDTEST_TIME sec.\e[0m)"
-![OpgkTun WebUI traffic](!img/09__OpkgTun-Web_traffic.png +
  
-Пример списка доменных имён для замера скорости интернета через сайт *speedtest.org*: +        OUTPUT=$(iperf3 -c "$SPEEDTEST_SRV_ADDR" \ 
-``` text +                         -p "$SPEEDTEST_SRV_PORT" \ 
-speedtest.org +                         -B "$interface_ip" \ 
-nperf.com +                         $extra_args \ 
-cdnjs.cloudflare.com +                         -t $SPEEDTEST_TIME \ 
-challenges.cloudflare.com +                         --connect-timeout 3000 \ 
-nperf.net +                         --json 2>&1)
-```  +
  
 +        if echo "$OUTPUT" | grep -q '"error"'; then
 +            log "$mode: Server \e[3m$SPEEDTEST_SRV_ADDR:$SPEEDTEST_SRV_PORT\e[0m connection error."
 +            echo "----------------------------------------------------------------------"
 +            continue
 +        fi
  
 +        BYTES=$(echo "$OUTPUT" | grep -A 10 '"sum_received"' | grep '"bytes"' | awk -F: '{print $2}' | tr -d ' ,')
 +        BITS=$(echo "$OUTPUT" | grep -A 10 '"sum_received"' | grep '"bits_per_second"' | awk -F: '{print $2}' | tr -d ' ,')
  
-## 6) Политика доступа в интернет   +        MB=$(awk "BEGIN {printf \"%.2f\", $BYTES 1048576}"
-Интерфейс OpkgTun отображается в политиках доступа, так что можно делать настройку и через политики. Подробнее об этом есть [в инструкции от Amnezia см. с шага 37](https://storage.googleapis.com/amnezia/docs?m-path=/ru/documentation/instructions/keenetic-os-awg). Обратите внимание, что политика с логикой "всё в VPNдолжна быть отдельной  +        MBIT=$(awk "BEGIN {printf \"%.2f\", $BITS 1000000}")
-![OpkgTun WebUI policy](!img/10__OpkgTunAccess_policy.png +
  
-На некоторых роутерах было замечено, что при добавлении устройства в политику VPN не работает ничего вообще.   +        log "$mode Speed\e[3m$MBIT Mbit/s\e[0m" 
-Решение - проверить наличие маршрута  +        log "$mode'ed: \e[3m$MB MBytes\e[0m"
-![OpkgTun WebUI policy check](!img/11__OpkgTunAccess_policy_check.png)  +
  
-Если такого маршрута нет - добавьте его вручную:   +        return 0 
-![OpkgTun WebUI policy add](!img/12__OpkgTunAccess_policy_add.png)+    done
  
 +    log "$mode: ❌ Failed to check SpeedTest via specified servers" && return 1
 +}
  
-*** 
-*** 
  
-## 7Если понадобится заменить conf-файл на другой   +check_package_installed ({ 
-По идее этого должно быть достаточно: +    local package_name=$
-1) Останавливаем работу текущей конфигурации и AWG-Go:   +    local package_name2find=$2
-   ``` shell +
-   /opt/etc/init.d/S52awg-opkgtun0 stop   +
-    +
-2) Заменить старый файл конфигурации  */opt/etc/amnezia/amneziawg/awg0-opkgtun0.conf* на новый, [подготовив его точно так же, как и в п.п.1](KeenOS_5.0_(OpkgTun).md?ref_type=heads#1-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC-%D0%B8-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D0%BC-conf-%D1%84%D0%B0%D0%B9%D0%BB-%D0%BD%D0%B0-%D1%80%D0%BE%D1%83%D1%82%D0%B5%D1%80) данной страницы статьи.   +
-3) Заменить IP в интерфейсе *OpkgTun0* на IP адрес из ***нового conf-файла*** командой. Например, если IP адрес в новом conf-файле *10.8.1.20*, то :   +
-   ``` shell +
-   ndmc -c interface OpkgTun0 ip address 10.8.1.20 255.255.255.255     +
-   ``` +
-4) Сохраняем настройки системы:   +
-    ``` shell +
-    ndmc -c system configuration save +
-    ``` +
-5)  Запускаем AWG-Go в работу после замены conf-файла:   +
-    ``` shell +
-    /opt/etc/init.d/S52awg-opkgtun0 start +
-    ```  +
  
 +    if !(opkg list-installed | grep -q "$package_name2find"); then
 +        logger -t "[Entware AWG-Go][Info]" "Package \"$package_name\" not founded. Installing..."
 +        log "⚠️ Package \e[3m$package_name\e[0m not founded. Installing..."
 +        (opkg update && opkg install $package_name) >/dev/null
 +        if [ $? -eq 0 ]; then
 +            logger -t "[Entware AWG-Go][Info]" "Package \"$package_name\" installed successful."
 +            log "ℹ️ Package \e[3m$package_name\e[0m  installed successful." && echo ""
 +        else
 +            logger -t "[Entware AWG-Go][Err]" "Package \"$package_name\" installation ERROR!"
 +            die "❌ Package \e[3m$package_name\e[0m installation ERROR!."
 +        fi
 +    fi
 +}
  
-*** 
-*** 
  
-## 8Если понадобится удалить AWG-Go   +check_binary_files ({ 
-1) Entware просто отформатировать носитель с entware  +    -x "/opt/bin/$PROCS" ] || die "⚠️ Application \e[3m /opt/bin/$PROCS \e[0m not found or not executable." 
-2) Чтобы удалить интерфейс *OpkgTun0* из WebUI - выполнить в cli роутера:   +    -x "$AWG_BIN" || die "⚠️ Application \e[3m $AWG_BIN \e[0m not found or not executable." 
-   ``` shell +    [ "$KEENOS_VER_MAJOR" -lt 5 && die "❌ Your KeenOS is \e[3m$KEENOS_VER\e[0mVersion 5.0.2 or higher is required." 
-     no interface OpkgTun0   +}
-   ``` +
-   ![OpkgTun del](!img/13__OpkgTun_del.png) +
-3) Сохраняем настройки системы в cli роутера:   +
-    ``` shell +
-    system configuration save +
-    ``` +
-    ![System configuration save](!img/14__SystemConfig_sevel.png)+
  
  
  
 +case "$1" in
 +    start)      cmd_start ;;
 +    stop)       cmd_stop ;;
 +    restart)    cmd_stop; sleep 1; cmd_start ;;
 +    status)     cmd_status ;;
 +    speedtest)  cmd_speedtest ;;
 +    *)          echo "Usage: $0 {start|stop|restart|status|speedtest}"; exit 1 ;;
 +esac
 +</code>
  
-*** 
-*** 
-*** 
-### [Создание резервной копии уже настроенной Entware >>](/../../blob/main/blob/03__Entware_backup/Entware_backup.md)   
-# [<< На главную](/../../../) 
awg20.1771342327.txt.gz · Последнее изменение: augin