Commit Graph

6 Commits

Author SHA1 Message Date
Андрей Бобырев
10852b61b3 tunnel: DNAT_PORTS для разных портов (81/79/...)
Made-with: Cursor
2026-04-26 16:05:59 +03:00
Андрей Бобырев
4e9f413521 tunnel: авто-DNAT для NDM/81 через wg0 (fix connection refused)
Made-with: Cursor
2026-04-26 16:02:41 +03:00
Андрей Бобырев
3684c0dc0b tunnel: фикс файрвола Keenetic + раздельные uninstall + README под ключ
- tunnel/tunnel-install.sh: в init-скрипте добавлен `iptables -I INPUT -i wg0
  -j ACCEPT`, OUTPUT-аналог и `rp_filter=2`. Без этого Keenetic режет ответы
  VPS→роутер: handshake проходит, но ping/HTTP внутри туннеля молча дропаются.
  В down() — снимаем эти же правила.

- tunnel/tunnel-uninstall.sh (новый): сносит ТОЛЬКО клиентскую часть туннеля
  (wg0.conf, init, rc.d, наши iptables-правила). Не трогает wireguard-tools,
  чужие WG-конфиги, keenetic_ssh-web, HydraRoute Neo.

- tunnel/server-uninstall.sh (новый): сносит ТОЛЬКО серверную часть туннеля
  (wg-quick@wg0, /etc/wireguard/{wg0.conf,server_*.key,peers/}, kssh-tun,
  ufw-правила kssh-tunnel). Не делает apt remove для wireguard.

- README.md: переписан под ключ. Чётко разделены два пакета (A: панель,
  B: туннель), оба ставятся и удаляются отдельно. Явно перечислено, что
  скрипты НЕ трогают (HydraRoute Neo, кастомные репо, чужие правила).
2026-04-26 14:22:33 +03:00
Андрей Бобырев
677fcc604a tunnel: ufw allow on wg0 + клиент по умолчанию маршрутит только VPS (/32)
После handshake траффик упирался в UFW на сервере (открывали только
51820/udp, не сам интерфейс wg0). Добавляем `ufw allow in/out on wg0`
в server-install.sh — теперь ICMP/HTTP/SSH внутри туннеля проходят.

На клиенте AllowedIPs по умолчанию = 10.99.0.1/32 (только сам VPS),
а не /24. Это устраняет возможный конфликт с существующими маршрутами
для 10.99.0.0/24, если у Keenetic другие WG-интерфейсы используют ту
же подсеть. Hub-and-spoke (роутер→VPS) — типичный сценарий, /32
достаточно. Кому нужен peer-to-peer через хаб — WG_SUBNET=10.99.0.0/24.
2026-04-26 12:09:43 +03:00
Андрей Бобырев
6fafdce1f3 tunnel: client conf без Address — wg setconf не молчал на этой строке
`wg setconf` принимает только базовый формат (PrivateKey/ListenPort + [Peer]),
без wg-quick-полей (Address/DNS/Table/...). Раньше клиентский wg0.conf
содержал `Address = ...`, на котором setconf падал и не дочитывал [Peer].
Интерфейс поднимался, но без peer-а — handshake не отправлялся, сервер
не знал endpoint, пинги через туннель не шли.

Исправление:
- Убираем Address из тела conf, ставим как ip addr add (это уже было).
- В init.up добавили проверку: если после wg setconf нет блока `peer:`
  в `wg show`, печатаем ВНИМАНИЕ — чтобы такая поломка не оставалась
  тихой.
2026-04-26 12:05:45 +03:00
Андрей Бобырев
c46273e72a tunnel: WireGuard VPS↔роутер для серых IP, без правки других сервисов
Решает доступ к роутеру с серым IP через белый VPS — поднимаем WG-туннель
(UDP 51820, подсеть 10.99.0.0/24), и любой сервис на VPS обращается к
роутеру по 10.99.0.X. SSH, HTTP, что угодно — без проброса портов и
без изменений в keenetic_ssh-web/keenetic-unified/Domain Hydra/etc.

Что добавлено:
- tunnel/server-install.sh — установка WG-сервера на Ubuntu VPS,
  генерация ключей, запуск wg-quick@wg0, открытие 51820/udp в ufw.
- tunnel/kssh-tun — утилита управления peer-ами на VPS:
  add/list/show/remove. add генерит ключи и IP, печатает ENV-блок
  с одной командой для роутера.
- tunnel/tunnel-install.sh — клиент для роутера (Entware), принимает
  4 ENV (VPS_ENDPOINT/VPS_PUBKEY/CLIENT_IP/CLIENT_PRIVKEY), ставит
  wireguard-tools, поднимает wg0 и init-скрипт автозапуска.
- tunnel/README.md — пошаговая инструкция массовой установки.
- README.md: краткая ссылка из основного раздела.

Параметры подсети/порта/имени репо — через ENV для масштабной установки.
2026-04-26 11:12:19 +03:00