Есть шлюз на дебиане.
две сетевые - одна в локалку, вторая на провайдера + на ней подымается ррр интерфейс для доступа в интернет.
Скрипт с правилами для iptables запускается из rc.local.
Бывают случаи когда ррр интерфейс не подымается вообще или тормозит (например: авария на линии и т.п.),тогда скрипт становится с ошибками,т.к. в нем есть правила с несуществующим (на момент запуска) интерфейсом ррр. Соответственно есть проблемы с правилами фаервола.
Если поднятие тормозится,то прежде чем применить правила фаерволла делаю паузу и жду пока не подымется интерфейс(ну как бы типа ничего,подождем чуток),но если он не подымается вообще? Сервак висит и ждет. Поэтому решил сделать,чтобы каждый набор правил применялся при поднятии соответствующего интерфейса
в /etc/network/if-up.d
if [ "$IFACE" = eth0 ]; then
blah-blah-blah
fi
Но что делать,если интерфейс упал и снова поднялся, правила будут применены еще раз? Поэтому их сначала нужно удалить,но как удалить именно те правила которые относятся к конкретному интерфейсу? Думаю надо использовать пользовательские цепочки, тогда их можно будет целиком очищать, добавлять, но не понимаю как их правильно создавать и перенаправлять в них пакеты из стандартных.
Нужно, например, для ррр сделать две-три цепочки типа ppp_input, ppp_output, ppp_forward? А как в них перенаправлять пакеты?
Может я чешу левое ухо правой рукой,но пока ничего другого не придумал. Может кто подскажет?
iptables, интерфейс