Files
poc-frr-anycast/docs/2026-09-10-nftables-dnat-plan.md
ayurishchevandClaude Sonnet 5 1e287ee81c Add DNAT anycast -> backend in frr_anycast nftables config
Трафик на anycast-адрес (172.31.255.10) теперь сначала DNAT'ится на
реальный backend (DNAT_TARGET_IP=95.163.53.117 для site-cloud) в
prerouting, и только потом проходит уже существующий sNAT/masquerade
в postrouting — обе цепочки в одной table inet nat, порядок хуков
гарантирует правильную последовательность.

DNAT включается автоматически по факту заданного dnat_target_ip (без
отдельного булева флага), выключен по умолчанию — площадка A не
затронута. Pre-flight assert не даёт задать dnat_target_ip без
enable_snat (иначе nftables.conf вообще не разворачивается).

render-check-cloud.sh дополнен проверкой DNAT-правила и валидацией
синтаксиса каждого nftables.conf через `nft -c -f`.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
2026-09-10 17:25:09 +03:00

21 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План внедрения: DNAT anycast → 95.163.53.117 в роли frr_anycast
**Дата:** 2026-09-10
## Цель
Добавить в роль `frr_anycast` опциональную DNAT-трансляцию: трафик на anycast-адрес перенаправляется на `95.163.53.117`, до уже существующей SNAT/masquerade в `postrouting` (см. обсуждение в чате).
## Подход
- `table inet nat` дополняется цепочкой `prerouting` (`hook prerouting priority dstnat`) с правилом `ip daddr <anycast-host> dnat to <dnat_target_ip>` — рендерится только когда `dnat_target_ip` задан.
- `enable_dnat`/`dnat_target_ip` — новые опциональные переменные роли (дефолт выключено), выводятся из `DNAT_TARGET_IP` в env-файле: если задан — DNAT включается автоматически, отдельный булев флаг в env не нужен.
- DNAT имеет смысл только при уже включённом `enable_snat` (иначе `nftables.conf` вообще не разворачивается) — добавляется pre-flight `assert`.
- Применяется в окружении `site-cloud` (`DNAT_TARGET_IP=95.163.53.117` в `site-cloud.env`), площадка A не затрагивается (дефолт выключен).
## Definition of done
- `nftables.conf.j2` рендерит `prerouting`-цепочку с DNAT при заданном `dnat_target_ip`, без него — не рендерит (площадка A не меняется, у неё `enable_snat: false`).
- `render-check-cloud.sh` подтверждает: `dnat to 95.163.53.117` присутствует у всех 4 узлов, синтаксис `nft -c` валиден.
- README и summary обновлены.