awg20
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| awg20 [17.02.2026 15:34] – augin | awg20 [17.02.2026 16:20] (текущий) – [Скрипты запуска] augin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== entware ====== | ||
| + | <code bash> | ||
| + | <code bash>cd ~;mkdir awg2-go;cd awg2-go</ | ||
| + | <code bash> | ||
| + | wget http:// | ||
| + | wget http:// | ||
| + | </ | ||
| + | <code bash> | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | [[https:// | ||
| - Изменяем и загружаем conf-файл на роутер | - Изменяем и загружаем conf-файл на роутер | ||
| На этапе подготовки был сделан файл awg0.conf с вписанными в него параметрами i1...i5. | На этапе подготовки был сделан файл awg0.conf с вписанными в него параметрами i1...i5. | ||
| - | Для корректной работы с интерфейсом OpkgTun данный файл надо немного подправить, | + | Для корректной работы с интерфейсом OpkgTun данный файл надо немного подправить, |
| + | |||
| + | Теперь файл awg0-opkgtun0.conf требуется загрузить в роутер по пути / | ||
| + | - Добавляем интерфейс OpkgTun в роутер | ||
| + | |||
| + | ! ВНИМАНИЕ ! команды ниже выполнять СТРОГО из под обычного логина ssh! НЕ через exec sh, иначе получите ошибку ndmc: system failed [0xcffd0060] | ||
| + | |||
| + | Есть два пути, хотя смысл у них один - добавление интерфейса через cli роутера. | ||
| + | В данной статье будем добавлять через ssh-консоль. Для этого нужно последовательно выполнить команды ниже. | ||
| + | |||
| + | ====== Создание самого интерфейса OpkgTun0: ====== | ||
| + | <code bash> | ||
| + | Задаём описание, | ||
| + | <code bash> | ||
| + | Вы можете придумать название самостоятельно. | ||
| + | Команда для отображения, | ||
| + | <code bash> | ||
| + | Назначаем IP-адрес и маску подсети интерфейсу OpkgTun0: | ||
| + | <code bash> | ||
| + | IP-адрес обязательно должен быть такой же, | ||
| + | Устанавливаем MTU для интерфейса OpkgTun0: | ||
| + | <code bash> | ||
| + | Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети. Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети.}}Что такое MTU и как его правильно вычислить в Вашем конкретном случае - ищите в сети. В моём случае подходит значение 1376. Если не уверены - Вы можете использовать значение 1280, как то, которое с вероятностью 99% Вам подойдёт. | ||
| + | |||
| + | Настройка, | ||
| + | <code bash> | ||
| + | Поднимаем сам интерфейс OpkgTun0: | ||
| + | <code bash> | ||
| + | Добавляем правило маршрутизации для работы интерфейса OpkgTun0 в политиках доступа: | ||
| + | <code bash> | ||
| + | Сохраняем настройки системы: | ||
| + | <code bash> | ||
| + | |||
| + | |||
| + | |||
| + | ====== Скрипты запуска ====== | ||
| + | |||
| + | Для работы AWG-Go с интерфейсом OpkgTun0 требуется добавить в роутер другой скрипт запуска S52awg-opkgtun0. | ||
| + | Скачать скрипт в папку запуска можно вводом команды: | ||
| + | |||
| + | <code bash>cd / | ||
| + | |||
| + | Так же если требуется отключить автозапуск | ||
| + | <code bash> | ||
| + | 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 | ||
| + | |||
| + | echo " | ||
| + | run_speedtest " | ||
| + | log " | ||
| + | run_speedtest " | ||
| + | |||
| + | echo " | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | log() { | ||
| + | echo -e " | ||
| + | } | ||
| + | |||
| + | |||
| + | die() { | ||
| + | log " | ||
| + | echo -e " | ||
| + | echo "" | ||
| + | } | ||
| + | |||
| + | |||
| + | run_speedtest() { | ||
| + | local mode=$1 | ||
| + | local extra_args=$2 | ||
| + | local interface_ip=$3 | ||
| + | |||
| + | for srv in $SPEEDTEST_SRV_ADDRESSES; | ||
| + | SPEEDTEST_SRV_ADDR=${srv%%: | ||
| + | SPEEDTEST_SRV_PORT=${srv## | ||
| + | |||
| + | log " | ||
| + | |||
| + | OUTPUT=$(iperf3 -c " | ||
| + | -p " | ||
| + | -B " | ||
| + | | ||
| + | -t $SPEEDTEST_TIME \ | ||
| + | | ||
| + | | ||
| + | |||
| + | if echo " | ||
| + | log " | ||
| + | echo " | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | BYTES=$(echo " | ||
| + | BITS=$(echo " | ||
| + | |||
| + | MB=$(awk "BEGIN {printf \" | ||
| + | MBIT=$(awk "BEGIN {printf \" | ||
| + | |||
| + | log "$mode Speed: \e[3m$MBIT Mbit/ | ||
| + | log " | ||
| + | |||
| + | return 0 | ||
| + | done | ||
| + | |||
| + | log " | ||
| + | } | ||
| + | |||
| + | |||
| + | check_package_installed () { | ||
| + | local package_name=$1 | ||
| + | local package_name2find=$2 | ||
| + | |||
| + | 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 | ||
| + | } | ||
| + | |||
| + | |||
| + | check_binary_files () { | ||
| + | [ -x "/ | ||
| + | [ -x " | ||
| + | [ " | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | case " | ||
| + | start) | ||
| + | stop) | ||
| + | restart) | ||
| + | status) | ||
| + | speedtest) | ||
| + | *) echo " | ||
| + | esac | ||
| + | </ | ||
awg20.1771342483.txt.gz · Последнее изменение: — augin
