some fix
This commit is contained in:
203
docs/containers/container-109.md
Normal file
203
docs/containers/container-109.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# Контейнер 109 (local-vpn): локальный WireGuard VPN
|
||||
|
||||
Подробное описание LXC-контейнера **109** на Proxmox (192.168.1.109): локальный VPN-сервер на WireGuard для доступа к внутренней сети и сервисам (в т.ч. Vaultwarden) только через зашифрованный туннель.
|
||||
|
||||
---
|
||||
|
||||
## Общие сведения
|
||||
|
||||
- **Хостнейм:** local-vpn
|
||||
- **ID:** 109
|
||||
- **IP:** 192.168.1.109/24
|
||||
- **ОС:** Debian 12 (bookworm)
|
||||
- **Ресурсы:** 1 core, 256 MB RAM, 1 GB диск на `local-lvm`
|
||||
- **Доступ:** с Proxmox — `ssh root@192.168.1.150` → `pct exec 109 -- bash`.
|
||||
|
||||
Назначение контейнера — поднимать локальный WireGuard, через который:
|
||||
|
||||
- клиенты (iOS/macOS) получают доступ к сети `192.168.1.0/24` (LAN),
|
||||
- DNS внутри VPN идёт через AdGuard на CT 100 (`192.168.1.100`),
|
||||
- доступ к Vaultwarden (`vault.katykhin.ru` → NPM → 192.168.1.103:8280) можно ограничить **только через этот VPN** (ограничение на уровне NPM/фаервола, см. соответствующую документацию).
|
||||
|
||||
---
|
||||
|
||||
## Создание контейнера
|
||||
|
||||
Контейнер создан на Proxmox командой вида (выполнено на хосте 192.168.1.150):
|
||||
|
||||
```bash
|
||||
pct create 109 local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst \
|
||||
--hostname local-vpn \
|
||||
--cores 1 \
|
||||
--memory 256 \
|
||||
--rootfs local-lvm:1 \
|
||||
--net0 name=eth0,bridge=vmbr0,ip=192.168.1.109/24,gw=192.168.1.1,firewall=1 \
|
||||
--features keyctl=1,nesting=1
|
||||
|
||||
pct start 109
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## WireGuard (wg0) внутри контейнера
|
||||
|
||||
### Пакеты и подготовка
|
||||
|
||||
Внутри CT 109:
|
||||
|
||||
```bash
|
||||
apt-get update
|
||||
apt-get install -y wireguard-tools iptables
|
||||
|
||||
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg-forward.conf
|
||||
sysctl -p /etc/sysctl.d/99-wg-forward.conf
|
||||
```
|
||||
|
||||
### Ключи и конфиг
|
||||
|
||||
Ключи сервера и клиентов лежат в `/etc/wireguard/` (файлы `server.key/.pub`, `ios.key/.pub`, `macos.key/.pub`).
|
||||
Основной конфиг интерфейса — `/etc/wireguard/wg0.conf`:
|
||||
|
||||
```ini
|
||||
[Interface]
|
||||
Address = 10.10.99.1/24
|
||||
ListenPort = 43123
|
||||
PrivateKey = <server-private-key>
|
||||
|
||||
# Включение форвардинга LAN <-> VPN с NAT
|
||||
PostUp = iptables -A FORWARD -i wg0 -o eth0 -s 10.10.99.0/24 -d 192.168.1.0/24 -j ACCEPT; \
|
||||
iptables -A FORWARD -i eth0 -o wg0 -d 10.10.99.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT; \
|
||||
iptables -t nat -A POSTROUTING -s 10.10.99.0/24 -o eth0 -j MASQUERADE
|
||||
PostDown = iptables -D FORWARD -i wg0 -o eth0 -s 10.10.99.0/24 -d 192.168.1.0/24 -j ACCEPT; \
|
||||
iptables -D FORWARD -i eth0 -o wg0 -d 10.10.99.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT; \
|
||||
iptables -t nat -D POSTROUTING -s 10.10.99.0/24 -o eth0 -j MASQUERADE
|
||||
|
||||
[Peer]
|
||||
# iOS
|
||||
PublicKey = <ios-public-key>
|
||||
AllowedIPs = 10.10.99.2/32
|
||||
|
||||
[Peer]
|
||||
# macOS
|
||||
PublicKey = <macos-public-key>
|
||||
AllowedIPs = 10.10.99.3/32
|
||||
```
|
||||
|
||||
- **Серверный адрес:** `10.10.99.1/24` (подсеть VPN).
|
||||
- **Порт WireGuard:** `43123/UDP`.
|
||||
- **NAT:** MASQUERADE на выход в `192.168.1.0/24`, чтобы не настраивать статические маршруты на роутере.
|
||||
|
||||
### Запуск и автозапуск
|
||||
|
||||
```bash
|
||||
wg-quick up wg0 # ручной запуск
|
||||
wg show # проверить состояние
|
||||
|
||||
systemctl enable wg-quick@wg0 # автозапуск при старте CT
|
||||
systemctl start wg-quick@wg0
|
||||
```
|
||||
|
||||
Проверка интерфейса:
|
||||
|
||||
```bash
|
||||
ip a show wg0
|
||||
```
|
||||
|
||||
Ожидаемый адрес: `10.10.99.1/24`.
|
||||
|
||||
---
|
||||
|
||||
## Конфиги клиентов (split-tunnel + DNS через AdGuard)
|
||||
|
||||
Клиентские конфиги удобно хранить в `/etc/wireguard/clients/` внутри CT (и оттуда забирать на устройства).
|
||||
|
||||
### Базовые параметры для всех клиентов
|
||||
|
||||
- **Адрес клиента в VPN:** `10.10.99.X/32` (уникальный для каждого устройства).
|
||||
- **DNS:** `192.168.1.100` (AdGuard на CT 100).
|
||||
- **Endpoint сервера:** `185.35.193.144:43123` (внешний IP + порт, проброшенный на CT 109).
|
||||
- **Split tunnel:**
|
||||
- `AllowedIPs = 10.10.99.0/24, 192.168.1.0/24`
|
||||
→ через VPN идут только:
|
||||
- сама VPN-подсеть `10.10.99.0/24`,
|
||||
- внутренняя сеть `192.168.1.0/24` (все домашние сервисы, в т.ч. NPM и Vaultwarden).
|
||||
Весь остальной интернет идёт **напрямую** у клиента.
|
||||
|
||||
Пример для iOS:
|
||||
|
||||
```ini
|
||||
[Interface]
|
||||
Address = 10.10.99.2/32
|
||||
PrivateKey = <ios-private-key>
|
||||
DNS = 192.168.1.100
|
||||
|
||||
[Peer]
|
||||
PublicKey = <server-public-key>
|
||||
Endpoint = 185.35.193.144:43123
|
||||
AllowedIPs = 10.10.99.0/24, 192.168.1.0/24
|
||||
PersistentKeepalive = 25
|
||||
```
|
||||
|
||||
Пример для macOS:
|
||||
|
||||
```ini
|
||||
[Interface]
|
||||
Address = 10.10.99.3/32
|
||||
PrivateKey = <macos-private-key>
|
||||
DNS = 192.168.1.100
|
||||
|
||||
[Peer]
|
||||
PublicKey = <server-public-key>
|
||||
Endpoint = 185.35.193.144:43123
|
||||
AllowedIPs = 10.10.99.0/24, 192.168.1.0/24
|
||||
PersistentKeepalive = 25
|
||||
```
|
||||
|
||||
> **Важно:** реальные ключи (`PrivateKey`, `PublicKey`) хранятся только в контейнере (`/etc/wireguard/*.key/.pub`) и **не попадают** в этот репозиторий. В примерах выше использовать плейсхолдеры и заменять их актуальными значениями при выдаче конфигов на устройства.
|
||||
|
||||
---
|
||||
|
||||
## Firewall и ограничения доступа к Vaultwarden (общая схема)
|
||||
|
||||
Идея ограничения доступа:
|
||||
|
||||
- **На роутере (192.168.1.1):**
|
||||
- открыть только UDP-порт `43123`,
|
||||
- пробросить его на `192.168.1.109:43123` (CT 109),
|
||||
- остальные порты для CT 109 снаружи не открывать.
|
||||
|
||||
- **На Proxmox firewall (уровень ноды / CT 109):**
|
||||
- разрешить входящий `UDP 43123` к CT 109,
|
||||
- разрешить ESTABLISHED/RELATED,
|
||||
- разрешить исходящий трафик из CT 109 в LAN (`192.168.1.0/24`) и к нужным внешним DNS (если потребуется).
|
||||
|
||||
- **На уровне NPM (CT 100) / Vaultwarden (CT 103):**
|
||||
- создать proxy host `vault.katykhin.ru` → upstream `192.168.1.103:8280`,
|
||||
- ограничить доступ к этому хосту **только из VPN** — либо по исходному адресу (подсеть WireGuard `10.10.99.0/24`, если используется маршрутизация без NAT), либо по IP сервера VPN (`192.168.1.109`, если используется NAT в CT 109),
|
||||
- отключить доступ к Vaultwarden из LAN напрямую по домену (и при желании по IP).
|
||||
|
||||
Точная реализация правил на роутере и в NPM описывается в соответствующих документах (`router-netcraze-speedster`, `container-100` / NPM); здесь зафиксирована лишь роль контейнера 109 и параметры WireGuard.
|
||||
|
||||
---
|
||||
|
||||
## On-Demand для iOS/macOS
|
||||
|
||||
Для автоматического включения VPN **вне домашнего Wi‑Fi** используется профиль `.mobileconfig` с правилами On-Demand. Подробно: [Генерация .mobileconfig для WireGuard VPN (On-Demand)](../network/vpn-mobileconfig-wireguard.md).
|
||||
|
||||
- если подключен Wi‑Fi с SSID из списка (например `HomeWiFi`) → VPN **отключён**;
|
||||
- во всех остальных случаях (другой Wi‑Fi, сотовые данные) → VPN **включается автоматически**.
|
||||
|
||||
**macOS:** профиль `wireguard-macos-ondemand.mobileconfig`. Перед установкой замени `HomeWiFi` на реальный SSID домашней сети (секция `OnDemandRules` → `SSIDMatch`). Установка: двойной клик по файлу → «Системные настройки» → «Профили» → установить. Туннель появится в приложении WireGuard.
|
||||
|
||||
**iOS:** профиль `wireguard-ios-ondemand.mobileconfig`. То же правило: замени `HomeWiFi` на SSID домашней сети. Установка: отправить файл на iPhone (AirDrop, почта, файлы) → открыть → «Установить» в предложенном профиле → при необходимости «Настройки» → «Основные» → «VPN и управление устройством» → установить профиль. Туннель «Local VPN (WireGuard)» появится в приложении WireGuard; включи один раз вручную, далее On-Demand будет управлять подключением.
|
||||
|
||||
Оба файла содержат приватные ключи и добавлены в `.gitignore` — в репозиторий не коммитить.
|
||||
|
||||
---
|
||||
|
||||
## Связь с другими документами
|
||||
|
||||
- [Архитектура и подключение](../architecture/architecture.md) — общее описание хостов, IP, доменов (контейнер 109 нужно добавить как исключение ID ↔ IP при необходимости).
|
||||
- [Контейнер 100 (NPM)](container-100.md) — настройка proxy host `vault.katykhin.ru` и ограничение доступа только через VPN.
|
||||
- [Контейнер 103 (Vaultwarden)](container-103.md) — сам сервис Vaultwarden и доступ по `192.168.1.103:8280` из LAN/VPN.
|
||||
- [Роутер Netcraze Speedster](../network/router-netcraze-speedster.md) — проброс UDP 43123 и общие правила фаервола/маршрутизации.
|
||||
Reference in New Issue
Block a user