有没有办法在单个规则中匹配 inet 和 inet6 IP 集?

有没有办法在单个规则中匹配 inet 和 inet6 IP 集?

ipset(8)同一规则中是否可以有一个 IPv4 和一个 IPv6 IP 集 ( )?

我有几条规则分别依赖于一组 IPv4 地址和另一组 IPv6 地址,但在其他方面是相同的。


我应该补充一点,有一个功能ipset(8)听起来很有希望,但事实证明并不能解决当前的问题:

list:set
    The list:set type uses a simple list in which you can store set names.
    [...]
    Please note: by the ipset command you can add, delete and test the
    setnames in a list:set type of set, and not the presence of a set's
    member (such as an IP address).

答案1

事实证明理查德是正确的。该list:set类型确实是解决方案,尽管我发现文档中的措辞即使不是误导,也有些令人困惑。

可以将以下内容与 一起使用ipset restore

create dns4 hash:ip family inet
create dns6 hash:ip family inet6
create dns  list:set
add dns dns4
add dns dns6

然后您可以使用ipset add将 IP 添加到成员集(即dns4dns6分别),但不是超级套装( dns) 类型list:set

然而,SET( -j SET --add-set dns src --exist) 目标实际上可以被告知将 IP 添加到dns,然后只会添加到可能的集合中,在我们的例子中这取决于选项family。对于更多有资格添加 IP(或网络或...)的集合,这将变得更加困难,在这种情况下,第一个集合将用于添加条目。

这意味着它list:set可用于将规则数量减半,否则您必须分别将每个 IPv4 和 IPv6 规则的 IP 集与其他相同的规则进行匹配。

相关内容