Документация: обязательный 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`.
|
Ожидаемые имена контейнера по умолчанию: `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
|
### 4. Собрать пакет на build-machine
|
||||||
|
|
||||||
На production-хосте не нужны Rust, cargo и source tree. Сборка делается отдельно.
|
На production-хосте не нужны Rust, cargo и source tree. Сборка делается отдельно.
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ enabled = true
|
|||||||
ssh_port = 2323
|
ssh_port = 2323
|
||||||
# Must match the published Docker/Amnezia UDP port.
|
# Must match the published Docker/Amnezia UDP port.
|
||||||
# Verify with: docker port amnezia-awg2 2>/dev/null || docker port amnezia-awg
|
# 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_port = 443
|
||||||
amnezia_protocols = ["udp"]
|
amnezia_protocols = ["udp"]
|
||||||
allow_icmp = true
|
allow_icmp = true
|
||||||
|
|||||||
@@ -144,6 +144,16 @@
|
|||||||
- [ ] Описан runtime config bootstrap из `/usr/share/doc/awg2-harness/repo/config.example.toml`.
|
- [ ] Описан runtime config bootstrap из `/usr/share/doc/awg2-harness/repo/config.example.toml`.
|
||||||
- [ ] Clean install подтверждает, что `/etc/awg2-harness/config.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)
|
## L. Host firewall (ports/SSH safety)
|
||||||
|
|
||||||
- [ ] `awg2-harness validate-config` падает, если отсутствует секция `[host_firewall]`.
|
- [ ] `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` — внешний 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`.
|
Для диагностического блока `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.
|
Диагностика `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`.
|
Если контейнер называется иначе или интерфейс не `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
|
## C. Transfer artifacts
|
||||||
|
|
||||||
Ниже два production-сценария установки.
|
Ниже два production-сценария установки.
|
||||||
|
|||||||
@@ -14,6 +14,14 @@ Amnezia:
|
|||||||
published UDP: 443
|
published UDP: 443
|
||||||
peer CIDR: 10.8.1.0/24
|
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:
|
Expected status:
|
||||||
service: active
|
service: active
|
||||||
traffic drift: no
|
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)"
|
C="$(docker ps --format '{{.Names}}' | grep -E '^(amnezia-awg2|amnezia-awg)$' | head -n1)"
|
||||||
docker port "$C"
|
docker port "$C"
|
||||||
docker exec "$C" wg show
|
docker exec "$C" wg show
|
||||||
|
docker inspect -f 'ports={{json .NetworkSettings.Ports}}' amnezia-dns
|
||||||
```
|
```
|
||||||
|
|
||||||
Проверка, что runtime config создан вручную (ожидаемое поведение):
|
Проверка, что runtime config создан вручную (ожидаемое поведение):
|
||||||
|
|||||||
Reference in New Issue
Block a user