AmneziaWG: настройка собственного VPN-сервера с защитой от DPI

Стандартный WireGuard блокируется системами DPI по характерному паттерну handshake: фиксированный размер инициализационного пакета, предсказуемая структура заголовка, отсутствие мусорного трафика. AmneziaWG — форк WireGuard, который модифицирует протокол на уровне пакетов, сохраняя совместимость с экосистемой и добавляя параметры рандомизации, делающие трафик неразличимым для сигнатурного и эвристического анализа.

Как AmneziaWG обходит детект​


DPI-системы распознают WireGuard по нескольким признакам:

  • Фиксированный размер handshake-пакетов. Init и response имеют предсказуемую длину.
  • Отсутствие мусорного трафика. Чистый WireGuard не генерирует пакетов вне сессии.
  • Характерные magic-числа в заголовке. Первые байты пакета идентифицируют тип сообщения.

AmneziaWG противодействует каждому из этих признаков через конфигурационные параметры, которые добавляются в секцию [Interface] и [Peer]:

ПараметрНазначение
JcКоличество мусорных пакетов, отправляемых перед handshake
JminМинимальный размер мусорного пакета (байты)
JmaxМаксимальный размер мусорного пакета (байты)
S1Размер мусорных данных, добавляемых к init-пакету
S2Размер мусорных данных, добавляемых к response-пакету
H1H4Заменённые magic-числа заголовков (вместо стандартных значений WireGuard)

Все параметры должны совпадать на сервере и клиенте — иначе handshake не завершится.

Требования к серверу​


  • Linux с ядром 5.6+ (модуль WireGuard встроен в ядро начиная с 5.6, но AmneziaWG использует собственный модуль amneziawg, который собирается отдельно).
  • Доступ к заголовкам ядра для сборки модуля (linux-headers соответствующей версии).
  • Права root.
  • UDP-порт, доступный извне (по умолчанию 51820, но рекомендуется сменить на нестандартный).

Установка модуля ядра и утилит​


AmneziaWG состоит из двух компонентов: модуль ядра (amneziawg.ko) и пользовательские утилиты (awg, awg-quick).

Сборка из исходников​


Bash:
git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git
cd amneziawg-linux-kernel-module/src
make -j$(nproc)
sudo make install

После установки загрузите модуль:

Bash:
sudo modprobe amneziawg

Проверьте, что модуль активен:

Bash:
lsmod | grep amneziawg

Утилиты​


Bash:
git clone https://github.com/amnezia-vpn/amneziawg-tools.git
cd amneziawg-tools/src
make -j$(nproc)
sudo make install

Утилита awg аналогична wg из стандартного WireGuard, а awg-quick — аналог wg-quick для управления интерфейсами через конфигурационные файлы.

Автозагрузка модуля​


Чтобы модуль загружался при старте системы:

Bash:
echo "amneziawg" | sudo tee /etc/modules-load.d/amneziawg.conf

Генерация ключей​


Ключевая пара генерируется так же, как в WireGuard:

Bash:
## Приватный ключ сервера
awg genkey | tee server_private.key | awg pubkey > server_public.key

## Приватный ключ клиента
awg genkey | tee client_private.key | awg pubkey > client_public.key

Конфигурация сервера​


Создайте файл /etc/amneziawg/awg0.conf:

INI:
[Interface]
PrivateKey = <server_private_key>
Address = 10.8.0.1/24
ListenPort = 48621

## Анти-DPI параметры
Jc = 5
Jmin = 50
Jmax = 500
S1 = 46
S2 = 58
H1 = 123456789
H2 = 987654321
H3 = 112233445
H4 = 554433221

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.8.0.2/32

Разбор параметров:

  • ListenPort — UDP-порт сервера. Нестандартный порт снижает вероятность того, что DPI-система целенаправленно анализирует именно этот порт.
  • Jc = 5 — перед handshake сервер отправит 5 мусорных пакетов случайного размера.
  • Jmin/Jmax — диапазон размеров мусорных пакетов в байтах.
  • S1/S2 — байты мусора, добавляемые непосредственно к init и response пакетам, меняя их длину.
  • H1H4 — произвольные 32-битные числа, заменяющие стандартные magic-значения заголовков WireGuard. Именно они ломают сигнатурное распознавание.

