我有一个正在运行的iptables和ipset服务实例。其中一组具有与此类似的规范,其中包含20+引用:
create_set foo ipmap --network 123.45.67.0/24
add_to_set foo host1
add_to_set foo host2其中host1和2为123.45.67.5和123.45.67.6。
我需要将host3添加到与67不同的子网上的集合,例如,123.45.66.0。我想把foo放大到123.45.0.0/16。当foo (无错误)重新定义并在运行时添加host3 (例如123.45.66.5),然后从ipset命令获取“超出范围”错误时,我遇到的问题。事实证明,ipset不使用引用重新加载集。
现在,所有这些都是用脚本和makefile编写的,以便在更新集合或规则时尽可能少地关闭ipset和iptables服务。有数以百计的设置和规则保存和重新加载。我可以(如果是的话,如何)用它的扩展版本替换运行的集合吗?似乎我只能关闭iptables和ipset,进行更改,然后重新加载,但不能动态地重新构建它;否则,它会抱怨在尝试从另一个子网添加host3条目时,set规范是错误的。(后面添加的123.45.x.x中可能有其他主机。)
这发生在运行ipset4.5或6.11的EL5和EL6上。
发布于 2018-06-06 21:34:34
您应该创建新的集
ipset create foo-new ...在那里添加条目,然后交换两个条目:
ipset swap foo-new foo摧毁不再需要的那套:
ipset destroy foo-new发布于 2017-08-26 02:07:27
嗯,我终于找到了一些我认为可以接受的东西。如果有更好的答案出现,我会重新评估这个。
诀窍是重命名有问题的集合,然后用原来的名称重新创建一个新的、扩展的集,例如,假设问题中的集合和is:
/usr/bin/ipset --rename foo foo-old
/usr/bin/ipset --create foo ipmap 123.45.0.0/16
/usr/bin/ipset --add foo 123.45.67.5
/usr/bin/ipset --add foo 123.45.67.6
/usr/bin/ipset --add foo 123.45.66.5对我来说很管用。然后可以--save。在重新启动ipset时,迁移到新实例的引用如果不保存,可以安全地丢弃旧实例。
https://serverfault.com/questions/842585
复制相似问题