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

0xC*_*22L 6 iptables ipset

是否可以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).
Run Code Online (Sandbox Code Playgroud)

0xC*_*22L 5

事实证明,理查德是对的。该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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用ipset add将 IP 添加到成员集(即dns4dns6分别),但不能添加到type的超集( dns) list:set

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

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