Важно: значения H1H4 должны быть одинаковыми на сервере и всех клиентах. Если вы хотите усложнить анализ, можно использовать разные значения для разных пиров, но это требует отдельного интерфейса или дополнительной маршрутизации.

Настройка маршрутизации и NAT​


Чтобы клиенты получали доступ в интернет через сервер, включите форвардинг и настройте NAT:

Bash:
## Включение IP-форвардинга
sudo sysctl -w net.ipv4.ip_forward=1

## Постоянное включение
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-forward.conf

## NAT для подсети туннеля
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Замените eth0 на имя внешнего интерфейса сервера (проверить: ip route show default).

Для сохранения правил iptables между перезагрузками:

Bash:
sudo apt install iptables-persistent
sudo netfilter-persistent save

Запуск интерфейса​


Bash:
sudo awg-quick up awg0

Проверка состояния:

Bash:
sudo awg show awg0

Вывод должен содержать публичный ключ интерфейса, listen port и список пиров.

Конфигурация клиента​


На клиенте создайте файл client.conf:

INI:
[Interface]
PrivateKey = <client_private_key>
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
Endpoint = <server_ip>:48621
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

## Анти-DPI параметры (должны совпадать с сервером)
Jc = 5
Jmin = 50
Jmax = 500
S1 = 46
S2 = 58
H1 = 123456789
H2 = 987654321
H3 = 112233445
H4 = 554433221

PersistentKeepalive = 25 отправляет keepalive-пакет каждые 25 секунд, что предотвращает закрытие UDP-маппинга на NAT клиента.

Мобильные клиенты​


Для Android и iOS используйте приложение AmneziaVPN — оно поддерживает импорт конфигурации AmneziaWG. Конфигурационный файл можно передать через QR-код или копирование.

Для десктопных платформ (Windows, macOS, Linux) доступен отдельный клиент AmneziaWG, который работает с тем же форматом конфигурации.

Добавление нескольких клиентов​


Каждый клиент получает уникальную пару ключей и отдельный IP в подсети туннеля. На сервере добавляется новая секция [Peer]:

INI:
[Peer]
PublicKey = <second_client_public_key>
AllowedIPs = 10.8.0.3/32

После изменения конфигурации перезапустите интерфейс:

Bash:
sudo awg-quick down awg0
sudo awg-quick up awg0

Или примените изменения без полного перезапуска:

Bash:
sudo awg set awg0 peer <second_client_public_key> allowed-ips 10.8.0.3/32

Диагностика и проверка​


Туннель поднимается, но нет трафика​


  1. Проверьте форвардинг: sysctl net.ipv4.ip_forward должен возвращать 1.
  2. Проверьте NAT: sudo iptables -t nat -L POSTROUTING -v -n — правило MASQUERADE должно быть в списке.
  3. Убедитесь, что AllowedIPs на сервере содержит IP клиента, а на клиенте — 0.0.0.0/0.

Handshake не завершается​


  1. Несовпадение анти-DPI параметров. Все значения Jc, Jmin, Jmax, S1, S2, H1H4 должны быть идентичны на обеих сторонах.
  2. Неверный публичный ключ. Проверьте, что ключи не перепутаны местами.
  3. Порт заблокирован. Убедитесь, что UDP-порт открыт в файрволе облачного провайдера и на самом сервере:

    Bash:
    sudo ufw allow 48621/udp
  4. Модуль не загружен. Выполните lsmod | grep amneziawg.

Проверка через tcpdump​


На сервере можно наблюдать входящие пакеты:

Bash:
sudo tcpdump -i eth0 udp port 48621 -nn

Если пакеты приходят, но handshake не завершается — проблема в конфигурации. Если пакетов нет — проблема в сети или файрволе.

