Bug 13824

Summary: Bad error message with ${IPV4ADDRESS} use
Product: Sisyphus Reporter: Eugene Ostapets <eostapets>
Component: etcnetAssignee: Andrew Kornilov <hiddenman>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: ldv, mrdrew, pv, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   

Description Eugene Ostapets 2007-12-28 22:39:23 MSK
При старте сети, правило 
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}

Хотя само правило удаляется...
Comment 1 Denis Ovsienko 2007-12-28 23:53:31 MSK
Это по Андреевой части.
Comment 2 Andrew Kornilov 2007-12-29 00:14:55 MSK
Гм. А что за тип интерфейса?
Comment 3 Eugene Ostapets 2007-12-29 17:34:43 MSK
Как положено,
TYPE=eth
Comment 4 Andrew Kornilov 2007-12-29 17:39:43 MSK
Очень странно, вроде все проверял. Последняя версия etcnet, надеюсь?
Посмотрю еще дома. Хотя все удаляло/добавляло. Может опять с regexp-ом для
адреса что-то не так. ip addr ls покажи, plz
Comment 5 Eugene Ostapets 2007-12-29 17:44:56 MSK
[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
Comment 6 Andrew Kornilov 2007-12-29 17:53:01 MSK
А hotplug случайно не используется? Похоже, что в момент остановки iptables
адреса на интерфейсе уже нет. Я предусматривал эту ситуацию, но тестировал всё
на нехотплаговском типе подключения. Может быть там и забыл что-то.
Comment 7 Eugene Ostapets 2007-12-29 18:02:44 MSK
Интерфейс есть, я специально проверял... Интерфейс есть, а правила нет... Такое
впечатление, что удаление вызывается дважды, один раз до удаления адреса, второй
раз уже после...

cat /etc/net/ifaces/volia/options
TYPE=eth
BOOTPROTO=dhcp
ONBOOT=yes
USE_HOTPLUG=no
MODULE=cdc_ether
DHCP_ARGS=" -R "
NEVER_RMMOD=yes
Comment 8 Andrew Kornilov 2007-12-30 00:09:02 MSK
Нда, пока ничего не понимаю. А можешь в fw/iptables/options вставить что-то вроде:
echo "Here"
Сколько раз выведет при остановке, столько раз и вызывает. Теоретически....Эх,
пора уже дебаг внедрять :)
Comment 9 Eugene Ostapets 2007-12-30 01:03:26 MSK
Я поступил круче, вставил echo -e "\n `ip ad ls` \n"

К моменту вывода сообщения об ошибке адреса на интерфейсе уже нет. 
Comment 10 Andrew Kornilov 2007-12-30 01:07:55 MSK
Чудеса....В ifdown первыми идут остановки fw и qos, потом ip rules/routes, потом
уже идет destroy интерфейса, то есть rmmod и т.п. У тебя там не шалит никакая из
сильно умных утилит? 
Comment 11 Eugene Ostapets 2007-12-30 12:22:09 MSK
Какая из? Ничего специального я не настраивал! 

Судя по отладке, к моменту вызова удаления файрвола, адреса и ip routes уже
нет(что не удивительно), но ip rules еще существуют...

Кстати, только что поигрался еще и с ifup/ifdown, так вот ifdown вызывает
удаление только один и слишком поздно, так что после комплекта ifdown volia ;
ifup volia я получаю плюс одно правило... Если при выполнении этой комбинации
адрес от dhcp изменится - я получу неработоспособную систему... 
Comment 12 Andrew Kornilov 2007-12-30 22:20:16 MSK
(In reply to comment #11)
> Какая из? Ничего специального я не настраивал! 
> 
> Судя по отладке, к моменту вызова удаления файрвола, адреса и ip routes уже
> нет(что не удивительно), но ip rules еще существуют...
Да вот это как раз и удивительно. Без dhcp адрес в этот момент существует. А вот 
функция stop_dhcp_client в functions прибивает dhcp клиент. А не может ли именно
он и удалять адрес? МОжешь проверить на статическом адреса, просто для теста?
Если адрес назначает dhcp, то он и должен его убирать? Или все-таки убирать не
он должен?

> 
> Кстати, только что поигрался еще и с ifup/ifdown, так вот ifdown вызывает
> удаление только один и слишком поздно, так что после комплекта ifdown volia ;
> ifup volia я получаю плюс одно правило... Если при выполнении этой комбинации
> адрес от dhcp изменится - я получу неработоспособную систему... 

Comment 13 Eugene Ostapets 2007-12-30 23:27:24 MSK
Конечно должен, достаточно сказать killall dhcpcd, чтобы адреса уже не было на
интерфейсе!!!
Проверил, если сделать BOOTPROTO=static (при том, что адрес назначен через
dhcpcd), то перезапуск происходит без ругани. Я одного не понимаю - кто все таки
удачно удаляет правило и как, dhcpcd к этому явно не причастен... Или это
конечный iptables -F уже зачищает?
Comment 14 Mikhail Gusarov 2007-12-30 23:33:02 MSK
Кстати, тогда вся процедура опускания должна обрабатывать случай, когда адреса 
на интерфейсе уже нет. Мало ли по какой причине dhcp-клиент помер :)
Comment 15 Eugene Ostapets 2007-12-30 23:44:03 MSK
Я боюсь заикнуться, но что происходит, если вообще есть реакция, если в ходе
работы dhcpcd меняется адрес на интерфейсе... У меня бывает комп по пару месяцев
не перегружается... Но если на старой квартире адрес у меня не менялся, то на
новом месте у меня при каждой перезагрузке он прыгает и подозреваю, что
теоретически может прыгнуть просто при очестке кэша и перезагрузке dhcpd на
стороне сервера... 
Comment 16 Andrew Kornilov 2007-12-31 02:36:56 MSK
Нда, плохо. Слона-то я и не приметил. Опять придется под это костыль какой-то
приделывать. А недавно, вроде бы, в etcnet изобрели еще что-то, кроме static и
dhcp. Кажется, некое avahi. Там как работает добавление/удаление адресов? Нужно,
похоже, это в виде хуков уже все реализовывать. В OS/2 это было популярно во
всяком ПО :)
Кто удаляет конечное правило - то же интересно. ifdown eth0 не должен, только
при network stop, когда удаляется всё из iptables.
Comment 17 Eugene Ostapets 2007-12-31 14:16:17 MSK
Кстати да, с avahi я тоже собираюсь поиграться, но пока руки не дошли:) Знаю
только одно - в бубунте он(avahi) меня достал так, что я его пришиб... Хотя...
Может я просто не умею его готовить... :)
Comment 18 Andrew Kornilov 2008-01-01 04:02:07 MSK
Надо с Денисом посовещаться. Потому как это не только firewall касается, если
использовать эту переменную. qos еще, например. Видимо, остановку fw/qos
придется вставлять еще раньше прибивания dhcp. 
Comment 19 Denis Ovsienko 2009-06-16 13:18:30 MSD
Либо решайте, либо закрывайте.
Comment 20 Pavel Vainerman 2014-12-23 14:50:35 MSK
у меня такая же проблема, сейчас (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
Comment 21 Pavel Vainerman 2014-12-23 14:51:53 MSK
BOOTPROTO=static..
Comment 22 mrdrew@altlinux.org 2019-03-06 17:55:48 MSK
Не воспроизводится.