При старте сети, правило snat ${IPV4ADDRESS} if out-iface ${NAME} чудесно применяется, при остановке получается ругань: Unloading rules for the "POSTROUTING" chain in the "nat" tableiptables v1.3.7: Bad IP address `' Try `iptables -h' or 'iptables --help' for more information. ERROR: /etc/net/scripts/config-fw: /sbin/iptables -t nat -D POSTROUTING -j SNAT --to-source ${IPV4ADDRESS} -o ${NAME} Хотя само правило удаляется...
Это по Андреевой части.
Гм. А что за тип интерфейса?
Как положено, TYPE=eth
Очень странно, вроде все проверял. Последняя версия etcnet, надеюсь? Посмотрю еще дома. Хотя все удаляло/добавляло. Может опять с regexp-ом для адреса что-то не так. ip addr ls покажи, plz
[root@host64 ~]# ip ad ls 2: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 4: nvidia: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:e0:4d:0e:6f:b5 brd ff:ff:ff:ff:ff:ff inet 172.23.0.1/24 brd 172.23.0.255 scope global nvidia 6: volia: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:e0:6f:ba:b7:c5 brd ff:ff:ff:ff:ff:ff inet 77.123.10.134/20 brd 77.123.15.255 scope global volia [root@host64 ~]# rpm -q etcnet etcnet-0.9.5-alt1
А hotplug случайно не используется? Похоже, что в момент остановки iptables адреса на интерфейсе уже нет. Я предусматривал эту ситуацию, но тестировал всё на нехотплаговском типе подключения. Может быть там и забыл что-то.
Интерфейс есть, я специально проверял... Интерфейс есть, а правила нет... Такое впечатление, что удаление вызывается дважды, один раз до удаления адреса, второй раз уже после... cat /etc/net/ifaces/volia/options TYPE=eth BOOTPROTO=dhcp ONBOOT=yes USE_HOTPLUG=no MODULE=cdc_ether DHCP_ARGS=" -R " NEVER_RMMOD=yes
Нда, пока ничего не понимаю. А можешь в fw/iptables/options вставить что-то вроде: echo "Here" Сколько раз выведет при остановке, столько раз и вызывает. Теоретически....Эх, пора уже дебаг внедрять :)
Я поступил круче, вставил echo -e "\n `ip ad ls` \n" К моменту вывода сообщения об ошибке адреса на интерфейсе уже нет.
Чудеса....В ifdown первыми идут остановки fw и qos, потом ip rules/routes, потом уже идет destroy интерфейса, то есть rmmod и т.п. У тебя там не шалит никакая из сильно умных утилит?
Какая из? Ничего специального я не настраивал! Судя по отладке, к моменту вызова удаления файрвола, адреса и ip routes уже нет(что не удивительно), но ip rules еще существуют... Кстати, только что поигрался еще и с ifup/ifdown, так вот ifdown вызывает удаление только один и слишком поздно, так что после комплекта ifdown volia ; ifup volia я получаю плюс одно правило... Если при выполнении этой комбинации адрес от dhcp изменится - я получу неработоспособную систему...
(In reply to comment #11) > Какая из? Ничего специального я не настраивал! > > Судя по отладке, к моменту вызова удаления файрвола, адреса и ip routes уже > нет(что не удивительно), но ip rules еще существуют... Да вот это как раз и удивительно. Без dhcp адрес в этот момент существует. А вот функция stop_dhcp_client в functions прибивает dhcp клиент. А не может ли именно он и удалять адрес? МОжешь проверить на статическом адреса, просто для теста? Если адрес назначает dhcp, то он и должен его убирать? Или все-таки убирать не он должен? > > Кстати, только что поигрался еще и с ifup/ifdown, так вот ifdown вызывает > удаление только один и слишком поздно, так что после комплекта ifdown volia ; > ifup volia я получаю плюс одно правило... Если при выполнении этой комбинации > адрес от dhcp изменится - я получу неработоспособную систему...
Конечно должен, достаточно сказать killall dhcpcd, чтобы адреса уже не было на интерфейсе!!! Проверил, если сделать BOOTPROTO=static (при том, что адрес назначен через dhcpcd), то перезапуск происходит без ругани. Я одного не понимаю - кто все таки удачно удаляет правило и как, dhcpcd к этому явно не причастен... Или это конечный iptables -F уже зачищает?
Кстати, тогда вся процедура опускания должна обрабатывать случай, когда адреса на интерфейсе уже нет. Мало ли по какой причине dhcp-клиент помер :)
Я боюсь заикнуться, но что происходит, если вообще есть реакция, если в ходе работы dhcpcd меняется адрес на интерфейсе... У меня бывает комп по пару месяцев не перегружается... Но если на старой квартире адрес у меня не менялся, то на новом месте у меня при каждой перезагрузке он прыгает и подозреваю, что теоретически может прыгнуть просто при очестке кэша и перезагрузке dhcpd на стороне сервера...
Нда, плохо. Слона-то я и не приметил. Опять придется под это костыль какой-то приделывать. А недавно, вроде бы, в etcnet изобрели еще что-то, кроме static и dhcp. Кажется, некое avahi. Там как работает добавление/удаление адресов? Нужно, похоже, это в виде хуков уже все реализовывать. В OS/2 это было популярно во всяком ПО :) Кто удаляет конечное правило - то же интересно. ifdown eth0 не должен, только при network stop, когда удаляется всё из iptables.
Кстати да, с avahi я тоже собираюсь поиграться, но пока руки не дошли:) Знаю только одно - в бубунте он(avahi) меня достал так, что я его пришиб... Хотя... Может я просто не умею его готовить... :)
Надо с Денисом посовещаться. Потому как это не только firewall касается, если использовать эту переменную. qos еще, например. Видимо, остановку fw/qos придется вставлять еще раньше прибивания dhcp.
Либо решайте, либо закрывайте.
у меня такая же проблема, сейчас (cert6). При service network start переменная ${IPV4ADDRESS} применяется.. при restart видна ругать.. [root@gate fw]# service network restart Computing interface groups: ... 3 interfaces found Processing /etc/net/vlantab: empty. Stopping group 1/realphys (2 interfaces) Stopping lan0: Stopping iptables for lan0 Unloading rules for the "PREROUTING" chain in the "nat" tableiptables: No chain/target/match by that name. ERROR: /etc/net/scripts/config-fw: /sbin/iptables -t nat -D PREROUTING -p tcp --destination $IPV4ADDRESS --dport 20132 -j DNAT --to-destination $IPV4ADDRESS:22 . ...OK
BOOTPROTO=static..
Не воспроизводится.