20 lines
1.9 KiB
Markdown
20 lines
1.9 KiB
Markdown
# План внедрения: 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 обновлены.
|