10 KiB
Контейнер 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):
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:
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:
[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, чтобы не настраивать статические маршруты на роутере.
Запуск и автозапуск
wg-quick up wg0 # ручной запуск
wg show # проверить состояние
systemctl enable wg-quick@wg0 # автозапуск при старте CT
systemctl start wg-quick@wg0
Проверка интерфейса:
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).
Весь остальной интернет идёт напрямую у клиента.
- сама VPN-подсеть
Пример для iOS:
[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:
[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 снаружи не открывать.
- открыть только UDP-порт
-
На 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→ upstream192.168.1.103:8280, - ограничить доступ к этому хосту только из VPN — либо по исходному адресу (подсеть WireGuard
10.10.99.0/24, если используется маршрутизация без NAT), либо по IP сервера VPN (192.168.1.109, если используется NAT в CT 109), - отключить доступ к Vaultwarden из LAN напрямую по домену (и при желании по IP).
- создать proxy host
Точная реализация правил на роутере и в NPM описывается в соответствующих документах (router-netcraze-speedster, container-100 / NPM); здесь зафиксирована лишь роль контейнера 109 и параметры WireGuard.
On-Demand для iOS/macOS
Для автоматического включения VPN вне домашнего Wi‑Fi используется профиль .mobileconfig с правилами On-Demand. Подробно: Генерация .mobileconfig для WireGuard VPN (On-Demand).
- если подключен 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 — в репозиторий не коммитить.
Связь с другими документами
- Архитектура и подключение — общее описание хостов, IP, доменов (контейнер 109 нужно добавить как исключение ID ↔ IP при необходимости).
- Контейнер 100 (NPM) — настройка proxy host
vault.katykhin.ruи ограничение доступа только через VPN. - Контейнер 103 (Vaultwarden) — сам сервис Vaultwarden и доступ по
192.168.1.103:8280из LAN/VPN. - Роутер Netcraze Speedster — проброс UDP 43123 и общие правила фаервола/маршрутизации.