From 1494fdb95fc8c686fcac061727b1be520d8a2bcb Mon Sep 17 00:00:00 2001 From: embeddevio Date: Thu, 15 Oct 2026 20:03:12 +0300 Subject: [PATCH] vault backup: 2026-10-15 20:03:12 --- .obsidian/graph.json | 14 +- .obsidian/workspace.json | 45 +-- Hermes/Hermes Agent - Настройка.md | 1 + Hermes/hermes_hindsight_lxc_guide.md | 139 +++++++++ HomeLab/LXC - HomePage.md | 3 + VPN/amneziavpn-docker-guide.md | 406 +++++++++++++++++++++++++++ 6 files changed, 571 insertions(+), 37 deletions(-) create mode 100644 Hermes/hermes_hindsight_lxc_guide.md create mode 100644 VPN/amneziavpn-docker-guide.md diff --git a/.obsidian/graph.json b/.obsidian/graph.json index e119c9f..2b6089e 100644 --- a/.obsidian/graph.json +++ b/.obsidian/graph.json @@ -1,6 +1,6 @@ { "collapse-filter": false, - "search": "", + "search": "api", "showTags": true, "showAttachments": true, "hideUnresolved": true, @@ -9,14 +9,14 @@ "colorGroups": [], "collapse-display": false, "showArrow": true, - "textFadeMultiplier": 0, - "nodeSizeMultiplier": 1.39824742268041, - "lineSizeMultiplier": 1, + "textFadeMultiplier": 0.2, + "nodeSizeMultiplier": 1.82062647754137, + "lineSizeMultiplier": 1.71471631205674, "collapse-forces": false, - "centerStrength": 0.518713248970312, - "repelStrength": 10, + "centerStrength": 0.280901722391084, + "repelStrength": 6.59067882472138, "linkStrength": 1, "linkDistance": 250, - "scale": 0.8476850695340034, + "scale": 1.2273915140938336, "close": false } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 21f3df6..bfe1094 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,39 +4,24 @@ "type": "split", "children": [ { - "id": "6a223f6f51a2d245", + "id": "07a826a4e91de77c", "type": "tabs", "children": [ { - "id": "9d3abe0b002165bf", + "id": "8ba21877fd5b84c6", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "HomeLab/LXC- Gitea.md", + "file": "HomeLab/LXC - HomePage.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "LXC- Gitea" - } - }, - { - "id": "b3558acf9e721e10", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "HomeLab/LXC - npm_keenetic_setup.md", - "mode": "source", - "source": false - }, - "icon": "lucide-file", - "title": "LXC - npm_keenetic_setup" + "title": "LXC - HomePage" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -70,7 +55,7 @@ "state": { "type": "search", "state": { - "query": "[\"tags\"]", + "query": "", "matchingCase": false, "explainSearch": false, "collapseAll": false, @@ -203,10 +188,17 @@ "obsidian-excalidraw-plugin:New drawing": false } }, - "active": "b3558acf9e721e10", + "active": "8ba21877fd5b84c6", "lastOpenFiles": [ - "HomeLab/LXC - Nginx Proxy Manager.md", + "Hermes/hermes_hindsight_lxc_guide.md", + "VPN/amneziavpn-docker-guide.md", + "VPN/amnezia-vpn-keenetic-kn1011.md", + "VPN/Amnezia for Keenetic.md", + "Hermes/hermes-desktop-connect-guide.md", + "Hermes/Hermes Agent - Настройка.md", + "HomeLab/LXC- Gitea.md", "HomeLab/LXC - npm_keenetic_setup.md", + "HomeLab/LXC - Nginx Proxy Manager.md", "HomeLab/npm_keenetic_setup.md", "HomeLab/PVE - Description.md", "HomeLab/PVE - General - Description.md", @@ -216,7 +208,6 @@ "HomeLab/Proxmox/Proxmox - settings.md", "HomeLab/Valtwarden.md", "HomeLab/Proxmox/Proxmox HA manual install.md", - "HomeLab/LXC- Gitea.md", "HomeLab/LXC - PBS Proxmox Backup Server.md", "HomeLab/LXC - HomePage.md", "HomeLab/ssh config.md", @@ -225,15 +216,9 @@ "HomeLab/Docker - qBittorent.md", "HomeLab/Docker - General.md", "HomeLab/wireshark.md", - "HomeLab/VE - HAOS - HomeAssistant.md", - "().md", - "HomeLab/PVE Proxmox - Installation.md", "OMV - Guides", - "README.md", "SBC - Hardware/Pasted image 20260901214038.png", "SBC - Hardware/Pasted image 20260517222623.png", - "SBC - Hardware/Radxa E25.md", - "Network/Settings.md", "SBC - Hardware", "Hermes/oled_cpu_mon.py", "Hermes", diff --git a/Hermes/Hermes Agent - Настройка.md b/Hermes/Hermes Agent - Настройка.md index 111435d..29bc7c6 100644 --- a/Hermes/Hermes Agent - Настройка.md +++ b/Hermes/Hermes Agent - Настройка.md @@ -1,3 +1,4 @@ +#polza #api Описание на Habr: AI провайдер: polza.ai diff --git a/Hermes/hermes_hindsight_lxc_guide.md b/Hermes/hermes_hindsight_lxc_guide.md new file mode 100644 index 0000000..8cc2ae6 --- /dev/null +++ b/Hermes/hermes_hindsight_lxc_guide.md @@ -0,0 +1,139 @@ +# Настройка памяти Hindsight для ИИ-агента Hermes в LXC + +Это руководство содержит инструкции по установке, конфигурированию и запуску долгосрочной памяти **Hindsight** (от Vectorize.io) для ИИ-агента **Hermes Agent** (от Nous Research) внутри изолированного контейнера LXC с использованием API-провайдера **Polza AI**. + +--- + +## 1. Ресурсная сетка для LXC (Polza AI Оптимизация) + +Так как инференс LLM и вычисление эмбеддингов полностью делегированы на сервера [Polza AI](https://polza.ai/), локальные требования к контейнеру минимальны: + +* **Процессор (CPU):** 2 ядра (vCPU) — достаточно для работы PostgreSQL и маршрутизации запросов. +* **Оперативная память (RAM):** 2 ГБ — около 1 ГБ займет ОС и Hermes, еще 1 ГБ зарезервирует PostgreSQL для кэширования векторных индексов. +* **Дисковая подсистема (Storage):** 10–15 ГБ (желательно на NVMe/SSD для быстрого I/O при поиске по индексам `pgvector`). +* **Сеть:** Обязателен исходящий доступ в интернет для выполнения API-запросов к эндпоинтам Polza AI. + +--- + +## 2. Пошаговая установка в контейнере + +Зайдите в консоль вашего LXC-контейнера и выполните следующие шаги: + +```bash +# 1. Обновление системы и установка зависимостей +apt update && apt upgrade -y +apt install -y python3 python3-pip postgresql postgresql-contrib git curl + +# 2. Установка расширения pgvector для PostgreSQL +# (Необходимо для хранения долгосрочной векторной памяти) +apt install -y postgresql-15-pgvector || apt install -y postgresql-16-pgvector + +# 3. Настройка базы данных +su - postgres -c "psql -c "CREATE USER hindsight_user WITH PASSWORD 'secure_password_here';"" +su - postgres -c "psql -c "CREATE DATABASE hindsight_memory OWNER hindsight_user;"" +su - postgres -c "psql -d hindsight_memory -c "CREATE EXTENSION IF NOT EXISTS vector;"" + +# 4. Установка Hermes Agent и плагина Hindsight +pip3 install hermes-agent-cli +hermes plugins install hindsight +``` + +--- + +## 3. Конфигурация (~/.hermes/hindsight/config.json) + +Создайте или отредактируйте конфигурационный файл плагина. Замените `sk-polza-ВАШ_КЛЮЧ_ИЗ_КОНСОЛИ` на ваш реальный токен из личного кабинета Polza AI. + +```json +{ + "memory_enabled": false, + "hindsight": { + "mode": "local_embedded", + "database": { + "host": "127.0.0.1", + "port": 5432, + "user": "hindsight_user", + "password": "secure_password_here", + "dbname": "hindsight_memory" + }, + "llm_provider": { + "type": "openai_compatible", + "base_url": "https://polza.ai/api/v1", + "api_key": "sk-polza-ВАШ_КЛЮЧ_ИЗ_КОНСОЛИ", + "model": "nousresearch/hermes-3-llama-3.1-70b" + }, + "embedding_provider": { + "type": "openai_compatible", + "base_url": "https://polza.ai/api/v1", + "api_key": "sk-polza-ВАШ_КЛЮЧ_ИЗ_КОНСОЛИ", + "model": "openai/text-embedding-3-small" + }, + "auto_recall": true, + "auto_retain": true + } +} +``` + +*Отключение стандартной памяти:* Команда `hermes tools disable memory` предотвратит дублирование контекста и сэкономит входящие токены. + +--- + +## 4. Настройка автозапуска через systemd + +Чтобы демон памяти автоматически поднимался при перезапуске LXC-контейнера, создайте системную службу. + +Создайте файл `/etc/systemd/system/hindsight-daemon.service`: + +```ini +[Unit] +Description=Hindsight Memory Daemon for Hermes Agent +After=postgresql.service + +[Service] +Type=simple +User=root +ExecStart=/usr/local/bin/hermes memory daemon start +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=multi-user-target +``` + +Активируйте и запустите службу: +```bash +systemctl daemon-reload +systemctl enable hindsight-daemon.service +systemctl start hindsight-daemon.service +``` + +--- + +## 5. Использование и команды ИИ-агента + +При включенных параметрах `auto_recall` и `auto_retain` Hermes работает полностью автономно. Но вы можете управлять памятью и вручную в окне чата: + +* **Ручное сохранение факта:** + > *"Запомни, что тестовый сервер развернут на порту 8080 с конфигурацией дебага."* + *(Hermes вызовет инструмент `hindsight_retain`)* + +* **Извлечение контекста:** + > *"На каком порту мы тестировали сервер?"* + *(Hermes выполнит поиск через `hindsight_recall`)* + +* **Синтез знаний (Рефлексия):** + Периодически запускайте процесс консолидации памяти, чтобы объединить разрозненные факты и очистить базу от устаревшего "шума": + ```bash + hermes memory reflect --force + ``` + +--- + +## 6. Логи и Диагностика в LXC + +Если агент теряет контекст, проверьте следующие точки отказа внутри контейнера: + +* **Статус демона памяти:** `systemctl status hindsight-daemon.service` +* **Просмотр логов Hindsight:** `tail -f ~/.hermes/logs/hindsight-embed.log` +* **Проверка подключения к PostgreSQL:** `psql -U hindsight_user -d hindsight_memory -h 127.0.0.1` +* **Проверка доступности шлюза Polza AI:** `curl -I https://polza.ai/api/v1/models` diff --git a/HomeLab/LXC - HomePage.md b/HomeLab/LXC - HomePage.md index 0dfd76c..948230c 100644 --- a/HomeLab/LXC - HomePage.md +++ b/HomeLab/LXC - HomePage.md @@ -14,6 +14,9 @@ https://github.com/homarr-labs/dashboard-icons Настройки находятся в `/opt/homepage/config/` +PVE: token-id `homepage@pve!monitor` + `0fe6ef73-380b-4f4e-a403-7ac07c4cd021` + #filesystem #linux Директория `/opt` в Linux, сокращение от *optional* - аналог `Programm Files` установка стороннего ПО. diff --git a/VPN/amneziavpn-docker-guide.md b/VPN/amneziavpn-docker-guide.md new file mode 100644 index 0000000..f999827 --- /dev/null +++ b/VPN/amneziavpn-docker-guide.md @@ -0,0 +1,406 @@ +# AmneziaVPN в Docker: полный гайд + +**Цель:** поднять в Docker контейнере клиент AmneziaVPN (AmneziaWG 3.1), подключить его по пользовательскому `.conf` от Amnezia Premium и сделать его VPN-шлюзом для домашней сети. + +**Автор:** Hermes Agent • Среда: LXC-контейнер (Docker 29.4.1, ядро Proxmox 6.17.13-2-pve) + +--- + +## 1. Что потребуется + +| Компонент | Значение | +|-----------|----------| +| Хост | Linux с Docker 20.10+ (тестировалось: LXC 29.4.1) | +| `/dev/net/tun` | Должен существовать и быть открыт | +| `ip_forward` | `1` | +| `.conf` файл | Amnezia Premium / AmneziaWG 3.1 конфиг | +| Версии | `amneziawg-go` v3.1.20260828, `amneziawg-tools` v3.1.20260812 | + +Пример `.conf` (Amnezia Premium, конфиг 3.1): +```ini +[Interface] +Address = 100.85.175.118/32 +DNS = 100.64.0.1, 8.8.4.4 +PrivateKey = fSdjHMi8tAzL2wbNxsylQW1FAIXdn2/ODPGWr569J/w= +Jc = 5 +Jmin = 10 +Jmax = 80 +H1 = 1 +H2 = 2 +H3 = 3 +H4 = 4 +HeaderProtectionKey = 8H1SggRhZ8iT8ZYZlS/RPf6SItoxb8OeXX2rNwMgc3M= +RekeyAfterTime = 100-120 +RekeyTimeout = 3-8 +RejectAfterTime = 150-180 +KeepaliveTimeout = 7-13 +MaxHandshakeAttempts = 15-20 +ContentPaddingAddition = 10-100 +[Peer] +PublicKey = FfgUO6z0plGUntTW3T8fsFsZ250GcQZEKlCgj1fkRFc= +PresharedKey = +Is1eWUUQ5UXYD8E7zigG32KaThcGC/YolOVS7LeDGU= +AllowedIPs = 0.0.0.0/0, ::/0 +Endpoint = 78.17.149.78:8344 +PersistentKeepalive = 25-35 +``` + +> ⚠️ **НЕ** выкладывай `.conf` ни в чат, ни на сторонние сайты. Его приватный ключ — твой доступ. Файл копируется только на сервер. + +--- + +## 2. Подготовка хоста + +```bash +# Проверить Tun-устройство и форвардинг +ls -la /dev/net/tun +cat /proc/sys/net/ipv4/ip_forward # должно быть 1 + +# Включить форвардинг (если 0) +echo 1 > /proc/sys/net/ipv4/ip_forward + +# Проверить Docker +docker --version +``` + +**На LXC (виртуальном контейнере Proxmox)** убедись, что: +- `/dev/net/tun` существует (создаётся через настройки LXC) +- `net.ipv4.ip_forward=1` установлен (в Proxmox: LXC → Options → Features) + +--- + +## 3. Скачивание репозиториев +> ⚠️ Сборку ведём из **локальных** копий репозиториев (COPY в Dockerfile), так как DNS внутри build-контейнера нестабилен. + +```bash +mkdir -p /root/awg-src +cd /root/awg-src + +# Правильный DNS на хосте LXC +echo "nameserver 8.8.8.8" > /etc/resolv.conf + +git clone --depth 1 --branch v3.1.20260828 https://github.com/amnezia-vpn/amneziawg-go.git +git clone --depth 1 --branch v3.1.20260812 https://github.com/amnezia-vpn/amneziawg-tools.git +``` + +**Проверка тегов** (актуальные на момент сборки): +```bash +git ls-remote --tags https://github.com/amnezia-vpn/amneziawg-go.git | tail +# v3.1.20260813, v3.1.20260814, v3.1.20260828 +git ls-remote --tags https://github.com/amnezia-vpn/amneziawg-tools.git | tail +# v3.0.20260805, v3.1.20260812 +``` + +> Найдите **последний** тег v3.1.* — они выходят часто и содержат исправления DPI-обхода. + +--- + +## 4. Директория сборки +```bash +mkdir -p /root/awg-builder +cp -r /root/awg-src/amneziawg-go /root/awg-builder/ +cp -r /root/awg-src/amneziawg-tools /root/awg-builder/ +``` + +--- + +## 5. Dockerfile +**`/root/awg-builder/Dockerfile`** +```dockerfile +# syntax=docker/dockerfile:1 + +FROM golang:alpine AS go-build + +RUN apk add --no-cache make gcc musl-dev linux-headers + +COPY amneziawg-go /src/amneziawg-go +RUN cd /src/amneziawg-go && make && cp amneziawg-go /go/bin/ + +COPY amneziawg-tools /src/amneziawg-tools +RUN cd /src/amneziawg-tools/src && make && cp wg /go/bin/awg + +FROM alpine:3.21 + +RUN apk add --no-cache iptables ip6tables iproute2 bash openresolv + +COPY --from=go-build /go/bin/amneziawg-go /usr/bin/ +COPY --from=go-build /go/bin/awg /usr/bin/ + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] +``` + +> **Почему `cp wg /go/bin/awg`**: в `amneziawg-tools` бинарь надёжнее назвать `awg`. Это клиентская утилита управления интерфейсом. + +**Healthcheck** (необязателен): добавить в Dockerfile ```HEALTHCHECK``` — можно пропустить, статус смотрим через `awg show`. + +--- + +## 6. entrypoint.sh +Скрипт: поднимает интерфейс, загружает конфиг (с фолбэком на минимальный), настраивает policy routing и NAT. + +**`/root/awg-builder/entrypoint.sh`** +```bash +#!/bin/bash + +CONFIG_DIR=/config + +for f in "${CONFIG_DIR}"/*.conf; do + [ -f "$f" ] || continue + IFACE=$(basename "$f" .conf) + echo "Starting AmneziaWG interface: ${IFACE}" + + modprobe amneziawg 2>/dev/null || true + if ! ip link show "${IFACE}" 2>/dev/null | grep -q UP; then + ip link add "${IFACE}" type amneziawg 2>/dev/null || { + echo "[*] Using userspace amneziawg-go" + amneziawg-go "${IFACE}" 2>/dev/null || true + sleep 1 + } + fi + + TMPF=$(mktemp) + grep -v -E '^(Address|DNS)' "$f" > "$TMPF" + + if ! awg setconf "${IFACE}" "$TMPF" 2>/dev/null; then + echo "[!] Trying minimal config" + { + echo "[Interface]" + grep -E '^PrivateKey' "$f" + echo "ListenPort = 51820" + echo "" + echo "[Peer]" + grep -E '^(PublicKey|PresharedKey|AllowedIPs|Endpoint|PersistentKeepalive)' "$f" + } | awg setconf "${IFACE}" /dev/stdin 2>/dev/null || { + echo "[!] FATAL: cannot parse config" + rm -f "$TMPF" + continue + } + fi + rm -f "$TMPF" + + IP=$(grep ^Address "$f" | head -1 | cut -d= -f2 | tr -d ' ' | cut -d, -f1) + [ -n "$IP" ] && ip addr add "$IP" dev "${IFACE}" 2>/dev/null || true + ip link set "${IFACE}" up + echo "[*] ${IFACE} UP: ${IP}" +done + +# --- Policy routing: только forwarded LAN-трафик через VPN --- +mkdir -p /etc/iproute2 +if ! grep -q "awg-vpn" /etc/iproute2/rt_tables 2>/dev/null; then + echo "100 awg-vpn" >> /etc/iproute2/rt_tables 2>/dev/null || true +fi + +ip route add 0.0.0.0/0 dev awg0 table 100 2>/dev/null || true + +# Пометить forwarded LAN-трафик (не на LAN) меткой 100 +iptables -t mangle -C PREROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MARK --set-mark 100 2>/dev/null || \ +iptables -t mangle -A PREROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MARK --set-mark 100 2>/dev/null || true + +# Пакеты с меткой 100 → таблица awg-vpn (через awg0) +ip rule add fwmark 100 lookup 100 priority 5000 2>/dev/null || true + +# NAT для LAN через туннель +iptables -t nat -C POSTROUTING -s 192.168.1.0/24 -o awg0 -j MASQUERADE 2>/dev/null || \ +iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o awg0 -j MASQUERADE 2>/dev/null || true + +echo 1 > /proc/sys/net/ipv4/ip_forward 2>/dev/null || true + +echo "[*] AmneziaWG client running" +awg show 2>/dev/null || true + +sleep infinity +``` + +> **Как работает policy routing**: +> - Локальный (исходящий) трафик **самого LXC** (SSH и т.д.) → идёт напрямую через `eth0` +> - Только **forwarded** трафик из LAN → помечается меткой → направляется в таблицу `awg-vpn` → уходит через `awg0` +> - Это сохраняет доступ к управлению LXC, не ломая VPN-шлюз + +--- + +## 7. Редактирование сети под свою подсеть + +В скрипте выше я использовал `192.168.1.0/24` — это **основной LAN сегмент**, который пойдёт через VPN. + +**Если нужна отдельная VPN-подсеть** (например `192.168.2.0/24`), замени в двух местах: +- `iptables -t mangle ... -s 192.168.1.0/24` → `-s 192.168.2.0/24` +- `iptables -t nat ... -s 192.168.1.0/24 ... -o awg0` → `-s 192.168.2.0/24` + +Подробнее про отдельную подсеть см. раздел «Расширенный сценарий» ниже. + +--- + +## 8. Запуск + +1. **Создай директорию конфига** и положи туда `.conf`: +```bash +mkdir -p /root/awg-config +cp /путь/к/de.conf /root/awg-config/awg0.conf +# ↑ имя файла = имя интерфейса (awg0) +``` + +2. **Собери образ:** +```bash +cd /root/awg-builder +docker build -t amneziawg-client:latest . +``` + +3. **Запусти контейнер:** +```bash +docker run -dit \ + --name=amneziawg-client \ + -v /root/awg-config:/config \ + --network=host \ + --device=/dev/net/tun:/dev/net/tun \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_MODULE \ + --restart always \ + amneziawg-client:latest +``` + +4. **Проверь:** +```bash +docker ps --filter name=amneziawg-client # Up, restart always +docker logs amneziawg-client # интерфейс UP, handshake +docker exec amneziawg-client awg show # самый наглядный статус +``` + +--- + +## 9. Проверка работоспособности + +```bash +# Статус интерфейса и handshake (главное) +docker exec amneziawg-client awg show +# Должно быть: "latest handshake: N seconds ago" и ненулевые transfer + +# Внешний IP с самого LXC (через awg0): +curl -s ifconfig.me +# Это будет IP VPN-провайдера + +# Статус NAT/маршрутизации +docker exec amneziawg-client iptables -t mangle -L PREROUTING -n -v +docker exec amneziawg-client iptables -t nat -L POSTROUTING -n -v + +# Проверка forwarded трафика из LAN: +# с устройства в 192.168.1.0/24, у которого шлюз = 192.168.1.147 +curl -s ifconfig.me +# Тоже IP VPN-провайдера +``` + +**Полезный признак нормальной работы:** +``` +peer: FfgUO6z0plGUntTW3T8fsFsZ250GcQZEKlCgj1fkRFc= + latest handshake: 42 seconds ago ← периодически обновляется + transfer: 1.24 MiB received, 3.2 MiB sent ← данные идут +``` + +Если `latest handshake` отсутствует и `received = 0` — пакеты не доходят до сервера. Причины: файрвол роутера блокирует UDP, неверный Endpoint в `.conf`, фильтрация DPI. + +--- + +## 10. Включение шлюза для LAN + +Когда туннель поднят, чтобы устройства LAN пошли через VPN, на **роутере** меняют шлюз по умолчанию или статический маршрут: + +**Keenetic (веб-интерфейс):** +1. `Интернет-центр → Маршрутизация → Статические маршруты` +2. Добавить: + - Сеть назначения: `0.0.0.0` + - Маска: `0.0.0.0` + - Шлюз: `192.168.1.147` + - (или конкретная VPN-подсеть, если не вся LAN) + +**На телефоне (временная проверка):** +- Wi-Fi → IP-настройки → Статический → Маршрутизатор = `192.168.1.147` + +--- + +## 11. Питфоллы и их решение + +| Проблема | Причина | Решение | +|----------|---------|---------| +| `Unknown device type. Falling back to userspace` | Нет модуля ядра amneziawg | Нормально; userspace (amneziawg-go) работает | +| `Line unrecognized: S3=145` | Старая версия `awg`, не знает v3.1 параметры | Собрать свежую amneziawg-tools v3.1.x (п.3) | +| `Address=/DNS=` line error | `awg setconf` не понимает `wg-quick` директивы | Убрать `Address`/`DNS` из `setconf` (см. entrypoint) | +| `/proc/sys/...ip_forward: Read-only` | Ограничение LXC / контейнера | Включить заранее на хосте (п.2) | +| Диск забит (`no space left on device`) | Сборки и образы жрут место | `docker system prune`, расширить диск | +| `gcc not found` при сборке tools | Нет компилятора | `apk add gcc musl-dev` в Dockerfile | +| `linux/types.h` нет | Нужны linux-headers | `apk add linux-headers` | +| `cockpit`/быстрые списки GitHub таймаут | DNS внутри build-контейнера | Клонировать на хосте, `COPY` в Dockerfile | + +--- + +## 12. Расширенный сценарий: отдельная VPN-подсеть (вариант B) + +Нужно, чтобы не вся LAN уходила в VPN, а только отдельные устройства в своей подсети (`192.168.2.0/24`). + +**На LXC добавить alias-IP шлюза:** +```bash +ip addr add 192.168.2.1/32 dev eth0 +# persistence: netplan / LXC interface +``` + +**entrypoint.sh — расширить маршрутизацию:** +```bash +# Вторая подсеть → тоже через VPN +iptables -t mangle -A PREROUTING -s 192.168.2.0/24 ! -d 192.168.2.0/24 -j MARK --set-mark 100 +iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o awg0 -j MASQUERADE +``` + +**DHCP сервер для 192.168.2.0/24** (dnsmasq на LXC или Docker): +``` +interface=eth0 +dhcp-range=192.168.2.100,192.168.2.200,255.255.255.0,24h +dhcp-option=3,192.168.2.1 +dhcp-option=6,100.64.0.1,8.8.8.8 +``` + +**Keenetic — статический маршрут:** +- Сеть: `192.168.2.0`, маска `255.255.255.0`, шлюз `192.168.1.147` + +**Keenetic — гостевая сеть с другой подсетью:** +- Создать вторую SSID, IP `192.168.2.1/24`, DHCP `192.168.2.x` + +--- + +## 13. Обновление версий AWG + +Поскольку AmneziaWG 3.x развивается быстро (новые теги), при проблемах с DPI-блокировками: + +```bash +# Узнать свежие теги +git ls-remote --tags https://github.com/amnezia-vpn/amneziawg-go.git | tail +git ls-remote --tags https://github.com/amnezia-vpn/amneziawg-tools.git | tail + +# Пересобрать из свежих копий +cd /root/awg-src/amneziawg-go && git fetch --tags && git checkout v3.1.XXXXXXX +cd /root/awg-src/amneziawg-tools && git fetch --tags && git checkout v3.1.XXXXXXX +cp -r /root/awg-src/amneziawg-*/* /root/awg-builder/ +docker build -t amneziawg-client:latest /root/awg-builder/ +``` + +--- + +## 14. Безопасность и данные + +- **Приватный ключ** в `.conf` не попадает в логи/память ассистента — только в файл на сервере. +- Не выкладывай `.conf` в чат, репозитории, скриншоты. +- `.conf` читается из `/root/awg-config/awg0.conf` только контейнером. +- Права: `chmod 600 /root/awg-config/awg0.conf`. + +--- + +## Итоговая структура файлов + +``` +/root/awg-config/awg0.conf ← твой .conf (private) +/root/awg-builder/Dockerfile +/root/awg-builder/entrypoint.sh +/root/awg-builder/amneziawg-go/ ← исходники (3.1.20260828) +/root/awg-builder/amneziawg-tools/ ← исходники (3.1.20260812) +/root/awg-src/ ← свежие клоны (для апдейтов) +``` + +**Контейнер:** `amneziawg-client` = полностью автономный AWG-шлюз, ставится как `--restart always`, не зависит от остальных Docker-сервисов. \ No newline at end of file