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 添加到成员集(即dns4
和dns6
分别),但不是超级套装( dns
) 类型list:set
。
然而,SET
( -j SET --add-set dns src --exist
) 目标实际上可以被告知将 IP 添加到dns
,然后只会添加到可能的集合中,在我们的例子中这取决于选项family
。对于更多有资格添加 IP(或网络或...)的集合,这将变得更加困难,在这种情况下,第一个集合将用于添加条目。
这意味着它list:set
可用于将规则数量减半,否则您必须分别将每个 IPv4 和 IPv6 规则的 IP 集与其他相同的规则进行匹配。