Трафик на 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
1.9 KiB
1.9 KiB
План внедрения: 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-flightassert. - Применяется в окружении
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 обновлены.