Ограничения и нюансы​


  • AmneziaWG несовместим со стандартным WireGuard. Клиент с обычным WireGuard не подключится к серверу AmneziaWG и наоборот. Это следствие модифицированного протокола.
  • Параметры H1–H4 — не криптография. Они не усиливают шифрование, а лишь меняют сигнатуру заголовков. Криптографическая стойкость остаётся на уровне WireGuard (Curve25519, ChaCha20, Poly1305, BLAKE2s).
  • Обновления ядра. После обновления ядра модуль amneziawg может потребовать пересборки. Если используете DKMS, пересборка происходит автоматически; при ручной сборке — повторите make && sudo make install.
  • Производительность. Мусорные пакеты (Jc, S1, S2) добавляют незначительный оверхед. На практике влияние на пропускную способность минимально при разумных значениях параметров.

Чек-лист развёртывания​


  • [ ] Модуль amneziawg загружен (lsmod | grep amneziawg)
  • [ ] Утилиты awg и awg-quick доступны в PATH
  • [ ] Конфигурация сервера содержит анти-DPI параметры
  • [ ] IP-форвардинг включён
  • [ ] NAT настроен для подсети туннеля
  • [ ] UDP-порт открыт в файрволе (и в панели облачного провайдера)
  • [ ] Клиентская конфигурация содержит те же значения Jc, Jmin, Jmax, S1, S2, H1H4
  • [ ] awg show awg0 отображает latest handshake после подключения клиента
  • [ ] Трафик через туннель проходит (ping 10.8.0.1 с клиента, доступ к внешним ресурсам)

Источники​


 

AmneziaWG: настройка VPN-сервера с защитой от DPI (AmneziaVPN 3.x)​


Стандартный WireGuard блокируется системами DPI по характерному паттерну handshake: фиксированный размер инициализационного пакета, предсказуемая структура заголовка, отсутствие мусорного трафика. AmneziaWG — форк WireGuard, который модифицирует протокол на уровне пакетов, сохраняя криптографическую модель и добавляя параметры рандомизации, делающие трафик неразличимым для сигнатурного и эвристического анализа.

────────────────────

Как AmneziaWG обходит детект​


DPI-системы распознают WireGuard по нескольким признакам:

  • Фиксированный размер handshake-пакетов. Init и response имеют предсказуемую длину.
  • Отсутствие мусорного трафика. Чистый WireGuard не генерирует пакетов вне сессии.
  • Характерные magic-числа в заголовке. Первые байты пакета идентифицируют тип сообщения.

AmneziaWG противодействует каждому из этих признаков через конфигурационные параметры, которые добавляются в секцию [Interface] и [Peer]:

  • Jc — количество мусорных пакетов, отправляемых перед handshake
  • Jmin — минимальный размер мусорного пакета (байты)
  • Jmax — максимальный размер мусорного пакета (байты)
  • S1 — размер мусорных данных, добавляемых к init-пакету
  • S2 — размер мусорных данных, добавляемых к response-пакету
  • H1H4 — заменённые magic-числа заголовков (вместо стандартных значений WireGuard)

Все параметры должны совпадать на сервере и клиенте — иначе handshake не завершится.

────────────────────

Архитектура AmneziaVPN 3.x​


AmneziaVPN 3.x состоит из двух компонентов:

  • Клиент (десктоп: Windows, macOS, Linux; мобильные: Android, iOS) — управляет подключениями, импортирует конфигурации, предоставляет диагностику.
  • Серверная часть — может быть развёрнута автоматически через клиент (по SSH), через Docker или вручную.

Поддерживаемые протоколы в AmneziaVPN 3.x: AmneziaWG, OpenVPN, Shadowsocks, XRay (VLESS), Cloak, IKEv2. В этой статье рассматривается только AmneziaWG.

────────────────────

Вариант 1: Автоматическая установка через клиент AmneziaVPN 3.x​


Самый простой способ. Клиент подключается к серверу по SSH и разворачивает всё автоматически.

Требования​


  • VPS с Ubuntu 20.04+ / Debian 11+ / CentOS 8+ (чистая установка рекомендуется)
  • SSH-доступ по паролю или ключу
  • Клиент AmneziaVPN 3.x, установленный на вашем устройстве

