ip6tables:如何处理周期性变化的前缀?

ip6tables:如何处理周期性变化的前缀?

我的 ISP 为我提供了原生 IPv6(遗憾的是 v4 使用的是 DS-Lite),并且我在宽带路由器后面的本地网络中为客户端使用 SLAAC。

由于我不信任路由器(由我的 ISP 通过 TR-691 配置),因此我在每个客户端上都设置了ip6tables规则,例如限制对同一子网中的站点的 SSH 访问:

$ ip6tables -A services -s 2a02:8071:28c2:5400::/64 -p tcp --dport 22 -j ACCEPT

现在的问题是前缀会定期更改,大约每月一次。

是否有一个ip6tables语句可以动态匹配给定接口的当前前缀?

或者您将如何处理不断变化的前缀?我想编写一个初始化脚本,首先通过 Router-Solicitation 确定当前前缀,然后生成适当的 ip6tables 规则。但这听起来有点不妥……

答案1

理论上,处理此问题的正确方法是使用 DHCP 前缀委派和动态 DNS。

因此,它的工作原理如下:

1)您的路由器 Linux 实例从接口 A 上的 ISP 请求 IPv6 地址以及 IPv6 前缀委派

2) 它从委托前缀中分配一个 /64 到接口 B,该接口包含所有其他机器。它通过 RA 数据包和/或您选择的 DHCP 服务器守护程序通告此前缀

3) 客户端获取 IPv6 地址并通过主机名在本地 DNS 中注册自己,或者如果它们正在运行 bonjour、Avahi 等,则响应该名称的 mDNS 请求。

4) 防火墙规则和几乎所有其他与网络相关的配置都基于主机名,而不是 IP 地址。这是 IPv6 的方式:DNS 名称很好,文字地址不好,因为它们很难记住和输入。

你会发现的主要问题是 iptables 和 ip6tables 仅通过解析主机名来支持基于主机名的规则一次在规则安装期间。因此,每当前缀发生变化时,您可能必须编写一些脚本来重新安装规则。更糟糕的是,如果主机在规则安装时处于离线状态或无法通过 mDNS 或 DDNS 解析,则事情会悄无声息地中断。

简而言之,ip(6)tables 在任何 IP 地址发生变化的情况下都无法正常工作,即使在 IPv4 上也是如此。这意味着它在任何合理规模的网络上都无法正常工作,至少在充当路由器的系统上是如此。

许多商业防火墙产品可以更好地处理此用例(尽管许多产品基于 Linux,例如 SonicWall)。我怀疑它们只是根据 TTL 定期重新解析 FQDN 并更新 IPtables 或其自定义网络内核模块。

相关内容