Теоретически, правильный способ справиться с этим - делегирование префиксов DHCP и динамический DNS.
Итак, это будет работать так:
1) ваш экземпляр linux маршрутизатора запрашивает IPv6-адрес, а также делегирование префикса IPv6 у интернет-провайдера на интерфейсе A
2) он назначает один /64 из делегированного префикса интерфейсу B, который имеет все остальные машины. Он рекламирует этот префикс через пакеты RA и /или через DHCP-сервер по вашему выбору.
3) клиенты получают адреса IPv6 и регистрируются в локальном DNS по имени хоста, или отвечают на запросы mDNS для этого имени, если они используют Bonjour, Avahi и т.д.
4) правила брандмауэра и почти любая другая конфигурация, связанная с сетью, основана на именах хостов, а не на IP-адресах. Это способ IPv6: DNS-имена хорошие, буквальные адреса плохие, потому что их трудно запомнить и ввести.
Основная проблема, которую вы обнаружите, заключается в том, что iptables и ip6tables поддерживают только правила на основе имен хостов, разрешая имена хостов один раз во время установки правил. Так что вам, вероятно, придется написать какой-нибудь скрипт для переустановки правил при каждом изменении префикса. Хуже того, если хост находится в автономном режиме или не может быть разрешен с помощью mDNS или DDNS во время установки правила, все будет происходить молча.
Короче говоря, таблицы ip(6) просто сломаны для любого случая, когда IP-адреса меняются, даже на IPv4. Это означает, что он поврежден для любой сети разумного размера, по крайней мере, в системе, действующей в качестве маршрутизатора.
Многие коммерческие брандмауэры справляются с этим вариантом использования намного лучше (хотя многие из них основаны на Linux, например, SonicWall). Я подозреваю, что они просто периодически повторно разрешают полные доменные имена на основе TTL и обновляют IPtables или их собственные модули ядра сети.