Документация: обязательный production-профиль AmneziaDNS и правила DNS/53
This commit is contained in:
@@ -132,6 +132,25 @@ docker exec "$C" wg show
|
||||
|
||||
Ожидаемые имена контейнера по умолчанию: `amnezia-awg2` или `amnezia-awg`. Ожидаемый интерфейс внутри container netns: обычно `awg0`, fallback-кандидаты описаны в `config.example.toml`.
|
||||
|
||||
### 3.1 Установить AmneziaDNS (обязательный production-шаг)
|
||||
|
||||
Для production-профиля AWG2 установите AmneziaDNS из приложения AmneziaVPN после установки AmneziaWG/AWG:
|
||||
|
||||
```text
|
||||
AmneziaVPN:
|
||||
Servers → <server> → Services → AmneziaDNS → Install
|
||||
```
|
||||
|
||||
Затем включите использование DNS для подключения:
|
||||
|
||||
```text
|
||||
Settings → Connection → DNS servers → Use AmneziaDNS
|
||||
```
|
||||
|
||||
Security note:
|
||||
|
||||
В ожидаемой production-схеме AmneziaDNS слушает `53/tcp` и `53/udp` внутри Docker и не публикуется на host interface. Не открывайте публично `53/tcp` или `53/udp` в host firewall; DNS должен быть доступен только через VPN-path.
|
||||
|
||||
### 4. Собрать пакет на build-machine
|
||||
|
||||
На production-хосте не нужны Rust, cargo и source tree. Сборка делается отдельно.
|
||||
|
||||
@@ -24,6 +24,8 @@ enabled = true
|
||||
ssh_port = 2323
|
||||
# Must match the published Docker/Amnezia UDP port.
|
||||
# Verify with: docker port amnezia-awg2 2>/dev/null || docker port amnezia-awg
|
||||
# AmneziaWG/AWG transport port exposed by Docker, usually 443/udp.
|
||||
# This is not AmneziaDNS. Do not set this to 53.
|
||||
amnezia_port = 443
|
||||
amnezia_protocols = ["udp"]
|
||||
allow_icmp = true
|
||||
|
||||
@@ -144,6 +144,16 @@
|
||||
- [ ] Описан runtime config bootstrap из `/usr/share/doc/awg2-harness/repo/config.example.toml`.
|
||||
- [ ] Clean install подтверждает, что `/etc/awg2-harness/config.toml` не создаётся автоматически.
|
||||
|
||||
## K3. AmneziaDNS
|
||||
|
||||
- [ ] AmneziaDNS установлен из приложения AmneziaVPN.
|
||||
- [ ] Контейнер `amnezia-dns` в состоянии healthy.
|
||||
- [ ] `docker inspect amnezia-dns` показывает `"53/tcp":null` и `"53/udp":null`.
|
||||
- [ ] `amnezia-dns` и `amnezia-awg2` подключены к одной Amnezia DNS Docker-сети.
|
||||
- [ ] Публичный DNS-запрос к `<server-public-ip>:53` не получает ответа.
|
||||
- [ ] DNS-резолвинг у VPN-клиента работает при активном подключении.
|
||||
- [ ] AWG2 host firewall не открывает `53/tcp` и `53/udp`.
|
||||
|
||||
## L. Host firewall (ports/SSH safety)
|
||||
|
||||
- [ ] `awg2-harness validate-config` падает, если отсутствует секция `[host_firewall]`.
|
||||
|
||||
@@ -108,6 +108,14 @@ swappiness = 1
|
||||
|
||||
`host_firewall.amnezia_port` — внешний UDP/TCP порт Amnezia, который AWG2 открывает в host `INPUT` (в зависимости от `host_firewall.amnezia_protocols`). В текущей целевой конфигурации default — `443`; значение должно совпадать с реально опубликованным Amnezia UDP/TCP port.
|
||||
|
||||
Важно: `host_firewall.amnezia_port` — это transport-порт AmneziaWG/AWG (например, `443/udp`). Это не порт AmneziaDNS.
|
||||
|
||||
- Не задавайте `amnezia_port = 53`.
|
||||
- Не добавляйте DNS/53 в `amnezia_protocols`.
|
||||
- Не открывайте `53/tcp` или `53/udp` в AWG2 host firewall для ожидаемого production-профиля.
|
||||
|
||||
В expected production layout AmneziaDNS работает как внутренний Docker/VPN сервис и не публикуется на public host interface.
|
||||
|
||||
Для диагностического блока `Docker/Amnezia port path` в `status` приоритет сопоставления такой: сначала ищется published UDP binding с `HostPort == host_firewall.amnezia_port`, затем fallback на ключ `"<amnezia_port>/udp"` как container port, затем (если UDP binding ровно один) берётся он. Если UDP bindings несколько и однозначного совпадения нет, статус показывает `published_udp_port: unknown`.
|
||||
|
||||
Диагностика `FORWARD` в этом блоке является best-effort: сначала используется `iptables -S FORWARD`, затем fallback через `nft list ruleset`; результаты только отображаются в `status` и не изменяют host `FORWARD`/Docker NAT.
|
||||
|
||||
@@ -134,6 +134,48 @@ docker exec "$C" wg show
|
||||
|
||||
Если контейнер называется иначе или интерфейс не `awg0`, отразите это в `/etc/awg2-harness/config.toml`.
|
||||
|
||||
### B3. Установить AmneziaDNS
|
||||
|
||||
Установите AmneziaDNS из desktop-приложения AmneziaVPN:
|
||||
|
||||
```text
|
||||
Servers → <server> → Services → AmneziaDNS → Install
|
||||
```
|
||||
|
||||
Затем включите его для подключения:
|
||||
|
||||
```text
|
||||
Settings → Connection → DNS servers → Use AmneziaDNS
|
||||
```
|
||||
|
||||
Ожидаемое состояние Docker:
|
||||
|
||||
```bash
|
||||
docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
|
||||
```
|
||||
|
||||
Ожидаемая строка для DNS-контейнера:
|
||||
|
||||
```text
|
||||
amnezia-dns amnezia-dns Up ... (healthy) 53/tcp, 53/udp
|
||||
```
|
||||
|
||||
Проверка публикации портов:
|
||||
|
||||
```bash
|
||||
docker inspect -f 'ports={{json .NetworkSettings.Ports}}' amnezia-dns
|
||||
docker inspect -f 'networks={{range $n,$v := .NetworkSettings.Networks}}{{printf "%s=%s " $n $v.IPAddress}}{{end}}' amnezia-dns
|
||||
docker inspect -f 'networks={{range $n,$v := .NetworkSettings.Networks}}{{printf "%s=%s " $n $v.IPAddress}}{{end}}' amnezia-awg2
|
||||
```
|
||||
|
||||
Ожидаемый результат по портам:
|
||||
|
||||
```text
|
||||
ports={"53/tcp":null,"53/udp":null}
|
||||
```
|
||||
|
||||
Это означает, что DNS не опубликован на публичном host-интерфейсе и остаётся доступным только через VPN/Docker path.
|
||||
|
||||
## C. Transfer artifacts
|
||||
|
||||
Ниже два production-сценария установки.
|
||||
|
||||
@@ -14,6 +14,14 @@ Amnezia:
|
||||
published UDP: 443
|
||||
peer CIDR: 10.8.1.0/24
|
||||
|
||||
AmneziaDNS:
|
||||
container: amnezia-dns
|
||||
status: healthy
|
||||
internal_ip: 172.29.172.254
|
||||
exposed_ports: 53/tcp, 53/udp inside Docker only
|
||||
published_ports: none
|
||||
public_53: closed
|
||||
|
||||
Expected status:
|
||||
service: active
|
||||
traffic drift: no
|
||||
@@ -37,6 +45,7 @@ docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
|
||||
C="$(docker ps --format '{{.Names}}' | grep -E '^(amnezia-awg2|amnezia-awg)$' | head -n1)"
|
||||
docker port "$C"
|
||||
docker exec "$C" wg show
|
||||
docker inspect -f 'ports={{json .NetworkSettings.Ports}}' amnezia-dns
|
||||
```
|
||||
|
||||
Проверка, что runtime config создан вручную (ожидаемое поведение):
|
||||
|
||||
Reference in New Issue
Block a user