Пошагово​


  1. Откройте AmneziaVPN 3.x → "+""Set up your own server"
  2. Введите IP-адрес сервера, SSH-порт (по умолчанию 22), логин и пароль (или путь к ключу)
  3. Выберите протокол AmneziaWG
  4. Клиент подключится по SSH, установит модуль ядра, утилиты, сгенерирует ключи и настроит интерфейс
  5. По завершении конфигурация автоматически добавится в список подключений клиента

Что делает клиент на сервере​


  • Устанавливает зависимости и заголовки ядра
  • Собирает и загружает модуль amneziawg
  • Генерирует ключевые пары
  • Создаёт конфигурацию с рандомизированными параметрами Jc, Jmin, Jmax, S1, S2, H1H4
  • Настраивает NAT и форвардинг
  • Запускает интерфейс

Примечание: при автоматической установке параметры анти-DPI генерируются случайно, что является хорошей практикой. Не используйте значения по умолчанию из документации в production.

────────────────────

Вариант 2: Развёртывание через Docker​


Подходит, если не хочется собирать модуль ядра вручную или если хостинг-провайдер ограничивает доступ к заголовкам ядра.

Требования​


  • Docker 20.10+
  • Права root
  • UDP-порт, доступный извне

docker-compose.yml​


YAML:
version: "3.8"

services:
  amneziawg:
    image: amneziavpn/amneziawg:latest
    container_name: amneziawg
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    volumes:
      - /lib/modules:/lib/modules:ro
      - ./config:/etc/amneziawg
    ports:
      - "48621:48621/udp"
    restart: unless-stopped

Конфигурация​


Создайте файл ./config/awg0.conf:

INI:
[Interface]
PrivateKey = <server_private_key>
Address = 10.8.0.1/24
ListenPort = 48621

Jc = 5
Jmin = 50
Jmax = 500
S1 = 46
S2 = 58
H1 = 123456789
H2 = 987654321
H3 = 112233445
H4 = 554433221

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.8.0.2/32

Запуск​


Bash:
docker compose up -d

Проверка​


Bash:
docker exec amneziawg awg show awg0

Ограничение Docker-варианта: контейнер использует модуль ядра хоста. Если модуль amneziawg не загружен на хосте, контейнер не сможет создать интерфейс. В этом случае сначала загрузите модуль на хосте (см. вариант 3) или используйте образ с встроенным модулем (если доступен для вашей версии ядра).

────────────────────

Вариант 3: Ручная установка (полный контроль)​


Требования к серверу​


  • Linux с ядром 5.6+ (рекомендуется 5.15+)
  • Доступ к заголовкам ядра (linux-headers)
  • Права root
  • UDP-порт, доступный извне

Сборка модуля ядра​


Bash:
# Установка зависимостей (Ubuntu/Debian)
sudo apt update
sudo apt install -y build-essential linux-headers-$(uname -r) git dkms

# Клонирование и сборка
git clone https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.git
cd amneziawg-linux-kernel-module/src
make -j$(nproc)
sudo make install

# Загрузка модуля
sudo modprobe amneziawg

# Проверка
lsmod | grep amneziawg

Автозагрузка модуля​


Bash:
echo "amneziawg" | sudo tee /etc/modules-load.d/amneziawg.conf

Установка утилит​


Bash:
git clone https://github.com/amnezia-vpn/amneziawg-tools.git
cd amneziawg-tools/src
make -j$(nproc)
sudo make install

Утилита awg аналогична wg, а awg-quick — аналог wg-quick.

Генерация ключей​


Bash:
# Сервер
awg genkey | tee server_private.key | awg pubkey > server_public.key

# Клиент
awg genkey | tee client_private.key | awg pubkey > client_public.key

Конфигурация сервера​


Создайте /etc/amneziawg/awg0.conf:

INI:
[Interface]
PrivateKey = <server_private_key>
Address = 10.8.0.1/24
ListenPort = 48621

Jc = 5
Jmin = 50
Jmax = 500
S1 = 46
S2 = 58
H1 = 123456789
H2 = 987654321
H3 = 112233445
H4 = 554433221

