some fix
This commit is contained in:
@@ -11,37 +11,38 @@
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph External["Внешний мир"]
|
||||
DNS["DNS (Beget)\n*.katykhin.ru → IP"]
|
||||
DNS["DNS (Beget)<br>*.katykhin.ru → IP"]
|
||||
end
|
||||
|
||||
subgraph Edge["Граница сети"]
|
||||
Router["Роутер\n192.168.1.1\nпроброс 80/443 → .100"]
|
||||
Router["Роутер<br>192.168.1.1<br>проброс 80/443 → .100"]
|
||||
end
|
||||
|
||||
subgraph Gateway["Единая точка входа"]
|
||||
NPM["NPM\nCT 100\nтерминация SSL, маршрут по Host"]
|
||||
NPM["NPM<br>CT 100<br>терминация SSL, маршрут по Host"]
|
||||
end
|
||||
|
||||
subgraph Backends["Сервисы"]
|
||||
S101["Nextcloud\nCT 101"]
|
||||
S103["Gitea / CouchDB\nCT 103"]
|
||||
S104["Paperless\nCT 104"]
|
||||
S105["RAG API\nCT 105"]
|
||||
S107["Invidious\nCT 107"]
|
||||
S108["Galene\nCT 108"]
|
||||
S200["Immich\nVM 200"]
|
||||
S101["Nextcloud<br>CT 101"]
|
||||
S103["Gitea / CouchDB / Vaultwarden<br>CT 103"]
|
||||
S104["Paperless<br>CT 104"]
|
||||
S105["RAG API<br>CT 105"]
|
||||
S107["Invidious<br>CT 107"]
|
||||
S108["Galene<br>CT 108"]
|
||||
S109["WireGuard VPN<br>CT 109<br>10.10.99.0/24"]
|
||||
S200["Immich<br>VM 200"]
|
||||
end
|
||||
|
||||
subgraph Data["Данные"]
|
||||
D101["PostgreSQL\nRedis\nCT 101"]
|
||||
D103["PostgreSQL\nCT 103"]
|
||||
D104["PostgreSQL\nRedis\nCT 104"]
|
||||
D107["PostgreSQL\nCT 107"]
|
||||
D200["PostgreSQL\nRedis\nVM 200"]
|
||||
D101["PostgreSQL<br>Redis<br>CT 101"]
|
||||
D103["PostgreSQL<br>CT 103"]
|
||||
D104["PostgreSQL<br>Redis<br>CT 104"]
|
||||
D107["PostgreSQL<br>CT 107"]
|
||||
D200["PostgreSQL<br>Redis<br>VM 200"]
|
||||
end
|
||||
|
||||
subgraph External2["Внешние зависимости"]
|
||||
coTURN["coTURN\nVPS Миран 185.147.80.190"]
|
||||
coTURN["coTURN<br>VPS Миран 185.147.80.190"]
|
||||
end
|
||||
|
||||
DNS --> Router
|
||||
@@ -53,6 +54,8 @@ flowchart TB
|
||||
NPM --> S107
|
||||
NPM --> S108
|
||||
NPM --> S200
|
||||
Router --> S109
|
||||
S109 -.->|"клиенты VPN<br>доступ к vault, LAN"| NPM
|
||||
|
||||
S101 --> D101
|
||||
S103 --> D103
|
||||
@@ -87,6 +90,7 @@ flowchart TB
|
||||
- **Galene (108)** дополнительно зависит от **coTURN (VPS Миран)** для STUN/TURN — на графе это отдельная зависимость от внешнего узла.
|
||||
- **RAG (105)** без внешней БД в стеке — только NPM → Service.
|
||||
- **AdGuard, Homepage, Wallos** живут на том же хосте, что и NPM (CT 100), но логически стоят «рядом» с NPM (доступ к ним тоже через роутер и при необходимости через NPM).
|
||||
- **Vaultwarden (vault.katykhin.ru):** доступ только из LAN (192.168.1.0/24) и из VPN (10.10.99.0/24). Публичный доступ из интернета закрыт; удалённо — только через WireGuard (CT 109). NPM Access List ограничивает приём по подсетям.
|
||||
|
||||
---
|
||||
|
||||
@@ -102,22 +106,23 @@ flowchart TB
|
||||
│ VPN: AmneziaWG DE / US │
|
||||
└───────────────┬───────────────┘
|
||||
│
|
||||
┌────────────────────┼────────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌──────────────┐ ┌────────────────┐ ┌─────────────────┐
|
||||
│ Proxmox │ │ CT 100 │ │ Остальные CT/VM │
|
||||
│ 192.168.1.150│ │ 192.168.1.100 │ │ .101 .103 .104 │
|
||||
│ (гипервизор) │ │ NPM, AdGuard, │ │ .105 .107 .108 │
|
||||
│ │ │ Homepage, │ │ VM 200 .200 │
|
||||
│ pct / qm │ │ Wallos, etc. │ │ (бэкенды) │
|
||||
└──────────────┘ └───────┬────────┘ └────────┬────────┘
|
||||
│ │ │
|
||||
│ │ HTTPS по Host │
|
||||
│ └──────────────────────┘
|
||||
│ (NPM проксирует на бэкенды)
|
||||
│
|
||||
┌────────────────────┼────────────────────┬────────────────┐
|
||||
│ │ │ │
|
||||
▼ ▼ ▼ ▼
|
||||
┌──────────────┐ ┌────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||
│ Proxmox │ │ CT 100 │ │ Остальные CT/VM │ │ CT 109 │
|
||||
│ 192.168.1.150│ │ 192.168.1.100 │ │ .101 .103 .104 │ │ 192.168.1.109 │
|
||||
│ (гипервизор) │ │ NPM, AdGuard, │ │ .105 .107 .108 │ │ WireGuard VPN │
|
||||
│ │ │ Homepage, │ │ VM 200 .200 │ │ UDP 43123 │
|
||||
│ pct / qm │ │ Wallos, etc. │ │ (бэкенды) │ │ 10.10.99.0/24 │
|
||||
└──────────────┘ └───────┬────────┘ └────────┬────────┘ └────────┬────────┘
|
||||
│ │ │ │
|
||||
│ │ HTTPS по Host │ │ клиенты VPN
|
||||
│ └──────────────────────┘ │ → vault, LAN
|
||||
│ (NPM проксирует на бэкенды) │
|
||||
│ │
|
||||
│ Туннели VPN (роутер ↔ VPS)
|
||||
│ + входящий WireGuard на CT 109 (проброс UDP 43123)
|
||||
│
|
||||
├──────────────────────────────────────────────────┐
|
||||
│ │
|
||||
@@ -130,6 +135,8 @@ flowchart TB
|
||||
└──────────────────┘ └──────────────────┘ └──────────────────────┘
|
||||
```
|
||||
|
||||
**Доступ к vault.katykhin.ru:** из LAN (192.168.1.0/24) или через WireGuard (CT 109): клиент подключается к 192.168.1.109:43123, получает IP из 10.10.99.0/24, после чего запросы к vault.katykhin.ru идут через NPM (Access List разрешает обе подсети).
|
||||
|
||||
**Поток публичного трафика:**
|
||||
Запрос из интернета (например `https://video.katykhin.ru`) → роутер (185.35.193.144:443) → проброс на 192.168.1.100:443 → NPM (контейнер 100) → по Host выбирается proxy host → запрос на бэкенд (например 192.168.1.107:3000 для Invidious). Ответ идёт обратно по той же цепочке.
|
||||
|
||||
@@ -143,11 +150,12 @@ flowchart TB
|
||||
| **Proxmox** | 192.168.1.150 | Гипервизор (LXC + KVM) | Управление: `pct`, `qm` |
|
||||
| **CT 100** | 192.168.1.100 | NPM, Homepage, AdGuard, Wallos, log-dashboard, vpn-route-check | home.katykhin.ru, wallos.katykhin.ru, adguard.local; приём 80/443 |
|
||||
| **CT 101** | 192.168.1.101 | Nextcloud, PostgreSQL, Redis | cloud.katykhin.ru |
|
||||
| **CT 103** | 192.168.1.103 | Gitea, PostgreSQL, act_runner, CouchDB (Obsidian) | git.katykhin.ru, obsidian.katykhin.ru |
|
||||
| **CT 103** | 192.168.1.103 | Gitea, PostgreSQL, act_runner, CouchDB (Obsidian), Vaultwarden | git.katykhin.ru, obsidian.katykhin.ru, vault.katykhin.ru (LAN + VPN) |
|
||||
| **CT 104** | 192.168.1.104 | Paperless-ngx, PostgreSQL, Redis | docs.katykhin.ru |
|
||||
| **CT 105** | 192.168.1.105 | RAG API (mini-lm) | mini-lm.katykhin.ru |
|
||||
| **CT 107** | 192.168.1.107 | Invidious, Companion, PostgreSQL | video.katykhin.ru |
|
||||
| **CT 108** | 192.168.1.108 | Galene (видеозвонки) | call.katykhin.ru |
|
||||
| **CT 109** | 192.168.1.109 | WireGuard VPN (local-vpn), UDP 43123 | Клиенты 10.10.99.0/24; доступ к vault, LAN, AdGuard DNS |
|
||||
| **VM 200** | 192.168.1.200 | Immich, PostgreSQL, Redis, ML, deduper, Power Tools, Public Share | immich.katykhin.ru, immich-pt.katykhin.ru, share.katykhin.ru |
|
||||
| **VPS DE** | 185.103.253.99 | AmneziaWG (обход блокировок) | Туннель с роутера (10.8.1.x) |
|
||||
| **VPS US** | 147.45.124.117 | AmneziaWG (второй выход) | Туннель с роутера |
|
||||
@@ -175,6 +183,7 @@ flowchart TB
|
||||
| mini-lm.katykhin.ru | 192.168.1.105:8000 | CT 105 |
|
||||
| git.katykhin.ru | 192.168.1.103:3000 | CT 103 |
|
||||
| obsidian.katykhin.ru | 192.168.1.103:5984 | CT 103 |
|
||||
| vault.katykhin.ru | 192.168.1.103:8280 | CT 103 (Vaultwarden; доступ по Access List: LAN + VPN) |
|
||||
|
||||
(Точный список proxy host — в NPM на CT 100; при добавлении доменов таблицу обновлять.)
|
||||
|
||||
@@ -191,6 +200,7 @@ flowchart TB
|
||||
4. **DNS (Beget)** — без записей *.katykhin.ru запросы не дойдут до твоего IP.
|
||||
|
||||
- **Каждый бэкенд** (101, 103, 104, 105, 107, 108, 200) при доступе снаружи зависит от NPM и роутера; при доступе только из LAN может работать и без NPM (по IP и порту).
|
||||
- **Vaultwarden (vault.katykhin.ru):** публичный доступ из интернета закрыт; разрешены только LAN (192.168.1.0/24) и клиенты WireGuard VPN (10.10.99.0/24). Удалённый доступ к vault — только через CT 109 (WireGuard).
|
||||
|
||||
### Внутри хостов
|
||||
|
||||
@@ -201,6 +211,7 @@ flowchart TB
|
||||
- **Контейнеры 101, 103, 104, 107, 200:** каждый свой стек: приложение зависит от своей БД (PostgreSQL) и при необходимости от Redis. Порядок запуска: сначала БД/Redis, потом приложение (обычно задано в docker-compose через depends_on).
|
||||
- **Контейнер 105 (RAG):** один контейнер, без внешней БД в стеке.
|
||||
- **Контейнер 108 (Galene):** не зависит от других контейнеров в LAN; зависит от **внешнего coTURN** (VPS Миран 185.147.80.190) для STUN/TURN — без него видеозвонки могут не устанавливаться за строгим NAT/фаерволом.
|
||||
- **Контейнер 109 (WireGuard VPN):** самостоятельный; от него зависят удалённые пользователи (доступ к vault.katykhin.ru и LAN через NPM после подключения к VPN). DNS для клиентов — AdGuard (CT 100).
|
||||
- **Immich (200):** зависит от PostgreSQL, Redis, при необходимости от immich-deduper (сеть и БД). ML-контейнер опционально (GPU).
|
||||
|
||||
### Внешние сервисы
|
||||
@@ -217,10 +228,11 @@ flowchart TB
|
||||
| **Роутер** | Весь доступ из интернета к домашней сети (в т.ч. все домены). Нет VPN-выхода, если туннели подняты на роутере. | Резервный роутер / запасной канал; доступ к управлению из LAN. |
|
||||
| **Proxmox (192.168.1.150)** | Все контейнеры и ВМ недоступны (они на нём запущены). | Резервное питание, мониторинг, бэкапы конфигов и данных. |
|
||||
| **Контейнер 100 (NPM)** | Публичный HTTPS ко всем сервисам: без NPM нет терминации SSL и маршрутизации. Сервисы по IP:порт из LAN могут быть доступны, если порты не закрыты. | Мониторинг NPM и Docker на 100; быстрый перезапуск; бэкап конфигов NPM. |
|
||||
| **Контейнер 109 (WireGuard)** | Нет удалённого доступа по VPN к vault.katykhin.ru и к внутренним сервисам извне LAN. | Мониторинг сервиса wg-quick@wg0; проброс UDP 43123 на роутере; бэкап /etc/wireguard. |
|
||||
| **Certbot / Beget API** | Истечение сертификатов → браузеры начнут ругаться. Продление через DNS-01 зависит от Beget. | Следить за продлением (таймер certbot); иметь запасной способ выпуска (другой DNS или ручной сертификат). |
|
||||
| **DNS (Beget)** | Смена IP или потеря записей — домены перестанут вести на твой хост. | Ведение записей вручную/через API; при смене IP обновить A-записи. |
|
||||
| **VPS Миран (coTURN)** | Galene: проблемы с установкой видеозвонов за NAT. Остальные сервисы не зависят. | Локальный coTURN на 108 или другом хосте как запасной вариант. |
|
||||
| **Конкретный бэкенд (101, 103, …)** | Падает только свой сервис (Nextcloud, Gitea, Invidious и т.д.). Остальные работают. | Зависимости внутри стека (БД первым) и мониторинг каждого хоста. |
|
||||
| **Конкретный бэкенд (101, 103, …)** | Падает только свой сервис (Nextcloud, Gitea, Vaultwarden, Invidious и т.д.). Остальные работают. | Зависимости внутри стека (БД первым) и мониторинг каждого хоста. |
|
||||
|
||||
---
|
||||
|
||||
@@ -228,6 +240,8 @@ flowchart TB
|
||||
|
||||
- [Архитектура и подключение](../architecture/architecture.md) — общее описание, таблица контейнеров, поток запросов.
|
||||
- [Контейнер 100](../containers/container-100.md) — NPM, AdGuard, Homepage, порядок запуска.
|
||||
- [Контейнер 109](../containers/container-109.md) — WireGuard VPN (local-vpn), доступ к vault и LAN.
|
||||
- [Генерация .mobileconfig для WireGuard (On-Demand)](vpn-mobileconfig-wireguard.md) — как собрать профиль для iOS/macOS с автоматическим подключением вне дома.
|
||||
- [Роутер Netcraze Speedster](router-netcraze-speedster.md) — проброс портов, VPN.
|
||||
- [VPN-сервер (VPS, AmneziaWG)](../vps/vpn-vps-amneziawg.md) — туннели с роутера.
|
||||
- [VPS Миран: боты и STUN/TURN](../vps/vps-miran-bots.md) — coTURN для Galene.
|
||||
|
||||
258
docs/network/vpn-mobileconfig-wireguard.md
Normal file
258
docs/network/vpn-mobileconfig-wireguard.md
Normal file
@@ -0,0 +1,258 @@
|
||||
# Генерация .mobileconfig для WireGuard VPN (On-Demand)
|
||||
|
||||
Как собрать Apple-профиль конфигурации (`.mobileconfig`) для WireGuard с правилами **On-Demand**: автоматическое подключение VPN вне домашней сети и отключение на домашнем Wi‑Fi.
|
||||
|
||||
---
|
||||
|
||||
## Зачем нужен .mobileconfig
|
||||
|
||||
- **Обычный конфиг WireGuard** — пользователь сам включает/выключает туннель.
|
||||
- **Профиль .mobileconfig** — ставится в «Настройки» → «Профили» (macOS) или «Основные» → «VPN и управление устройством» (iOS). Туннель появляется в приложении WireGuard и может управляться **On-Demand**: система сама поднимает VPN, когда устройство не в доверенной сети (например не дома), и отключает на домашнем Wi‑Fi.
|
||||
|
||||
В итоге: за пределами дома — всегда VPN, дома — без VPN, без ручного переключения.
|
||||
|
||||
---
|
||||
|
||||
## Что должно быть готово на сервере
|
||||
|
||||
- WireGuard поднят (например на [контейнере 109](../containers/container-109.md)).
|
||||
- Для каждого клиента (macOS, iOS и т.д.):
|
||||
- своя пара ключей (приватный + публичный);
|
||||
- в `wg0.conf` на сервере добавлен `[Peer]` с `PublicKey` и `AllowedIPs` (один адрес из подсети VPN, например `10.10.99.2/32` для iOS, `10.10.99.3/32` для macOS).
|
||||
- Внешний IP и порт сервера (например `185.35.193.144:43123`), проброс UDP на роутере на CT 109.
|
||||
|
||||
Подсеть VPN в примерах: `10.10.99.0/24`; DNS в туннеле — AdGuard на `192.168.1.100`.
|
||||
|
||||
---
|
||||
|
||||
## Структура профиля
|
||||
|
||||
Файл `.mobileconfig` — это **XML plist** (Property List) с корневым словарём:
|
||||
|
||||
| Ключ | Назначение |
|
||||
|------|------------|
|
||||
| `PayloadContent` | Массив payload’ов (в нашем случае один — VPN). |
|
||||
| `PayloadDisplayName` | Название профиля в списке профилей. |
|
||||
| `PayloadIdentifier` | Уникальный идентификатор (например `ru.katykhin.wireguard.local-vpn`). |
|
||||
| `PayloadType` | `Configuration`. |
|
||||
| `PayloadUUID` | Уникальный UUID профиля. |
|
||||
| `PayloadVersion` | 1. |
|
||||
|
||||
Внутри `PayloadContent` — один элемент типа **VPN**:
|
||||
|
||||
| Ключ | Назначение |
|
||||
|------|------------|
|
||||
| `PayloadType` | `com.apple.vpn.managed` |
|
||||
| `VPNSubType` | **macOS:** `com.wireguard.macos` — **iOS:** `com.wireguard.ios` |
|
||||
| `UserDefinedName` | Имя туннеля в приложении WireGuard (например «Local VPN (WireGuard)»). |
|
||||
| `VendorConfig` → `WgQuickConfig` | Строка с конфигом WireGuard в формате INI (как в обычном конфиге). |
|
||||
| `VPN` → `RemoteAddress` | Адрес сервера (хост:порт). |
|
||||
| `OnDemandEnabled` | `1` — включить On-Demand. |
|
||||
| `OnDemandRules` | Массив правил: когда отключать VPN (например на домашнем Wi‑Fi) и когда подключать. |
|
||||
|
||||
---
|
||||
|
||||
## Конфиг WireGuard внутри профиля (WgQuickConfig)
|
||||
|
||||
В `WgQuickConfig` вставляется **ровно тот же текст**, что и в обычном клиентском конфиге WireGuard, например:
|
||||
|
||||
```ini
|
||||
[Interface]
|
||||
Address = 10.10.99.3/32
|
||||
PrivateKey = <приватный-ключ-этого-клиента>
|
||||
DNS = 192.168.1.100
|
||||
|
||||
[Peer]
|
||||
PublicKey = <публичный-ключ-сервера>
|
||||
Endpoint = 185.35.193.144:43123
|
||||
AllowedIPs = 10.10.99.0/24, 192.168.1.0/24
|
||||
PersistentKeepalive = 25
|
||||
```
|
||||
|
||||
- `Address` — один адрес из подсети VPN, уникальный для каждого устройства (в `wg0.conf` на сервере в `AllowedIPs` для этого peer должен быть этот же `/32`).
|
||||
- `PrivateKey` — приватный ключ **клиента** (генерируется один раз и хранится только на устройстве / в профиле).
|
||||
- `PublicKey` — публичный ключ **сервера** (из `/etc/wireguard/server.pub` на сервере).
|
||||
- `Endpoint` — внешний IP или домен и порт WireGuard (проброс на роутере).
|
||||
- `AllowedIPs` — какие сети пускать через VPN (подсеть VPN + LAN, если нужен доступ в домашнюю сеть).
|
||||
- `PersistentKeepalive` — полезно для мобильных и NAT.
|
||||
|
||||
Ключи в профиле — **секретные**; не коммитить `.mobileconfig` с реальными ключами в репозиторий (добавить в `.gitignore`).
|
||||
|
||||
---
|
||||
|
||||
## Правила On-Demand (OnDemandRules)
|
||||
|
||||
Массив словарей. Порядок важен: первое сработавшее правило применяется.
|
||||
|
||||
1. **Отключить VPN на домашнем Wi‑Fi** — правило с `Action = Disconnect` и условием по Wi‑Fi:
|
||||
- `InterfaceTypeMatch` = `WiFi`;
|
||||
- `SSIDMatch` = массив SSID (например `["HomeWiFi"]` или `["Netcraze-1882"]`).
|
||||
- Итог: если устройство в Wi‑Fi с этим SSID → VPN отключается.
|
||||
|
||||
2. **Во всех остальных случаях — подключать** — правило без условий:
|
||||
- `Action` = `Connect`.
|
||||
- Итог: любой другой сеть (другой Wi‑Fi, сотовые данные) → VPN включается.
|
||||
|
||||
Пример в plist:
|
||||
|
||||
```xml
|
||||
<key>OnDemandRules</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Action</key>
|
||||
<string>Disconnect</string>
|
||||
<key>InterfaceTypeMatch</key>
|
||||
<string>WiFi</string>
|
||||
<key>SSIDMatch</key>
|
||||
<array>
|
||||
<string>HomeWiFi</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Action</key>
|
||||
<string>Connect</string>
|
||||
</dict>
|
||||
</array>
|
||||
```
|
||||
|
||||
Перед установкой профиля **замени** `HomeWiFi` на реальный SSID своей домашней сети.
|
||||
|
||||
---
|
||||
|
||||
## Различия macOS и iOS
|
||||
|
||||
- **VPNSubType:**
|
||||
- macOS: `com.wireguard.macos`
|
||||
- iOS: `com.wireguard.ios`
|
||||
- Остальная структура (WgQuickConfig, OnDemandRules, SSIDMatch) — одинаковая. Обычно делают два файла: `wireguard-macos-ondemand.mobileconfig` и `wireguard-ios-ondemand.mobileconfig`, в каждом свой клиентский ключ и свой `Address` (например `.2/32` для iOS, `.3/32` для macOS), если на сервере заведены два разных peer’а.
|
||||
|
||||
---
|
||||
|
||||
## Шаблон plist (минимум для одного туннеля)
|
||||
|
||||
Ниже — скелет без подстановки ключей; в `WgQuickConfig` и в `SSIDMatch` нужно подставить свои значения.
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>PayloadContent</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>PayloadDisplayName</key>
|
||||
<string>VPN</string>
|
||||
<key>PayloadType</key>
|
||||
<string>com.apple.vpn.managed</string>
|
||||
<key>PayloadVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>PayloadIdentifier</key>
|
||||
<string>ru.katykhin.wireguard.local-vpn.tunnel</string>
|
||||
<key>PayloadUUID</key>
|
||||
<string>A1B2C3D4-E5F6-4A5B-8C9D-0E1F2A3B4C5D</string>
|
||||
<key>UserDefinedName</key>
|
||||
<string>Local VPN (WireGuard)</string>
|
||||
<key>VPNType</key>
|
||||
<string>VPN</string>
|
||||
<key>VPNSubType</key>
|
||||
<string>com.wireguard.macos</string>
|
||||
<key>VendorConfig</key>
|
||||
<dict>
|
||||
<key>WgQuickConfig</key>
|
||||
<string>[Interface]
|
||||
Address = 10.10.99.3/32
|
||||
PrivateKey = ВСТАВЬ_ПРИВАТНЫЙ_КЛЮЧ_КЛИЕНТА
|
||||
DNS = 192.168.1.100
|
||||
|
||||
[Peer]
|
||||
PublicKey = ВСТАВЬ_ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА
|
||||
Endpoint = 185.35.193.144:43123
|
||||
AllowedIPs = 10.10.99.0/24, 192.168.1.0/24
|
||||
PersistentKeepalive = 25
|
||||
</string>
|
||||
</dict>
|
||||
<key>VPN</key>
|
||||
<dict>
|
||||
<key>RemoteAddress</key>
|
||||
<string>185.35.193.144:43123</string>
|
||||
<key>AuthenticationMethod</key>
|
||||
<string>Password</string>
|
||||
</dict>
|
||||
<key>OnDemandEnabled</key>
|
||||
<integer>1</integer>
|
||||
<key>OnDemandRules</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>Action</key>
|
||||
<string>Disconnect</string>
|
||||
<key>InterfaceTypeMatch</key>
|
||||
<string>WiFi</string>
|
||||
<key>SSIDMatch</key>
|
||||
<array>
|
||||
<string>HomeWiFi</string>
|
||||
</array>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Action</key>
|
||||
<string>Connect</string>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<key>PayloadDisplayName</key>
|
||||
<string>WireGuard Local VPN (On-Demand)</string>
|
||||
<key>PayloadIdentifier</key>
|
||||
<string>ru.katykhin.wireguard.local-vpn</string>
|
||||
<key>PayloadType</key>
|
||||
<string>Configuration</string>
|
||||
<key>PayloadUUID</key>
|
||||
<string>B2C3D4E5-F6A7-5B6C-9D0E-1F2A3B4C5D6E</string>
|
||||
<key>PayloadVersion</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</plist>
|
||||
```
|
||||
|
||||
Для **iOS** замени `VPNSubType` на `com.wireguard.ios` и в `WgQuickConfig` задай свой `Address` (например `10.10.99.2/32`) и приватный ключ того peer’а, который добавлен для этого устройства в `wg0.conf`.
|
||||
|
||||
---
|
||||
|
||||
## Генерация ключей (на сервере)
|
||||
|
||||
На сервере WireGuard (например в CT 109):
|
||||
|
||||
```bash
|
||||
# Приватный ключ
|
||||
wg genkey | tee client.key | wg pubkey > client.pub
|
||||
|
||||
# Вывести для копирования в профиль
|
||||
cat client.key # → PrivateKey в [Interface]
|
||||
cat /etc/wireguard/server.pub # → PublicKey в [Peer]
|
||||
```
|
||||
|
||||
Отдельные ключи для каждого устройства (например `ios.key`/`macos.key`) и соответствующие peer’ы в `wg0.conf` — см. [контейнер 109](../containers/container-109.md).
|
||||
|
||||
---
|
||||
|
||||
## Безопасность
|
||||
|
||||
- В `.mobileconfig` попадают **приватные ключи** клиента. Файл нужно хранить только на доверенных носителях и не коммитить в публичный репозиторий.
|
||||
- В этом проекте файлы `*.mobileconfig` и конкретно `wireguard-macos-ondemand.mobileconfig`, `wireguard-ios-ondemand.mobileconfig` добавлены в `.gitignore`.
|
||||
- Передавать профиль на устройство по защищённому каналу (AirDrop, личная почта, зашифрованный диск).
|
||||
|
||||
---
|
||||
|
||||
## Установка профиля
|
||||
|
||||
- **macOS:** двойной клик по `.mobileconfig` → откроются «Системные настройки» → «Профили» → установить. Туннель появится в приложении WireGuard; при необходимости один раз включите его вручную, далее On-Demand будет управлять подключением.
|
||||
- **iOS:** отправить файл на устройство (AirDrop, почта, «Файлы») → открыть → «Установить» → при необходимости «Настройки» → «Основные» → «VPN и управление устройством» → установить профиль. Туннель появится в WireGuard; включите один раз вручную, затем работает On-Demand.
|
||||
|
||||
После смены SSID или ключей — удалить старый профиль и установить новый.
|
||||
|
||||
---
|
||||
|
||||
## Связь с другими документами
|
||||
|
||||
- [Контейнер 109 (WireGuard)](../containers/container-109.md) — настройка сервера, ключи, клиентские конфиги, раздел «On-Demand для iOS/macOS».
|
||||
- [Архитектура](../architecture/architecture.md) — таблица контейнеров, CT 109.
|
||||
- [Схема сети](network-topology.md) — место VPN в топологии, доступ к vault.katykhin.ru.
|
||||
Reference in New Issue
Block a user