awg20
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| awg20 [17.02.2026 15:32] – создано augin | awg20 [17.02.2026 16:20] (текущий) – [Скрипты запуска] augin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | $\textcolor{green}{\text{v2026-02-12}}$ | + | ====== entware ====== |
| - | # Использование AWG-Go c KeenOS 5.0 | + | <code bash> |
| - | *** | + | <code bash>cd ~;mkdir awg2-go;cd awg2-go</ |
| + | <code bash> | ||
| + | wget http:// | ||
| + | wget http:// | ||
| + | </ | ||
| + | <code bash> | ||
| + | </ | ||
| - | Есть 2 варианта использования: | ||
| - | 1) Точно так же, как и для прошивки [KeenOS 4.3](/ | ||
| - | 2) Через новый интерфейс *OpkgTun*, который стал доступен в прошивке KeenOS 5.0. | ||
| - | Ниже рассмотрим именно последний вариант. | ||
| - | ## 1) Изменяем и загружаем conf-файл на роутер | + | [[https:// |
| - | На этапе подготовки был сделан файл *awg0.conf* с вписанными в него параметрами *i1...i5*. | + | - Изменяем и загружаем conf-файл на роутер |
| - | Для корректной работы с интерфейсом ***OpkgTun*** данный файл надо немного подправить, | + | |
| - |  Добавляем интерфейс *OpkgTun* в роутер | + | ! ВНИМАНИЕ ! команды ниже выполнять СТРОГО из под обычного логина ssh! НЕ через exec sh, иначе получите ошибку ndmc: system failed [0xcffd0060] |
| - | ### ! ВНИМАНИЕ ! команды ниже выполнять | + | |
| - | Есть два пути, хотя смысл у них один - добавление интерфейса через cli роутера. | + | |
| - | В данной статье будем добавлять через ssh-консоль. Для этого нужно последовательно выполнить команды ниже. | + | |
| - | 1) Создание самого интерфейса *OpkgTun0*: | + | |
| - | ``` shell | + | |
| - | ndmc -c interface OpkgTun0 | + | |
| - | ``` | + | |
| - | 2) Задаём описание, | + | |
| - | ``` shell | + | |
| - | ndmc -c interface OpkgTun0 description AWG-Go | + | |
| - | ``` | + | |
| - | Вы можете придумать название самостоятельно. | + | |
| - | 3) Команда для отображения, статуса, подсчёта трафика интерфейса *OpkgTun0*: | + | Есть два пути, хотя смысл у них один - добавление интерфейса через cli роутера. |
| - | ``` shell | + | В данной |
| - | ndmc -c interface OpkgTun0 ip global auto | + | |
| - | ``` | + | |
| - | 4) Назначаем IP-адрес и маску подсети интерфейсу | + | ====== Создание самого интерфейса OpkgTun0: ====== |
| - | ``` shell | + | <code bash> |
| - | | + | Задаём описание, |
| - | ``` | + | <code bash> |
| - | | + | Вы можете придумать название самостоятельно. |
| + | Команда для отображения, | ||
| + | <code bash> | ||
| + | Назначаем IP-адрес и маску подсети интерфейсу OpkgTun0: | ||
| + | <code bash>ndmc -c interface OpkgTun0 ip address 10.8.1.6 255.255.255.255</code> | ||
| + | IP-адрес обязательно должен быть такой же, | ||
| + | Устанавливаем MTU для интерфейса OpkgTun0: | ||
| + | <code bash> | ||
| + | Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети. Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети.}}Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети. В моём случае подходит значение 1376. Если не уверены - Вы можете использовать значение 1280, как то, которое с вероятностью 99% Вам подойдёт. | ||
| - | 5) Устанавливаем MTU для | + | Настройка, которая корректирует максимальный размер сегмента TCP, чтобы он соответствовал PMTU, то есть минимальному MTU на всём пути следования пакета до получателя, автоматически |
| - | ``` shell | + | <code bash> |
| - | ndmc -c interface OpkgTun0 ip mtu 1376 | + | Поднимаем сам интерфейс OpkgTun0: |
| - | ``` | + | <code bash> |
| - | > $\textcolor{ORANGE}{\text{Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети.}}$ В моём случае подходит значение | + | Добавляем правило маршрутизации для работы интерфейса OpkgTun0 |
| + | <code bash> | ||
| + | Сохраняем настройки системы: | ||
| + | <code bash> | ||
| - | 6) Настройка, | ||
| - | ``` 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-терминале | + | ====== Скрипты |
| - |  Скрипты запуска | + | Так же если требуется отключить автозапуск |
| - | Для работы AWG-Go с интерфейсом ***OpkgTun0*** требуется добавить в роутер другой скрипт запуска *S52awg-opkgtun0*. | + | <code bash> |
| - | Скачать скрипт в папку запуска можно вводом команды: | + | |
| - | ``` shell | + | |
| - | cd / | + | |
| - | ``` | + | |
| - | + | ||
| - | Так же если требуется отключить автозапуск | + | |
| - | ``` shell | + | |
| mv / | mv / | ||
| - | ``` | ||
| + | </ | ||
| + | |||
| + | <code bash>/ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====== S52awg-opkgtun0 ====== | ||
| + | <code bash> | ||
| + | #!/bin/sh | ||
| + | |||
| + | |||
| + | ENABLED=yes | ||
| + | PROCS=" | ||
| + | PATH="/ | ||
| + | DESC=" | ||
| + | PROGRAM=" | ||
| + | AWG_BIN="/ | ||
| + | VER=" | ||
| + | KEENOS_VER_MAJOR=$(ndmc -c "show version" | ||
| + | KEENOS_VER=$(ndmc -c "show version" | ||
| + | |||
| + | # ================== НАСТРОЙКИ ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ================== | ||
| + | # Интерфейс OpkgTun | ||
| + | OPKGTUN_INTERFACE=" | ||
| + | |||
| + | # Размер MTU, применяемый к интерфейсу OpkgTun | ||
| + | OPKGTUN_MTU=" | ||
| + | |||
| + | # Файл конфигурации AWG | ||
| + | AWG_CONF="/ | ||
| + | |||
| + | |||
| + | # Сервер: | ||
| + | SPEEDTEST_SRV_ADDRESSES=" | ||
| + | it1.speedtest.aruba.it: | ||
| + | mskst.st.mtsws.net: | ||
| + | " | ||
| + | # Время в секундах на тестирование скорости в каждую сторону | ||
| + | SPEEDTEST_TIME=" | ||
| + | # ================================================================= | ||
| + | |||
| + | |||
| + | cmd_start() { | ||
| + | [ " | ||
| + | check_binary_files | ||
| + | [ -f " | ||
| + | |||
| + | if pgrep -f "/ | ||
| + | log " | ||
| + | log " | ||
| + | fi | ||
| + | |||
| + | log " | ||
| + | logger -t " | ||
| + | "/ | ||
| + | |||
| + | local retries=10 | ||
| + | while [ ! -d "/ | ||
| + | sleep 1 && retries=$((retries - 1)) | ||
| + | done | ||
| + | sleep 2 | ||
| + | if [ -d "/ | ||
| + | if ip link set dev " | ||
| + | if (" | ||
| + | if ip link set dev " | ||
| + | logger -t " | ||
| + | else | ||
| + | logger -t " | ||
| + | fi | ||
| + | logger -t " | ||
| + | log "✅ Successfully configured AWG-opkgtun: | ||
| + | sleep 2 && echo ""&& | ||
| + | else | ||
| + | sleep 2 && cmd_stop | ||
| + | logger -t " | ||
| + | die "❌ Failed to apply config \e[3m$AWG_CONF\e[0m to \e[3m$OPKGTUN_INTERFACE\e[0m." | ||
| + | fi | ||
| + | else | ||
| + | cmd_stop | ||
| + | logger -t " | ||
| + | die "❌ Failed to UP network interface \e[3m$OPKGTUN_INTERFACE\e[0m." | ||
| + | fi | ||
| + | else | ||
| + | logger -t " | ||
| + | die "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m did not appear after start." | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | |||
| + | cmd_stop() { | ||
| + | check_binary_files | ||
| + | |||
| + | local AWG_PID=$(pgrep -f "/ | ||
| + | if [ -n " | ||
| + | logger -t " | ||
| + | log " | ||
| + | kill " | ||
| + | |||
| + | local timeout=5 | ||
| + | while pgrep -f "/ | ||
| + | sleep 1 && timeout=$((timeout - 1)) | ||
| + | done | ||
| + | |||
| + | if pgrep -f "/ | ||
| + | logger -t " | ||
| + | log " | ||
| + | kill -9 " | ||
| + | fi | ||
| + | |||
| + | if [ -d "/ | ||
| + | ip link set dev " | ||
| + | fi | ||
| + | logger -t " | ||
| + | log "✅ AmneziaWG for \e[3m$OPKGTUN_INTERFACE\e[0m stopped successfully." | ||
| + | else | ||
| + | log " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | |||
| + | cmd_status() { | ||
| + | check_binary_files | ||
| + | check_package_installed " | ||
| + | |||
| + | echo -e " | ||
| + | if [ ! -d "/ | ||
| + | die "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m does NOT exist!" | ||
| + | else | ||
| + | |||
| + | # ip -c -br link show dev " | ||
| + | INTERFACE_INFO=$(ip addr show $OPKGTUN_INTERFACE 2>/ | ||
| + | if [ -z " | ||
| + | die "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m does NOT exist!" | ||
| + | fi | ||
| + | INTERFACE_IP=$(echo " | ||
| + | [ -z " | ||
| + | RAW_STATE=$(echo " | ||
| + | case " | ||
| + | UP) INTERFACE_STATE=" | ||
| + | DOWN) INTERFACE_STATE=" | ||
| + | *) | ||
| + | esac | ||
| + | INTERFACE_MTU=$(echo " | ||
| + | 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 "/ | ||
| + | logger -t " | ||
| + | log "✅ AWG-Go for \e[3m$OPKGTUN_INTERFACE\e[0m running" | ||
| + | local RAW_LASTHANDSHAKE=$(" | ||
| + | LASTHANDSHAKE=$(echo " | ||
| + | if [ -n " | ||
| + | logger -t " | ||
| + | log " | ||
| + | else | ||
| + | logger -t " | ||
| + | log " | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | log " | ||
| + | local VPS_IP=$(curl --interface " | ||
| + | if [ -n " | ||
| + | logger -t " | ||
| + | log "✅ External IP via \e[3m$OPKGTUN_INTERFACE\e[0m: | ||
| + | else | ||
| + | logger -t " | ||
| + | log "❌ \e[31mFailed to obtain external IP\e[0m via \e[3m$OPKGTUN_INTERFACE\e[0m" | ||
| + | fi | ||
| + | else | ||
| + | log " | ||
| + | fi | ||
| + | fi | ||
| + | echo " | ||
| + | echo -e " | ||
| + | } | ||
| + | |||
| + | |||
| + | select_speedtest_server() { | ||
| + | for srv in $SPEEDTEST_SRV_ADDRESSES; | ||
| + | SPEEDTEST_SRV_ADDR=${srv%%: | ||
| + | SPEEDTEST_SRV_PORT=${srv## | ||
| + | |||
| + | log " | ||
| + | |||
| + | if curl --interface " | ||
| + | --connect-timeout 5 \ | ||
| + | " | ||
| + | log "✅ Selected SpeedTest server \e[3m$SPEEDTEST_SRV_ADDR: | ||
| + | return 0 | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | return 1 | ||
| + | } | ||
| + | |||
| + | |||
| + | cmd_speedtest () { | ||
| + | check_binary_files | ||
| + | check_package_installed " | ||
| + | check_package_installed " | ||
| + | |||
| + | echo -e " | ||
| + | |||
| + | if [ ! -d "/ | ||
| + | echo -e "❌ Interface \e[3m$OPKGTUN_INTERFACE\e[0m does NOT exist!" | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | if ! pgrep -f "/ | ||
| + | log " | ||
| + | log " | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | logger -t " | ||
| + | " | ||
| + | log "✅ AWG-Go for \e[3m$OPKGTUN_INTERFACE\e[0m running, begin SpeedTest..." | ||
| + | |||
| + | OPKGTUN_IP=$(ip -4 -br addr show " | ||
| + | |||
| + | if [ -z " | ||
| + | logger -t " | ||
| + | " | ||
| + | log "❌ \e[31mCan' | ||
| + | echo " | ||
| + | fi | ||
| + | |||
| + | if ! select_speedtest_server; | ||
| + | die "❌ No available SpeedTest servers via \e[3m$OPKGTUN_INTERFACE\e[0m" | ||
| + | fi | ||
| - | ## 4) Запуск AWG-Go через интерфейс OpkgTun | + | echo "----------------------------------------------------------------------" |
| - | Доступные команды для скрипта *S52awg-opkgtun0*: | + | |
| - | Значение | + | |
| - | ---------- | + | |
| - | start | Запуск AWG-Go на интерфейсе OpkgTun | + | |
| - | stop | Остановка AWG-Go на интерфейсе OpkgTun | + | |
| - | restart | + | |
| - | status | + | |
| - | speedtest | + | |
| - | В ssh-терминале запускаем скрипт: | + | echo " |
| - | ``` shell | + | } |
| - | / | + | |
| - | ``` | + | |
| - | В ssh-терминале запуск выглядит примерно так: | + | |
| - |  { |
| - |  Пример настройки маршрутизации по доменным именам | + | die() { |
| - | Переходим в настройки маршрутизации по DNS и добавляем список доменных имён и/или IP: | + | log "ERROR: $*" >&2 |
| - |  { |
| - |  Политика доступа в интернет | + | MB=$(awk "BEGIN {printf \"%.2f\", $BYTES |
| - | Интерфейс OpkgTun отображается в политиках доступа, | + | MBIT=$(awk "BEGIN {printf \"%.2f\", $BITS / 1000000}" |
| - |  | + | |
| - | На некоторых роутерах было замечено, | + | log "$mode Speed: \e[3m$MBIT Mbit/s\e[0m" |
| - | Решение - проверить наличие маршрута: | + | log " |
| - |  | + | |
| - | Если такого маршрута нет - добавьте его вручную: | + | return 0 |
| - |  Если понадобится заменить conf-файл на другой | + | check_package_installed () { |
| - | По идее этого должно быть достаточно: | + | local package_name=$1 |
| - | 1) Останавливаем работу текущей конфигурации и AWG-Go: | + | |
| - | ``` shell | + | |
| - | / | + | |
| - | + | ||
| - | 2) Заменить старый файл конфигурации | + | |
| - | 3) Заменить IP в интерфейсе *OpkgTun0* на IP адрес из ***нового conf-файла*** командой. Например, | + | |
| - | ``` 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 | + | |
| - | / | + | |
| - | ``` | + | |
| + | if !(opkg list-installed | grep -q " | ||
| + | logger -t " | ||
| + | log " | ||
| + | (opkg update && opkg install $package_name) >/ | ||
| + | if [ $? -eq 0 ]; then | ||
| + | logger -t " | ||
| + | log " | ||
| + | else | ||
| + | logger -t " | ||
| + | die "❌ Package \e[3m$package_name\e[0m installation ERROR!." | ||
| + | fi | ||
| + | fi | ||
| + | } | ||
| - | *** | ||
| - | *** | ||
| - | ## 8) Если понадобится удалить AWG-Go | + | check_binary_files () { |
| - | 1) Entware | + | |
| - | 2) Чтобы удалить интерфейс *OpkgTun0* из WebUI - выполнить в cli роутера: | + | [ -x " |
| - | ``` shell | + | [ " |
| - | no interface OpkgTun0 | + | } |
| - | ``` | + | |
| - |  Сохраняем настройки системы в cli роутера: | + | |
| - | | + | |
| - | system configuration save | + | |
| - | ``` | + | |
| - |  | ||
| + | stop) | ||
| + | restart) | ||
| + | status) | ||
| + | speedtest) | ||
| + | *) echo " | ||
| + | esac | ||
| + | </ | ||
| - | *** | ||
| - | *** | ||
| - | *** | ||
| - | ### [Создание резервной копии уже настроенной Entware >> | ||
| - | # [<< На главную](/ | ||
awg20.1771342327.txt.gz · Последнее изменение: — augin