[Peer]
PublicKey = <client_public_key>
AllowedIPs = 10.8.0.2/32

Настройка маршрутизации и NAT​


Bash:
# IP-форвардинг
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-forward.conf

# NAT
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# Сохранение правил
sudo apt install -y iptables-persistent
sudo netfilter-persistent save

Замените eth0 на имя внешнего интерфейса (ip route show default).

Запуск​


Bash:
sudo awg-quick up awg0
sudo awg show awg0

────────────────────

Рекомендации по параметрам анти-DPI​


Генерация случайных значений​


Не используйте значения из примеров. Сгенерируйте собственные:

Bash:
# H1-H4: случайные 32-битные числа
for i in 1 2 3 4; do
  echo "H$i = $((RANDOM * RANDOM + RANDOM))"
done

# Jc: 3-10 (больше = больше мусора, но и больше задержка при подключении)
echo "Jc = $((RANDOM % 8 + 3))"

# Jmin/Jmax: диапазон размеров мусорных пакетов
JMIN=$((RANDOM % 100 + 20))
JMAX=$((JMIN + RANDOM % 400 + 100))
echo "Jmin = $JMIN"
echo "Jmax = $JMAX"

# S1/S2: 20-100 байт
echo "S1 = $((RANDOM % 80 + 20))"
echo "S2 = $((RANDOM % 80 + 20))"

Выбор порта​


  • Избегайте стандартного порта WireGuard (51820) — некоторые DPI-системы анализируют его в первую очередь
  • Используйте порты из диапазона 10000–60000
  • Порты 443 и 80 не подходят для UDP-туннеля в большинстве случаев (DPI ожидает там TLS/HTTP)
  • Порты 53 (DNS) и 123 (NTP) могут быть заблокированы или ограничены

Размер мусорных пакетов​


  • Jmin не должен быть меньше 20 байт (иначе пакеты выглядят аномально)
  • Jmax не должен превышать MTU канала (обычно 1400–1500 байт)
  • Разница Jmax - Jmin должна быть не менее 100 байт для достаточной энтропии размеров

────────────────────

Импорт конфигурации в клиент AmneziaVPN 3.x​


Способ 1: Импорт файла​


  1. В клиенте AmneziaVPN 3.x нажмите "+""Import configuration file"
  2. Выберите файл .conf с конфигурацией клиента
  3. Клиент распознаёт формат AmneziaWG по наличию параметров Jc, Jmin, Jmax, S1, S2, H1H4

Способ 2: QR-код​


  1. Сгенерируйте QR-код из конфигурации:

Bash:
# Если установлена утилита qrencode
qrencode -t ansiutf8 < client.conf

  1. В клиенте: "+""Scan QR code"

Способ 3: Ручной ввод​


  1. "+""Manual configuration"
  2. Выберите протокол AmneziaWG
  3. Заполните поля:
    • Server address — IP сервера
    • Port — UDP-порт (48621 в примере)
    • Client private key — содержимое client_private.key
    • Server public key — содержимое server_public.key
    • Client IP10.8.0.2/24
    • DNS1.1.1.1 (или другой)
    • Jc, Jmin, Jmax, S1, S2, H1–H4 — те же значения, что на сервере

Формат конфигурационного файла для импорта​


INI:
[Interface]
PrivateKey = <client_private_key>
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
Endpoint = <server_ip>:48621
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Jc = 5
Jmin = 50
Jmax = 500
S1 = 46
S2 = 58
H1 = 123456789
H2 = 987654321
H3 = 112233445
H4 = 554433221

Важно: параметры Jc, Jmin, Jmax, S1, S2, H1H4 могут находиться как в секции [Interface], так и в секции [Peer]. Клиент AmneziaVPN 3.x корректно обрабатывает оба варианта, но рекомендуется размещать их в секции [Peer] для совместимости.

────────────────────

Диагностика в AmneziaVPN 3.x​


Встроенная диагностика​


В клиенте AmneziaVPN 3.x:

  1. Подключитесь к серверу
  2. Если подключение не устанавливается, нажмите "Diagnostics" (иконка шестерёнки → Диагностика)
  3. Клиент покажет:
    • Доступность сервера (ping)
    • Доступность UDP-порта
    • Результат handshake
    • Ошибки конфигурации

