Jump to content

Recommended Posts

Posted

 Предыстория (если кому интересно вообще):

Спойлер

 Совершенно случайно наткнулся на форк 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

Использование достаточно простое:

Сейчас 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.

Создавать блок 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: ..., // адреса серверов (автоматически)

Главное, что это работает и можно использовать с маршрутизацией самого sing-box по FakeIP.

 

Сами исходники и изменения сделанные в оригинальных проектах amnezia-box (и amnezia-wg-go) лежат в репозитории Github

Собранные для ARM, mipsel и amd64 исполняемые файлы лежат тут (https://github.com/hoaxisr/amnezia-box/releases/)

Дополнительно собрал два ipk и выложил на Github для установки на роутеры в две команды с возможностью последующего обновления для архитектур mipsel и aarch64 (ARM)

Краткая инструкция по установке:

Спойлер

1. Подключитесь к Entware (все последующие команды выполняются в ssh entware)

opkg print-architecture
# mipsel -> используйте репо для mipsel-3.4-kn
# aarch64 -> используйте репо для aarch64-3.10-kn
 

2. Для добавления репо выполните одну из двух команд

 

# For mipsel:
echo "src/gz keenetic_custom https://hoaxisr.github.io/entware-repo/mipsel-3.4-kn" > /opt/etc/opkg/custom.conf

# For aarch64:
echo "src/gz keenetic_custom https://hoaxisr.github.io/entware-repo/aarch64-3.10-kn" > /opt/etc/opkg/custom.conf
 

3. Установка (выберете какую из версий вы хотите использовать)

opkg update

opkg install sing-box-awg      # sing-box stable

#или вы хотите бета версию?

opkg install sing-box-awg-beta # sing-box beta
 

Available Packages

Название пакета Версия Описание
     
sing-box-awg 1.12.18-awg2.0 sing-box proxy platform with AmneziaWG 2.0 support (stable)
sing-box-awg-beta 1.13.0-beta.8-awg2.0 sing-box proxy platform with AmneziaWG 2.0 support (beta)

 

Запустить sing-box можно выполнив следующую команду в ssh Entware -

/opt/etc/init.d/S99sing-box start

Остановить:

/opt/etc/init.d/S99sing-box stop

Cтуктура нового объекта endpoint с типом awg для самостоятельной настройки:

Спойлер

 {
    "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",  // адрес сервера (IP/domain)
            "port": 51820, //порт сервера 
            "public_key": "base64-encoded-public-key",
            "preshared_key": "base64-encoded-psk",  // опционально (если есть на peer то обязательно)
            "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[] | Разрешённые подсети через этот пир

 

 

  • Thanks 1
Posted

 Обновлены сборки:

 Amnezia-box (Sing-box c AWG 2.0)
  Версия: v1.12.19-awg2.0
  Статус: stable
  URL: https://github.com/hoaxisr/amnezia-box/releases/tag/v1.12.19-awg2.0
  ────────────────────────────────────────
  Версия: v1.13.0-rc.1-awg2.0
  Статус: prerelease
  URL: https://github.com/hoaxisr/amnezia-box/releases/tag/v1.13.0-rc.1-awg2.0
  Entware packages
  
  Репозиторий: https://hoaxisr.github.io/entware-repo/

  Обновиться можно через:
  opkg update
  opkg upgrade sing-box-awg        # stable
  opkg upgrade sing-box-awg-beta   # beta/rc

  • Thanks 2
Posted

Обновлены сборки:

  Amnezia-box (Sing-box c AWG 2.0)
  Версия: v1.12.20-awg2.0
  Статус: stable
  ────────────────────────────────────────
  Версия: v1.13.0-rc.2-awg2.0
  Статус: prerelease
 

  URL: https://github.com/hoaxisr/amnezia-box/releases

 
  Entware packages
  
  Репозиторий: https://hoaxisr.github.io/entware-repo/

  Обновиться можно через:
  opkg update
  opkg upgrade sing-box-awg            # stable
  opkg upgrade sing-box-awg-beta   # beta/rc

  • Thanks 1
  • Upvote 2
Posted

  

Обновлены сборки:

  Amnezia-box (Sing-box c AWG 2.0)
  Версия: v1.12.21-awg2.0
  Статус: stable
  ────────────────────────────────────────
  Версия: v1.13.0-rc.3-awg2.0
  Статус: prerelease
 

  URL: https://github.com/hoaxisr/amnezia-box/releases

 
  Entware packages
  
  Репозиторий: https://hoaxisr.github.io/entware-repo/

  Обновиться можно через:
  opkg update
  opkg upgrade sing-box-awg            # stable
  opkg upgrade sing-box-awg-beta   # beta/rc

  • Upvote 1

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   0 members

    • No registered users viewing this page.
×
×
  • 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.