Замена экземпляра во время выполнения ipset

У меня есть работающий экземпляр служб 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 не перезагружает наборы со ссылками.

Теперь все это написано с помощью скриптов и make-файлов, чтобы как можно меньше отключать службы ipset и iptables при обновлении либо наборов, либо правил. Существуют сотни наборов и правил, которые сохраняются и перезагружаются. Могу ли я (и если да, то как) заменить набор для бега его увеличенной версией? Кажется, я могу сделать это, только выключив iptables и ipset, внеся изменения, а затем перезагрузив, но не могу восстановить его на лету; в противном случае он жалуется, что заданная спецификация неверна при попытке добавить host3 запись из другой подсети. (Могут быть другие хосты повсюду в 123.45.xx, добавленные позже.)

Это происходит на EL5 и EL6 под управлением ipset 4.5 или 6.11.

2 ответа

Решение

Ну, я нашел что-то, что я считаю приемлемым в конце концов. Если появятся лучшие ответы, я переоценил этот.

Хитрость заключается в том, чтобы переименовать проблемный набор, а затем заново создать новый, расширенный набор с исходным именем, например, предполагая наборы и IP-адреса в вопросе:

/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ссылки перенесены в новый экземпляр, и старый может быть безопасно удален, если не сохранен.

Вы должны создать новый набор с

ipset create foo-new ...

добавьте записи там и затем поменяйте местами два:

ipset swap foo-new foo

и уничтожить ненужный набор:

ipset destroy foo-new
Другие вопросы по тегам