Jump to content

Recommended Posts

Posted (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 by hoaxisr
  • Thanks 2
  • Upvote 4
  • 2 weeks later...
Posted (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)

  1. Скачайте PuTTY

  2. Запустите PuTTY

  3. В поле Host Name введите IP роутера: 192.168.1.1

  4. Порт: 222 (или 22 если у вас не установлен компонент ОС "Сервер SSH")

  5. Нажмите Open

  6. Введите логин: root

  7. Введите пароль (тот же, что для веб-интерфейса) (во время ввода пароля символ * появлятся не будет, просто введите пароль целиком и нажмите 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. Открытие веб-интерфейса

  1. Откройте браузер

  2. Перейдите по адресу: http://192.168.1.1:8080

    Порт 8080 соответствует порту в п. 3.2 -- установщик выберет свободный.

  3. Вы увидите главную страницу AWG Manager


Шаг 5. Импорт конфигурации туннеля

5.1. Импорт в AWG Manager

  1. На главной странице нажмите Создать

  2. Убедитесь, что выбрана вкладка Импорт .conf

  3. Введите название туннеля (например: "Dacha")

  4. Способ 1: Перетащите файл .conf в область загрузки

  5. Способ 2: Скопируйте содержимое файла и вставьте в текстовое поле

  6. Нажмите Импортировать

5.3. Проверка и сохранение

После импорта откроется страница редактирования:

  1. Проверьте, что все поля заполнены корректно

  2. При необходимости измените настройки

  3. Нажмите Сохранить


Шаг 6. Запуск туннеля

6.1. Запуск вручную

  1. На главной странице найдите ваш туннель

  2. Нажмите кнопку Запустить (зелёная кнопка с треугольником)

  3. Дождитесь появления статуса Работает

6.2. Включение автозапуска

Чтобы туннель запускался автоматически при включении роутера:

  1. На карточке туннеля найдите переключатель около названия туннеля.

  2. Включите его (он станет зелёным)

  3. Появится уведомление "Автозапуск включён"


Шаг 7. Тестирование соединения

После запуска туннеля проверьте его работу:

  1. На карточке туннеля нажмите Тест

  2. Или перейдите в редактирование и нажмите Открыть тесты

Доступные тесты:

  • Проверка соединения — проверяет доступ в интернет через интернет на даче.

  • Проверка IP — показывает ваш реальный IP и IP вашей дачи. 

  • Тест скорости — измеряет скорость загрузки через роутер на даче.


Шаг 8. Настройка маршрутизации (опционально)

По умолчанию в туннель ничего не маршрутизируется вы можете использовать для этого:

Через веб-интерфейс Keenetic для Версии >5.0:

  1. Откройте http://192.168.1.1

  2. Настройте правила маршрутизации на вкладке "Маршрутизация"

  3. Выбирайте название туннеля (оно показывается на карточке туннеля в AWG Manager)


Через иные инструменты для версий ОС 4:

      1. На данном форуме представлены как минимум три альтернативных решения для организации маршрутизации, выберете      подходящий для вас и воспользуйтесь - HydraRoute New, Magictrickle, тот что понравился вам больше.

Решение проблем

Туннель не запускается

  1. Проверьте, что конфигурация корректна

  2. Проверьте конфигурацию вашего второго роутера на даче. Особенно обратите внимание на параметры i1-i5

Нет доступа к веб-интерфейсу

  1. Проверьте, запущен ли сервис:

    /opt/etc/init.d/S80awg-manager status
  2. Перезапустите сервис:

    /opt/etc/init.d/S80awg-manager restart

Медленная скорость

  1. Попробуйте не обращать на это внимание. В реальных условиях все не так плохо :)

  2. Для AmneziaWG: попробуйте разные настройки Jc, Jmin, Jmax 

IP не меняется

  1. Проверьте поле AllowedIPs — должно быть 0.0.0.0/0, ::/0

  2. Убедитесь, что туннель действительно запущен

  3. Печаль беда-огорчение. Ничего не работает следуем к следующему пункту.


Удаление

Для полного удаления 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 by hoaxisr
  • Thanks 3
  • Upvote 1
  • hoaxisr changed the title to Amnezia-box (форк sing-box от Amnezia) с AmneziaWG 2.0
Posted (edited)

Как этот протокол себя показывает по сравнению с hysteria2, tuic? Когда стоял amnezia-wg он работал у меня куда стабильнее вариантов из sing-box

Edited by megapro17
Posted
8 часов назад, megapro17 сказал:

Как этот протокол себя показывает по сравнению с hysteria2, tuic? Когда стоял amnezia-wg он работал у меня куда стабильнее вариантов из sing-box

Не очень понял о чем идет речь, но попробую ответить исходя из того что понял.

hysteria2, tuic никогда не использвал и как-либо оценить их "стабильность" или другие характеристики не могу.

Мне эта сборка нужна по одной причине - wg (и его реализация от amnezia) мне нравится больше, чем проксирование через vless, но при этом мне нравится возможность достаточно гибко настраивать правила маршрутизации по источникам/направлениям, поэтому я использую этот инструмент, где одновременно есть amneziawg и понятный мне способ настройки конфигурации.

Есть альтернатива в виде mihomo, где awg тоже внедрен, но мне не нравится стабильность работы самого клиента mihomo.

  • Thanks 1
Posted

Заменил бинарник (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")

Хотя как видите адрес в конфиге указан корректно.

Posted
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

Posted (edited)
10 минут назад, R0cky сказал:

А если он динамический??

Да, об этом я не подумал. Предполагал, что использование будет с VPS у которых не будет динамического IP.

Попробуйте версию 1.12.15 или 1.13.0-бета1 -- ссылки в первом посте.

Изменения работают.

Edited by hoaxisr
Posted
янв 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

Теперь вываливается с ошибкой.....

Posted
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

Теперь вываливается с ошибкой.....

Простите, это моя ошибка, я выложил не то. Скачайте еще раз бинарник. Там теперь уже с испралением.

Posted

Тест на запуск с доменом на 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)

Posted (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 by R0cky
Posted (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 by hoaxisr
Posted

 После обновления до 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>

Posted
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. сейчас исправлено и релиз пересобраны.

  • hoaxisr changed the title to Amnezia-box с AmneziaWG 2.0
Posted

Извините, что вклиниваюсь в междусобойчик.

Можно как-то получить инструкцию по установке и настройке этого, а то не очень то и понятно.

интересует установка на кинетик с пиром например на варп.

Posted
1 час назад, mdl сказал:

Извините, что вклиниваюсь в междусобойчик.

Можно как-то получить инструкцию по установке и настройке этого, а то не очень то и понятно.

интересует установка на кинетик с пиром например на варп.

Честно говоря, я не хотел бы описывать пошаговый to-do для использования этого инструмента для конретной обозначенной вами цели по нескольким причинам, основная из которых это юридические вопросы и ограничения, наложеные со стороны властей для пользователей из РФ, где контора солнышек запретила гражданам обсуждать и популяризировать механизмы и способы обхода их прекрасных ограничений и угроз их суверенному интернету. Я бы не хотел, чтобы тема была закрыта или удалена модераторами форума из-за нарушений этих правовых норм.  

Надеюсь на ваше понимание.

 

  • Upvote 1
Posted
5 часов назад, hoaxisr сказал:

Честно говоря, я не хотел бы описывать пошаговый to-do для использования этого инструмента для конретной обозначенной вами цели по нескольким причинам, основная из которых это юридические вопросы и ограничения, наложеные со стороны властей для пользователей из РФ, где контора солнышек запретила гражданам обсуждать и популяризировать механизмы и способы обхода их прекрасных ограничений и угроз их суверенному интернету. Я бы не хотел, чтобы тема была закрыта или удалена модераторами форума из-за нарушений этих правовых норм.  

Надеюсь на ваше понимание.

 

Прям как то безысходно аж 

На гитхабе тоже страшно проблема написать обычную инструкцию или что?

Posted (edited)

@hoaxisr Спасибо за труды. Вещь однозначно нужная, пока нет прошивочного механизма

Edited by Sano
  • Upvote 1
Posted
4 часа назад, mdl сказал:

Прям как то безысходно аж 

На гитхабе тоже страшно проблема написать обычную инструкцию или что?

Маленькая подсказка: у sing-box есть своя домашняя страница и там (правда на английском) довольно подробно излагаются все настройки... «ищите и обрящете»

  • Upvote 1
Posted (edited)
14 минут назад, R0cky сказал:

Маленькая подсказка: у sing-box есть своя домашняя страница и там (правда на английском) довольно подробно излагаются все настройки... «ищите и обрящете»

Дополню, что на том же github вы можете найти просто миллион примеров конфигураций sing-box на все случаи жизни, а также примеры списков условных intel/microsoft/chatgpt которые не хотят с вами общаться, если вы из страны в которой они не отдают свои сервисы.

Единственное отличие этой сборки в том, что есть дополнительные параметры в объекте "endpoint" если ему задать тип "awg". Вся остальная логика ровно такая же.

Edited by hoaxisr
Posted (edited)
10 часов назад, FLK сказал:

А веб-интерфейс я мог какой-то видеть у этой штуки или я ошибаюсь?)

Если речь об этом, то предполагалось, что это будет другое приложение, которое создает, мониторит, "запускает" различные типы туннелей через различные инструменты (amneziawg-go, smtp-tunnel-proxy-go, sing-box-go) и обеспечивает маршрутизацию по доменам/cidr/asn, но пока тестирование на роутере, который у меня есть показало, что mipsel устарели и не способны адекватно работать с такими типами туннелей (кроме smtp) при сколько-нибудь серьезной нагрузке. А как оптимизировать нагрузку выше моего понимания, поскольку реализацией занимается железный разум :) 

Просмотр видео на потоковых сервисах приводит имеющийся у меня роутер в состояние 100% нагрузки на процессор и его "отзывчивость" для других задач становится очень низкой. 

Думаю, что ARM роутеры будут справлятся с этим сильно лучше, но поскольку проверить не могу в виду отсутствия такого оборудования и отсутствия желания приобретать новое -- проект пока заморожен. Хотя он полностью функционален и протестирован. 

Возможно, я смогу "вычленить" из него только модуль создания туннелей и их мониторинга без обеспечения маршрутизации силами роутера, но пока я не могу оценить целесообразность этого мероприятия. По сути поднять amneziawg-go дело очень быстрое, хоть и непривычное потому что требует работу в терминале. 

Пока я сосредоточился на другом сценарии - это применение amnezia-box на мини-пк или каком-то одноплатном компьютере в локальной сети, который берет на себя все функции такого рода маршрутизации, а роутер только обеспечивает доступ в Интернет и занимается только NATом. Но, к сожалению, логика там очень сложная, взаимосвязанная и пока удалось добится только базового функционала, а сценариев становится больше и логика становится все сложнее. И начинают возникать логические ошибки, потому что я не предусмотрел одно, второе, третье.  

ui-tunnel.png

Edited by hoaxisr
  • Upvote 3

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   1 member

×
×
  • Create New...

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.