Ручная диагностика на сервере​


Bash:
# Модуль загружен?
lsmod | grep amneziawg

# Интерфейс активен?
ip link show awg0

# Пакеты приходят?
sudo tcpdump -i eth0 udp port 48621 -nn -c 20

# Статус пиров
sudo awg show awg0

# Логи ядра (ошибки модуля)
dmesg | grep -i amneziawg

Типичные проблемы​


  • Handshake не завершается
    • Несовпадение параметров H1H4 между сервером и клиентом
    • Несовпадение Jc, Jmin, Jmax, S1, S2
    • Неверный публичный ключ
    • UDP-порт заблокирован файрволом или облачным провайдером
  • Туннель поднимается, но нет трафика
    • net.ipv4.ip_forward не включён
    • Отсутствует правило NAT
    • AllowedIPs на клиенте не содержит 0.0.0.0/0
  • Подключение работает, но медленно
    • Проверьте MTU: ping -M do -s 1400 <server_ip> — если пакеты теряются, уменьшите MTU на интерфейсе awg0
    • Увеличьте Jmin/Jmax — слишком маленькие мусорные пакеты могут вызывать фрагментацию
  • Модуль не загружается после обновления ядра
    • Пересоберите модуль: cd amneziawg-linux-kernel-module/src && make clean && make && sudo make install
    • Или используйте DKMS для автоматической пересборки

────────────────────

Добавление нескольких клиентов​


Каждый клиент получает уникальную пару ключей и отдельный IP. На сервере добавляется секция [Peer]:

INI:
[Peer]
PublicKey = <second_client_public_key>
AllowedIPs = 10.8.0.3/32

[Peer]
PublicKey = <third_client_public_key>
AllowedIPs = 10.8.0.4/32

Применение без перезапуска:

Bash:
sudo awg set awg0 peer <second_client_public_key> allowed-ips 10.8.0.3/32

Или полный перезапуск:

Bash:
sudo awg-quick down awg0
sudo awg-quick up awg0

────────────────────

Ограничения и нюансы​


  • AmneziaWG несовместим со стандартным WireGuard. Клиент с обычным WireGuard не подключится к серверу AmneziaWG и наоборот.
  • Параметры H1–H4 — не криптография. Они не усиливают шифрование, а лишь меняют сигнатуру заголовков. Криптографическая стойкость остаётся на уровне WireGuard (Curve25519, ChaCha20, Poly1305, BLAKE2s).
  • Обновления ядра. После обновления ядра модуль amneziawg может потребовать пересборки. DKMS автоматизирует этот процесс.
  • Производительность. Мусорные пакеты добавляют незначительный оверхед. При разумных значениях параметров влияние на пропускную способность минимально.
  • AmneziaVPN 3.x и AmneziaWG — разные вещи. AmneziaVPN — клиентское приложение, AmneziaWG — протокол. Клиент AmneziaVPN поддерживает и другие протоколы, но серверная часть для AmneziaWG настраивается так, как описано выше.

────────────────────

Чек-лист развёртывания​


  • [ ] Модуль amneziawg загружен (lsmod | grep amneziawg)
  • [ ] Утилиты awg и awg-quick доступны в PATH
  • [ ] Конфигурация сервера содержит анти-DPI параметры со случайными значениями
  • [ ] IP-форвардинг включён (sysctl net.ipv4.ip_forward1)
  • [ ] NAT настроен для подсети туннеля
  • [ ] UDP-порт открыт в файрволе сервера и в панели облачного провайдера
  • [ ] Клиентская конфигурация содержит те же значения Jc, Jmin, Jmax, S1, S2, H1H4
  • [ ] awg show awg0 отображает latest handshake после подключения клиента
  • [ ] Трафик через туннель проходит (ping, доступ к внешним ресурсам)
  • [ ] Клиент AmneziaVPN 3.x успешно импортировал конфигурацию и подключается

────────────────────

Источники​


 
Назад
Верх Низ