hoaxisr Posted December 19, 2025 Posted December 19, 2025 (edited) Совершенно случайно наткнулся на форк sing-box от команды Amnezia (https://github.com/amnezia-vpn/amnezia-box) Собрал для тестирования у себя и обнаружил, что в данном форке есть проблема с работой AmneziaWG при использовании FakeIP. Спойлер ### Root Cause The AWG endpoint struct embedded `*awg.Device`: ```go type Endpoint struct { *awg.Device // ← Embedded, provides DialContext/ListenPacket // ... } ``` This caused `Endpoint.DialContext()` to inherit from `awg.Device.DialContext()`, which: 1. Did not check if destination was a domain (FQDN) 2. Passed domains directly to netstack's dial function 3. Netstack attempted internal DNS resolution and failed Meanwhile, the standard WireGuard endpoint (`protocol/wireguard/endpoint.go`) properly handles this: ```go func (w *Endpoint) DialContext(ctx context.Context, network string, destination M.Socksaddr) (net.Conn, error) { if destination.IsFqdn() { destinationAddresses, err := w.dnsRouter.Lookup(ctx, destination.Fqdn, adapter.DNSQueryOptions{}) // ... resolve and dial } return w.endpoint.DialContext(ctx, network, destination) } ``` Если вам нужно использовать FakeIP и AmneziaWG 2.0 то с помощью железного разума получилось это поправить (https://github.com/hoaxisr/amnezia-box) Собранные для arm, mipsel и amd64 исполняемые файлы лежат тут (https://github.com/hoaxisr/amnezia-box/releases/) (по мере выхода обновлений в upstream sing-box я буду собирать новые версии с патчами) Использование достаточно простое: Сейчас sing-box поддерживает Wireguard как endpoint, форк от Amnezia лишь добавляет новый тип ("type": "awg") в данном endpoint следующей структуры: Спойлер { "endpoints": [ { "type": "awg", "tag": "awg-ep", // Основные параметры "useIntegratedTun": false, // если нужен системный тун то true "private_key": "base64-encoded-private-key", "address": ["10.0.0.2/32"], // IP адрес(а) интерфейса "mtu": 1280, // обычно у amnezia 1280 "listen_port": 51820, // listen port на устройстве // AmneziaWG обфускация "jc": 4, "jmin": 50, "jmax": 1000, "s1": 0, "s2": 0, "s3": 0, "s4": 0, "h1": "", "h2": "", "h3": "", "h4": "", "i1": "", "i2": "", "i3": "", "i4": "", "i5": "", // Пиры "peers": [ { "address": "server.example.com", // адрес сервера "port": 51820, //порт сервера "public_key": "base64-encoded-public-key", "preshared_key": "base64-encoded-psk", // опционально "allowed_ips": ["0.0.0.0/0", "::/0"], "persistent_keepalive_interval": 25 // опционально, в секундах } ], // Dialer опции (опционально) "detour": "", "bind_interface": "", "routing_mark": 0, "connect_timeout": "5s" } ] } Ключевые поля: | useIntegratedTun | bool | Использует встроенный TUN вместо внешнего | private_key | string | Приватный ключ WireGuard (base64) | address | string[] | IP адрес(а) для интерфейса с маской | mtu | uint32 | MTU | jc, jmin, jmax | int | Параметры junk-пакетов Amnezia | s1-s4, h1-h4, i1-i5 | int/string | Дополнительные параметры обфускации Peer: | address | string | Адрес сервера (IP или домен) | port | uint16 | Порт сервера | public_key | string | Публичный ключ пира (base64) | allowed_ips | string[] | Разрешённые подсети через этот пир Добавляете этот блок в свою конфигурацию sing-box, заменяете бинарник sing-box и вуаля. Создавать блок outbound не нужно, tag добавленного endpoint можно использовать напрямую в блоках route.rules или в outbound типа urltest, selector. Дополнительно можно использовать настройку "useIntegratedTun": true тогда будет создан tun интерфейс - теперь endpoint это как вход так и выход. (если вдруг вам это нужно на роутере) Спойлер При включении useIntegratedTun: true в transport/awg/tun_system.go:31-79 создается системный TUN с жёстко закодированными параметрами: singtun, err := tun.New(tun.Options{ Name: name, // автогенерация GSO: true, // всегда включен MTU: uint32(mtu), // из endpoint.mtu Inet4Address: ..., // из endpoint.address Inet6Address: ..., // из endpoint.address Inet4RouteAddress: ..., // из peers[].allowed_ips Inet6RouteAddress: ..., // из peers[].allowed_ips Inet4RouteExcludeAddress: ..., // адреса серверов (автоматически) Inet6RouteExcludeAddress: ..., // адреса серверов (автоматически) То есть, использование опции "useIntegratedTun": true отправляет весь трафик из ОС в туннель. Правила sing-box и его логика работать перестают. Поскольку ни разу не программист, то профессионалы поправят если что не так или не то Главное, что это работает и можно использовать с маршрутизацией самого sing-box по FakeIP. Еще дополнительно, эта сборка включает amneziawg-go с поддержкой AWG 2.0, что дает следующее: Спойлер Пример конфигурации Сервер: [Interface] S1 = 100 S2 = 100 S3 = 50 S4 = 50 H1 = 100-200 H2 = 300-400 H3 = 500-600 H4 = 700-800 Клиент: [Interface] S1 = 100 # должно совпадать S2 = 100 # должно совпадать S3 = 50 # должно совпадать S4 = 50 # должно совпадать H1 = 100-200 # должно совпадать H2 = 300-400 # должно совпадать H3 = 500-600 # должно совпадать H4 = 700-800 # должно совпадать # Эти могут отличаться: Jc = 8 Jmin = 40 Jmax = 800 I1 = <b 0xaabbccdd><t><r 20> Что должно совпадать | Параметр | Должен совпадать? | Почему | |----------------|--------------------|---------------------------------------------------------| | S1, S2, S3, S4 | ✅ Да | Получатель должен знать размер padding | | H1, H2, H3, H4 | ✅ Да | Получатель должен распознать тип пакета | | Jc, Jmin, Jmax | ❌ Нет | Junk пакеты просто игнорируются | | I1-I5 | ❌ Нет | Отправляются только клиентом, серверу не важны | Теги для I1-I5 | Тег | Описание | Пример | |-----------|---------------------------|----------------| | <b 0x...> | Статические байты (hex) | <b 0xf6ab3267> | | <r N> | Случайные байты | <r 10> | | <rd N> | Случайные цифры [0-9] | <rd 4> | | <rc N> | Случайные буквы [a-zA-Z]| <rc 8> | | <t> | Unix timestamp (4 байта) | <t> | | <c> | Счётчик пакетов (4 байта) | <c> | Важно - S3, S4, H1-H4 ranges - новые в AWG 2.0 - I1-I5 - только на клиенте (сервер их не проверяет) - S1, S2, H1-H4 - должны совпадать на клиенте и сервере - Jc, Jmin, Jmax - могут различаться Update (17/01/26): Amnezia выпустила обновление своего клиента AmneziaVPN для различных платформ и там теперь по умолчанию используются настройки с применением S4 (keepalive padding) -- но почему-то забыла исправить amneziawg-go чтобы применение этого параметра корректно воспринималось клиентом. (по крайней мере у меня AmneziaWG 2.0 настроенная через AmneziaVPN на сервере не поднималось стандартным amneziawg-go на клиенте были ошибки packet unknown type и i/o timeout), также по этой причине не работала эта сборка с новыми параметрами корректно. Поэтому железный разум предложил исправления для amneziawg-go + вышли новые версии в upstream sing-box. Поэтому проведена пересборка пакетов. (https://github.com/hoaxisr/amnezia-box/releases) версии 1.12.17 и 1.13.0-beta6. В ходе моего тестирования данные сборки успешно едят конфигурации с h1-h4 в виде диапазонов и S4 пакет обрабатывают корректно. Если у вас будут какие-либо проблемы - прошу сообщить. Update (21/01/26): Обновлена сборка до версии 1.13.0-beta7. Для тех кто не хотел бы связыватся с установкой и настройкой sing-box в следующем посте я выложил инструмент с WebUI для настройки AmneziaWG 2.0 в Entware. Буду рад отзывам. Edited 22 hours ago by hoaxisr 2 4 Quote
hoaxisr Posted December 29, 2025 Author Posted December 29, 2025 (edited) Я все же выделил отдельный функционал по запуску AmneziaWG туннелей на роутере для тех, кто не хочет выполнять команды через терминал. Инструкция по установке и использованию: (Отказ от ответственности: Все что вы делаете с этим приложением вы делаете на свой страх и риск, тестирование проводилось только на роутере архитектуры MIPSEL и версии ОС 4.3.6.3 (будет ли работать opkgtun в 5.0 мне неизвестно, но функционал имеется), работоспособность на других устройствах, версиях ОС, возможные поломки, пожары, мор, чума и другие бедствия полностью ответственность пользователя, у автора поста лапки и он ничего сам не программировал). Спойлер Установка AWG Manager на Keenetic Требования Роутер Keenetic с установленным Entware Доступ к командной строке роутера (SSH) для установки Конфигурационный файл .conf для соединения с вашим вторым узлом или данные для подключения Шаг 0. Подготовка Скачайте приложенный к посту файл awg-manager_1.0.0_АРХИТЕКТУРА.ipk приложенный к данному посту. Для Keenetic с архитектурой MIPS (модели Giga (KN-1010/1011), Ultra (KN-1810), Viva (KN-1910/1912/1913), Hero 4G (KN-2310/KN-2311), Giant (KN-2610), Skipper 4G (KN-2910), Hopper (KN-3810) необходимо использовать awg-manager_1.0.0_mipsel-3.4-kn.ipk Для Keenetic с архитектурой ARM (модели Peak (KN-2710), Ultra (KN-1811/1812), Giga (KN-1012), Hopper (KN-3811) и Hopper SE (KN-3812) -- awg-manager_1.0.0_aarch64-3.10-kn.ipk Войдите в WebUI роутера (обычно 192.168.1.1) - далее Управление --> Приложения --> выбирете носитель на котором у вас установлен Entware --> выберете Папку tmp --> Нажмите иконку "Загрузить файл в выбранную папку" --> Выберете скаченный файл. Шаг 1. Подключение по SSH Windows (с помощью PuTTY) Скачайте PuTTY Запустите PuTTY В поле Host Name введите IP роутера: 192.168.1.1 Порт: 222 (или 22 если у вас не установлен компонент ОС "Сервер SSH") Нажмите Open Введите логин: root Введите пароль (тот же, что для веб-интерфейса) (во время ввода пароля символ * появлятся не будет, просто введите пароль целиком и нажмите Enter) macOS / Linux Откройте терминал и выполните: ssh root@192.168.1.1 -p 222 Шаг 2. Установка AWG Manager 3.1. Установка пакета Выполните команду: Для Keenetic с архитектурой MIPS (модели Giga (KN-1010/1011), Ultra (KN-1810), Viva (KN-1910/1912/1913), Hero 4G (KN-2310/KN-2311), Giant (KN-2610), Skipper 4G (KN-2910), Hopper (KN-3810) необходимо использовать awg-manager_1.0.0_mipsel-3.4-kn.ipk opkg install /opt/tmp/awg-manager_mipsel-3.4-kn.ipk Для Keenetic с архитектурой ARM (модели Peak (KN-2710), Ultra (KN-1811/1812), Giga (KN-1012), Hopper (KN-3811) и Hopper SE (KN-3812) -- awg-manager_1.0.0_aarch64-3.10-kn.ipk opkg install /opt/tmp/awg-manager_aarch64-3.10-kn.ipk 3.2. Последствия выполнения команды ~ # opkg install /opt/tmp/awg-manager_1.0.0_mipsel-3.4-kn.ipk Installing awg-manager (1.0.0) to root... Configuring awg-manager. Starting awg-manager... Starting AWG Manager on port 8080... AWG Manager started (port 8080) ========================================== AWG Manager installed successfully! ========================================== Web UI: http://YOUR-ROUTER-IP:8080 Commands: /opt/etc/init.d/S80awg-manager {start|stop|restart|status} Шаг 4. Открытие веб-интерфейса Откройте браузер Перейдите по адресу: http://192.168.1.1:8080 Порт 8080 соответствует порту в п. 3.2 -- установщик выберет свободный. Вы увидите главную страницу AWG Manager Шаг 5. Импорт конфигурации туннеля 5.1. Импорт в AWG Manager На главной странице нажмите Создать Убедитесь, что выбрана вкладка Импорт .conf Введите название туннеля (например: "Dacha") Способ 1: Перетащите файл .conf в область загрузки Способ 2: Скопируйте содержимое файла и вставьте в текстовое поле Нажмите Импортировать 5.3. Проверка и сохранение После импорта откроется страница редактирования: Проверьте, что все поля заполнены корректно При необходимости измените настройки Нажмите Сохранить Шаг 6. Запуск туннеля 6.1. Запуск вручную На главной странице найдите ваш туннель Нажмите кнопку Запустить (зелёная кнопка с треугольником) Дождитесь появления статуса Работает 6.2. Включение автозапуска Чтобы туннель запускался автоматически при включении роутера: На карточке туннеля найдите переключатель около названия туннеля. Включите его (он станет зелёным) Появится уведомление "Автозапуск включён" Шаг 7. Тестирование соединения После запуска туннеля проверьте его работу: На карточке туннеля нажмите Тест Или перейдите в редактирование и нажмите Открыть тесты Доступные тесты: Проверка соединения — проверяет доступ в интернет через интернет на даче. Проверка IP — показывает ваш реальный IP и IP вашей дачи. Тест скорости — измеряет скорость загрузки через роутер на даче. Шаг 8. Настройка маршрутизации (опционально) По умолчанию в туннель ничего не маршрутизируется вы можете использовать для этого: Через веб-интерфейс Keenetic для Версии >5.0: Откройте http://192.168.1.1 Настройте правила маршрутизации на вкладке "Маршрутизация" Выбирайте название туннеля (оно показывается на карточке туннеля в AWG Manager) Через иные инструменты для версий ОС 4: 1. На данном форуме представлены как минимум три альтернативных решения для организации маршрутизации, выберете подходящий для вас и воспользуйтесь - HydraRoute New, Magictrickle, тот что понравился вам больше. Решение проблем Туннель не запускается Проверьте, что конфигурация корректна Проверьте конфигурацию вашего второго роутера на даче. Особенно обратите внимание на параметры i1-i5 Нет доступа к веб-интерфейсу Проверьте, запущен ли сервис: /opt/etc/init.d/S80awg-manager status Перезапустите сервис: /opt/etc/init.d/S80awg-manager restart Медленная скорость Попробуйте не обращать на это внимание. В реальных условиях все не так плохо Для AmneziaWG: попробуйте разные настройки Jc, Jmin, Jmax IP не меняется Проверьте поле AllowedIPs — должно быть 0.0.0.0/0, ::/0 Убедитесь, что туннель действительно запущен Печаль беда-огорчение. Ничего не работает следуем к следующему пункту. Удаление Для полного удаления AWG Manager: # Остановить сервис /opt/etc/init.d/S80awg-manager stop # Удалить пакет opkg remove awg-manager # Удалить конфигурации (опционально) rm -rf /opt/etc/awg-manager Полезные команды # Статус сервиса /opt/etc/init.d/S80awg-manager status # Перезапуск сервиса /opt/etc/init.d/S80awg-manager restart # Список туннелей ls /opt/etc/awg-manager/tunnels/ # Статус интерфейса awg show Поддержка Не осуществляется. Telegram: не планируется. AWG Manager — простой способ использовать AmneziaWG на роутерах Keenetic. Версия обновлена до 1.1.0 - выпилен lighttpd и его зависимость. Версия обновлена до 1.1.1 - исправлено поведение в ОС >5.0 Если вы хотите и умеете пользоватся поиском по форуму, понимаете как поднять интерфейс с помощью CLI инструментов, то можете воспользоваться собранными amneziawg-go 2.0 (решающие проблему конфигураций содержащих <c> в i1 и S4 из конфигураций AmneziaWG 2.0), awg-tools есть в соседней ветке посвященной этому инструменту. Включённые фиксы: - ✅ Counter tag <c> (obf_counter.go) - ✅ S4 keepalive padding fix Если вдруг они вам нужны amneziawg-go-linux-mipsle amneziawg-go-linux-arm64 amneziawg-go-linux-amd64 Edited 16 minutes ago by hoaxisr 3 1 Quote
megapro17 Posted January 8 Posted January 8 (edited) Как этот протокол себя показывает по сравнению с hysteria2, tuic? Когда стоял amnezia-wg он работал у меня куда стабильнее вариантов из sing-box Edited January 8 by megapro17 Quote
hoaxisr Posted January 8 Author Posted January 8 8 часов назад, megapro17 сказал: Как этот протокол себя показывает по сравнению с hysteria2, tuic? Когда стоял amnezia-wg он работал у меня куда стабильнее вариантов из sing-box Не очень понял о чем идет речь, но попробую ответить исходя из того что понял. hysteria2, tuic никогда не использвал и как-либо оценить их "стабильность" или другие характеристики не могу. Мне эта сборка нужна по одной причине - wg (и его реализация от amnezia) мне нравится больше, чем проксирование через vless, но при этом мне нравится возможность достаточно гибко настраивать правила маршрутизации по источникам/направлениям, поэтому я использую этот инструмент, где одновременно есть amneziawg и понятный мне способ настройки конфигурации. Есть альтернатива в виде mihomo, где awg тоже внедрен, но мне не нравится стабильность работы самого клиента mihomo. 1 Quote
R0cky Posted January 8 Posted January 8 Заменил бинарник (amd64), сделал изменения конфига по инструкции, но не работает, выдает в логах следующее: ERROR endpoint/awg[awg-kz]: IPC error -22: failed to set endpoint kz01awg.kcufwfgnkr.net:60136: parse addrport: ParseAddr("kz01awg.kcufwfgnkr.net"): unexpected character (at "kz01awg.kcufwfgnkr.net") Хотя как видите адрес в конфиге указан корректно. Quote
hoaxisr Posted January 8 Author Posted January 8 5 минут назад, R0cky сказал: Заменил бинарник (amd64), сделал изменения конфига по инструкции, но не работает, выдает в логах следующее: ERROR endpoint/awg[awg-kz]: IPC error -22: failed to set endpoint kz01awg.kcufwfgnkr.net:60136: parse addrport: ParseAddr("kz01awg.kcufwfgnkr.net"): unexpected character (at "kz01awg.kcufwfgnkr.net") Хотя как видите адрес в конфиге указан корректно. Да. Предполагается, что адрес пира указывается в виде IP Quote
hoaxisr Posted January 8 Author Posted January 8 (edited) 10 минут назад, R0cky сказал: А если он динамический?? Да, об этом я не подумал. Предполагал, что использование будет с VPS у которых не будет динамического IP. Попробуйте версию 1.12.15 или 1.13.0-бета1 -- ссылки в первом посте. Изменения работают. Edited January 8 by hoaxisr Quote
R0cky Posted January 8 Posted January 8 янв 08 17:59:53 Debian-Home sing-box[1787439]: panic: runtime error: invalid memory address or nil pointer dereference янв 08 17:59:53 Debian-Home sing-box[1787439]: [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x8bb8ac] янв 08 17:59:53 Debian-Home sing-box[1787439]: goroutine 1 [running]: янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log.(*observableLogger).Log(0xc00056d500, {0x1aa9810, 0xc0006c8570}, 0x85?, {0xc00004a4a0, 0x1, 0x1}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log/observable.go:123 +0x22c янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log.(*observableLogger).ErrorContext(0xc0006bdba8?, {0x1aa9810?, 0xc0006c8570?}, {0xc00004a4a0?, 0x1613> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log/observable.go:188 +0x30 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns.(*Router).Lookup.func1() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns/router.go:340 +0x437 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns.(*Router).Lookup(0xc000562000, {0x1aa9810, 0xc0006c8570}, {0xc000518300, 0x16}, {{0x1ab06b0, 0xc000> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns/router.go:414 +0x683 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg.NewEndpoint.func2({0xc000518300, 0x16}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg/endpoint.go:89 +0x11d янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg.genIpcConfig({0x0, {0xc0004fd800, 0x2c}, {0xc0004e2cc0, 0x1, 0x1}, 0x564, 0x0, 0x2b, 0x32,> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg/endpoint.go:211 +0xa29 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg.NewEndpoint({_, _}, {_, _}, {_, _}, {_, _}, {0x0, {0xc0004fd800, ...}, ...}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg/endpoint.go:104 +0x4d8 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint.Register[...].func2({0x1abb758?, 0xc000530000?}, {0x1abea88?, 0xc00056d6b0?}, {0xc0005> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint/registry.go:23 +0x13c янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint.(*Registry).Create(0x0?, {0x1aa9810, 0xc0006c8420}, {0x1abb758, 0xc000530000}, {0x1abe> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint/registry.go:64 +0x255 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint.(*Manager).Create(0xc000568d20, {0x1aa9810?, 0xc0006c8420?}, {0x1abb758?, 0xc000530000> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint/manager.go:115 +0xbe янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box.New({{{0xc000484000, 0x5c08, 0x7e00}, {0x0, 0x0}, 0xc0004f7680, 0xc0003bcb40, 0x0, 0x0, {0xc0004f76b0, > янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/box.go:242 +0x1f86 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.create() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/cmd_run.go:137 +0x1f8 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.run() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/cmd_run.go:174 +0x105 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.init.func26(0xc0001b5b00?, {0x17de414?, 0x4?, 0x17de418?}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/cmd_run.go:30 +0x17 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra.(*Command).execute(0x2711f20, {0xc000347480, 0x4, 0x4}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra@v1.9.1/command.go:1019 +0xae7 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra.(*Command).ExecuteC(0x270d220) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra@v1.9.1/command.go:1148 +0x465 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra.(*Command).Execute(...) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra@v1.9.1/command.go:1071 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.main() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/main.go:8 +0x1e янв 08 17:59:53 Debian-Home systemd[1]: sing-box.service: Main process exited, code=exited, status=2/INVALIDARGUMENT Теперь вываливается с ошибкой..... Quote
hoaxisr Posted January 8 Author Posted January 8 6 минут назад, R0cky сказал: янв 08 17:59:53 Debian-Home sing-box[1787439]: panic: runtime error: invalid memory address or nil pointer dereference янв 08 17:59:53 Debian-Home sing-box[1787439]: [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x8bb8ac] янв 08 17:59:53 Debian-Home sing-box[1787439]: goroutine 1 [running]: янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log.(*observableLogger).Log(0xc00056d500, {0x1aa9810, 0xc0006c8570}, 0x85?, {0xc00004a4a0, 0x1, 0x1}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log/observable.go:123 +0x22c янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log.(*observableLogger).ErrorContext(0xc0006bdba8?, {0x1aa9810?, 0xc0006c8570?}, {0xc00004a4a0?, 0x1613> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/log/observable.go:188 +0x30 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns.(*Router).Lookup.func1() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns/router.go:340 +0x437 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns.(*Router).Lookup(0xc000562000, {0x1aa9810, 0xc0006c8570}, {0xc000518300, 0x16}, {{0x1ab06b0, 0xc000> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/dns/router.go:414 +0x683 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg.NewEndpoint.func2({0xc000518300, 0x16}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg/endpoint.go:89 +0x11d янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg.genIpcConfig({0x0, {0xc0004fd800, 0x2c}, {0xc0004e2cc0, 0x1, 0x1}, 0x564, 0x0, 0x2b, 0x32,> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg/endpoint.go:211 +0xa29 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg.NewEndpoint({_, _}, {_, _}, {_, _}, {_, _}, {0x0, {0xc0004fd800, ...}, ...}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/protocol/awg/endpoint.go:104 +0x4d8 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint.Register[...].func2({0x1abb758?, 0xc000530000?}, {0x1abea88?, 0xc00056d6b0?}, {0xc0005> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint/registry.go:23 +0x13c янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint.(*Registry).Create(0x0?, {0x1aa9810, 0xc0006c8420}, {0x1abb758, 0xc000530000}, {0x1abe> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint/registry.go:64 +0x255 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint.(*Manager).Create(0xc000568d20, {0x1aa9810?, 0xc0006c8420?}, {0x1abb758?, 0xc000530000> янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/adapter/endpoint/manager.go:115 +0xbe янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box.New({{{0xc000484000, 0x5c08, 0x7e00}, {0x0, 0x0}, 0xc0004f7680, 0xc0003bcb40, 0x0, 0x0, {0xc0004f76b0, > янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/box.go:242 +0x1f86 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.create() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/cmd_run.go:137 +0x1f8 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.run() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/cmd_run.go:174 +0x105 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.init.func26(0xc0001b5b00?, {0x17de414?, 0x4?, 0x17de418?}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/cmd_run.go:30 +0x17 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra.(*Command).execute(0x2711f20, {0xc000347480, 0x4, 0x4}) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra@v1.9.1/command.go:1019 +0xae7 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra.(*Command).ExecuteC(0x270d220) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra@v1.9.1/command.go:1148 +0x465 янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra.(*Command).Execute(...) янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/spf13/cobra@v1.9.1/command.go:1071 янв 08 17:59:53 Debian-Home sing-box[1787439]: main.main() янв 08 17:59:53 Debian-Home sing-box[1787439]: github.com/sagernet/sing-box/cmd/sing-box/main.go:8 +0x1e янв 08 17:59:53 Debian-Home systemd[1]: sing-box.service: Main process exited, code=exited, status=2/INVALIDARGUMENT Теперь вываливается с ошибкой..... Простите, это моя ошибка, я выложил не то. Скачайте еще раз бинарник. Там теперь уже с испралением. Quote
hoaxisr Posted January 8 Author Posted January 8 Тест на запуск с доменом на arch linux у меня проходит. DEBUG[0000] endpoint/awg[awg-warp]: uapi: updating private key DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 6 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 9 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 8 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 1 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 8 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 6 - started DEBUG[0000] endpoint/awg[awg-warp]: uapi: updating junk count DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 8 - started DEBUG[0000] endpoint/awg[awg-warp]: uapi: updating junk min DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 1 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 7 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 3 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 4 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 7 - started DEBUG[0000] endpoint/awg[awg-warp]: uapi: updating junk max DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 12 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 4 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 4 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 10 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 7 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 2 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 9 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 9 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 11 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 11 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 2 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 3 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: event worker - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 5 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: tun reader - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 12 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 2 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 5 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 6 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 12 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 10 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: encryption worker 10 - started DEBUG[0000] endpoint/awg[awg-warp]: interface up requested DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 5 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 3 - started DEBUG[0000] endpoint/awg[awg-warp]: routine: decryption worker 11 - started DEBUG[0000] endpoint/awg[awg-warp]: peer(bmXO…fgyo) - uapi: created DEBUG[0000] endpoint/awg[awg-warp]: peer(bmXO…fgyo) - uapi: updating endpoint DEBUG[0000] endpoint/awg[awg-warp]: peer(bmXO…fgyo) - uapi: Adding allowedip DEBUG[0000] endpoint/awg[awg-warp]: peer(bmXO…fgyo) - starting DEBUG[0000] endpoint/awg[awg-warp]: routine: handshake worker 1 - started DEBUG[0000] endpoint/awg[awg-warp]: udp bind has been updated DEBUG[0000] endpoint/awg[awg-warp]: interface state was Down, requested Up, now Up DEBUG[0000] endpoint/awg[awg-warp]: routine: receive incoming receive - started DEBUG[0000] endpoint/awg[awg-warp]: peer(bmXO…fgyo) - routine: sequential receiver - started DEBUG[0000] endpoint/awg[awg-warp]: routine: receive incoming receive - started DEBUG[0000] endpoint/awg[awg-warp]: peer(bmXO…fgyo) - routine: sequential sender - started INFO[0000] sing-box started (0.00s) Quote
R0cky Posted January 8 Posted January 8 (edited) Спасибо теперь все работает. Только заметил, когда заполняешь параметры i1... i5, то в логе вот такие ошибки: Спойлер +0500 2026-01-08 18:17:13 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:23 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:33 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:43 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:54 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> Поэтому пока сделал конфиг без этих плюшек. Прошу по возможности подправить. PS В нативном клиенте AWG (не sing-box) данные параметры принимаются. Edited January 8 by R0cky Quote
hoaxisr Posted January 8 Author Posted January 8 (edited) 46 минут назад, R0cky сказал: Спасибо теперь все работает. Только заметил, когда заполняешь параметры i1... i5, то в логе вот такие ошибки: Скрыть контент +0500 2026-01-08 18:17:13 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:23 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:33 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:43 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> +0500 2026-01-08 18:17:54 ERROR endpoint/awg[awg-kz]: IPC error -22: failed to parse I2: unknown tag <c> unknown tag <r114> Поэтому пока сделал конфиг без этих плюшек. Прошу по возможности подправить. PS В нативном клиенте AWG (не sing-box) данные параметры принимаются. Да, тэг <c> не реализован в amneziawg-go. Он был только реализован в kernel module. Теперь эта поддержка перенесена и в этот форк тоже. тэг <r> просто был неправильно вами записан в конфигурации - должно быть с пробелом: <r 114> Теперь поддерживаются теги: | Тег | Описание | |---------|---------------------------------------| | <b HEX> | Статические байты | | <c> | Счётчик пакетов (4 байта, big-endian) | | <t> | Unix timestamp (4 байта) | | <r N> | Случайные байты | | <rc N> | Случайные буквы | | <rd N> | Случайные цифры | Пример конфигурации: { "type": "awg", "i1": "<b 0xCAFE><c><r 8>", "i2": "<t><c><r 16><d>" } Если по результатам тестирования будут какие-то проблемы - напишите. Edited January 8 by hoaxisr Quote
R0cky Posted January 15 Posted January 15 После обновления до v1.12.16-awg2.0 вернулась прежняя ошибка: FATAL[0000] start service: start outbound/awg[awg-kz]: set ipc config: IPC error -22: failed to parse I2: unknown tag <c> Quote
hoaxisr Posted January 15 Author Posted January 15 2 часа назад, R0cky сказал: После обновления до v1.12.16-awg2.0 вернулась прежняя ошибка: FATAL[0000] start service: start outbound/awg[awg-kz]: set ipc config: IPC error -22: failed to parse I2: unknown tag <c> пачт для с тэга по ошибке не был в workflow build на github. сейчас исправлено и релиз пересобраны. Quote
mdl Posted Tuesday at 03:58 AM Posted Tuesday at 03:58 AM Извините, что вклиниваюсь в междусобойчик. Можно как-то получить инструкцию по установке и настройке этого, а то не очень то и понятно. интересует установка на кинетик с пиром например на варп. Quote
hoaxisr Posted Tuesday at 05:45 AM Author Posted Tuesday at 05:45 AM 1 час назад, mdl сказал: Извините, что вклиниваюсь в междусобойчик. Можно как-то получить инструкцию по установке и настройке этого, а то не очень то и понятно. интересует установка на кинетик с пиром например на варп. Честно говоря, я не хотел бы описывать пошаговый to-do для использования этого инструмента для конретной обозначенной вами цели по нескольким причинам, основная из которых это юридические вопросы и ограничения, наложеные со стороны властей для пользователей из РФ, где контора солнышек запретила гражданам обсуждать и популяризировать механизмы и способы обхода их прекрасных ограничений и угроз их суверенному интернету. Я бы не хотел, чтобы тема была закрыта или удалена модераторами форума из-за нарушений этих правовых норм. Надеюсь на ваше понимание. 1 Quote
mdl Posted Tuesday at 11:19 AM Posted Tuesday at 11:19 AM 5 часов назад, hoaxisr сказал: Честно говоря, я не хотел бы описывать пошаговый to-do для использования этого инструмента для конретной обозначенной вами цели по нескольким причинам, основная из которых это юридические вопросы и ограничения, наложеные со стороны властей для пользователей из РФ, где контора солнышек запретила гражданам обсуждать и популяризировать механизмы и способы обхода их прекрасных ограничений и угроз их суверенному интернету. Я бы не хотел, чтобы тема была закрыта или удалена модераторами форума из-за нарушений этих правовых норм. Надеюсь на ваше понимание. Прям как то безысходно аж На гитхабе тоже страшно проблема написать обычную инструкцию или что? Quote
Sano Posted Tuesday at 11:23 AM Posted Tuesday at 11:23 AM (edited) @hoaxisr Спасибо за труды. Вещь однозначно нужная, пока нет прошивочного механизма Edited Tuesday at 11:42 AM by Sano 1 Quote
R0cky Posted Tuesday at 03:35 PM Posted Tuesday at 03:35 PM 4 часа назад, mdl сказал: Прям как то безысходно аж На гитхабе тоже страшно проблема написать обычную инструкцию или что? Маленькая подсказка: у sing-box есть своя домашняя страница и там (правда на английском) довольно подробно излагаются все настройки... «ищите и обрящете» 1 Quote
hoaxisr Posted Tuesday at 03:48 PM Author Posted Tuesday at 03:48 PM (edited) 14 минут назад, R0cky сказал: Маленькая подсказка: у sing-box есть своя домашняя страница и там (правда на английском) довольно подробно излагаются все настройки... «ищите и обрящете» Дополню, что на том же github вы можете найти просто миллион примеров конфигураций sing-box на все случаи жизни, а также примеры списков условных intel/microsoft/chatgpt которые не хотят с вами общаться, если вы из страны в которой они не отдают свои сервисы. Единственное отличие этой сборки в том, что есть дополнительные параметры в объекте "endpoint" если ему задать тип "awg". Вся остальная логика ровно такая же. Edited Tuesday at 03:49 PM by hoaxisr Quote
FLK Posted yesterday at 05:32 AM Posted yesterday at 05:32 AM А веб-интерфейс я мог какой-то видеть у этой штуки или я ошибаюсь?) Quote
hoaxisr Posted yesterday at 03:16 PM Author Posted yesterday at 03:16 PM (edited) 10 часов назад, FLK сказал: А веб-интерфейс я мог какой-то видеть у этой штуки или я ошибаюсь?) Если речь об этом, то предполагалось, что это будет другое приложение, которое создает, мониторит, "запускает" различные типы туннелей через различные инструменты (amneziawg-go, smtp-tunnel-proxy-go, sing-box-go) и обеспечивает маршрутизацию по доменам/cidr/asn, но пока тестирование на роутере, который у меня есть показало, что mipsel устарели и не способны адекватно работать с такими типами туннелей (кроме smtp) при сколько-нибудь серьезной нагрузке. А как оптимизировать нагрузку выше моего понимания, поскольку реализацией занимается железный разум Просмотр видео на потоковых сервисах приводит имеющийся у меня роутер в состояние 100% нагрузки на процессор и его "отзывчивость" для других задач становится очень низкой. Думаю, что ARM роутеры будут справлятся с этим сильно лучше, но поскольку проверить не могу в виду отсутствия такого оборудования и отсутствия желания приобретать новое -- проект пока заморожен. Хотя он полностью функционален и протестирован. Возможно, я смогу "вычленить" из него только модуль создания туннелей и их мониторинга без обеспечения маршрутизации силами роутера, но пока я не могу оценить целесообразность этого мероприятия. По сути поднять amneziawg-go дело очень быстрое, хоть и непривычное потому что требует работу в терминале. Пока я сосредоточился на другом сценарии - это применение amnezia-box на мини-пк или каком-то одноплатном компьютере в локальной сети, который берет на себя все функции такого рода маршрутизации, а роутер только обеспечивает доступ в Интернет и занимается только NATом. Но, к сожалению, логика там очень сложная, взаимосвязанная и пока удалось добится только базового функционала, а сценариев становится больше и логика становится все сложнее. И начинают возникать логические ошибки, потому что я не предусмотрел одно, второе, третье. Edited yesterday at 03:57 PM by hoaxisr 3 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.