首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换ipset的运行时实例

替换ipset的运行时实例
EN

Server Fault用户
提问于 2017-04-04 19:28:07
回答 2查看 1.6K关注 0票数 0

我有一个正在运行的iptables和ipset服务实例。其中一组具有与此类似的规范,其中包含20+引用:

代码语言:javascript
复制
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上。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2018-06-06 21:34:34

您应该创建新的集

代码语言:javascript
复制
ipset create foo-new ...

在那里添加条目,然后交换两个条目:

代码语言:javascript
复制
ipset swap foo-new foo

摧毁不再需要的那套:

代码语言:javascript
复制
ipset destroy foo-new
票数 4
EN

Server Fault用户

发布于 2017-08-26 02:07:27

嗯,我终于找到了一些我认为可以接受的东西。如果有更好的答案出现,我会重新评估这个。

诀窍是重命名有问题的集合,然后用原来的名称重新创建一个新的、扩展的集,例如,假设问题中的集合和is:

代码语言:javascript
复制
/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时,迁移到新实例的引用如果不保存,可以安全地丢弃旧实例。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/842585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档