замена исполняемого экземпляра 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.

0
задан 5 April 2017 в 16:01
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

и у меня это сработало. Затем можно - сохранить . При перезапуске ipset ,ссылки перенесены в новый экземпляр, а старые могут быть безопасно отброшены, если не сохранены.

0
ответ дан 4 December 2019 в 16:18

Вы должны создать НОВЫЙ набор, добавив туда записи

ipset create foo-new ...

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

ipset swap foo-new foo

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

ipset destroy foo-new
1
ответ дан 4 December 2019 в 16:18

Теги

Похожие вопросы