Получение нового IP-адреса после спячки

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Получение нового IP-адреса после спячки

Сообщение Rootlexx »

Здравствуйте.
Имеется следующая проблема. Сеть настроена в /etc/network/interfaces на использование DHCP. Если перевести систему в спящий режим и возобновить работу, IP-адрес остаётся таким же, каким был до засыпания. И если во время пребывания системы в спящем режиме этот адрес получила другая, то после возобновления данной получается конфликт IP-адресов.
По идее, после возобновления системы клиент DHCP должен заново получить IP-адрес, но сам он этого не делает, а hook'а для этого в pm-utils не предусмотрено.
Поэтому обращаюсь к пользователям wheezy/sid с просьбой подтвердить, наблюдается ли такое с последними версиями этих пакетов. Если да, буду оформлять отчёт об ошибке и поделюсь соображениями, как её можно исправить.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Получение нового IP-адреса после спячки

Сообщение sash-kan »

man из мандривы, но, думаю, это не существенно:

Shell

$ man -P 'grep -B 1 -A 5 "called hooks"' pm-action /etc/pm/sleep.d, /usr/lib/pm-utils/sleep.d Programs in these directories (called hooks) are combined and executed in C sort order before suspend and hibernate with as argument ґsuspendґ or ґhibernateґ. Afterwards they are called in reverse order with argument ґresumeґ and ґthawґ respectively. If both directories contain a similar named file, the one in /etc/pm/sleep.d will get preference. It is possible to disable a hook in the distribution directory by putting a non-executable file in /etc/pm/sleep.d, or by adding it to the HOOK_BLACKLIST configuration variable.


вот в /etc/pm/sleep.d и создаётся hook нужного содержания·

p.s. может быть под словами «а hook'а для этого в pm-utils не предусмотрено» подразумевается, что в каталоге должно что-то быть?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Rootlexx »

sash-kan писал(а):
13.02.2012 15:32
p.s. может быть под словами «а hook'а для этого в pm-utils не предусмотрено» подразумевается, что в каталоге должно что-то быть?

Да. Но там ничего для этого нет. Значит, надо стыритьнаписать и отправить сопровождающим пакета pm-utils.
Очень похоже, что в некоторых дистрибутивах: Fedora, Mandriva, openSUSE... - hook для этого есть (там среди оных фигурируют скрипты с именем вида "что-то_тамnetwork") - посмотрю вечером.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Получение нового IP-адреса после спячки

Сообщение sash-kan »

Rootlexx писал(а):
13.02.2012 16:42
в некоторых дистрибутивах: … Mandriva …
$ cat /etc/release
Mandriva Linux release 2012.0 (Cooker) for i586
$ rpm -qf /etc/pm
pm-utils-1.4.1-3-mdv2011.0.i586
$ find /etc/pm/ -type f | wc -l
0

upd. скрипты, конечно, бывают в этом каталоге, но лишь в нескольких [особых] пакетах:
$ apt-file search /etc/pm/
aiccu: /etc/pm/sleep.d/60aiccu
ifplugd: /etc/pm/sleep.d/74ifplugd
oss4-base: /etc/pm/sleep.d/30oss4-pm
unattended-upgrades: /etc/pm/sleep.d/10_unattended-upgrades-hibernate
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Rootlexx »

/etc/pm предназначен для пользовательских (не входящих в состав пакета pm-utils) hook'ов. Нужно смотреть в /usr/lib/pm-utils/sleep.d.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Rootlexx »

Rootlexx писал(а):
13.02.2012 16:42
Очень похоже, что в некоторых дистрибутивах: Fedora, Mandriva, openSUSE... - hook для этого есть (там среди оных фигурируют скрипты с именем вида "что-то_тамnetwork") - посмотрю вечером.

Посмотрел.
  • Fedora: hook отсутствует.
  • Mandriva: hook присутствует под именем 10network. Просто перезапускает все сетевые интерфейсы без разбора - не лучший подход.
  • openSUSE: hook присутствует под именем 50rcnetwork. Импортирует другие скрипты в больших количествах. Насколько понял, перезапускаются лишь интерфейсы, использующие DHCP.

Набросал скрипт, при возобновлении системы перезапускающий поднятые интерфейсы, использующие DHCP:

Код: Выделить всё

#!/bin/sh

if [ "$1" = resume -o "$1" = thaw ]; then
  grep ^iface /etc/network/interfaces | while read dummy iface addr meth; do
    if [ $meth = dhcp ] && grep -q =$iface$ /etc/network/run/ifstate; then
      /sbin/ifdown $iface
      /sbin/ifup $iface
    fi
  done
fi
Спасибо сказали:
Аватара пользователя
Gineaser
Сообщения: 157
Статус: Evrashka
ОС: Arch Linux

Re: Получение нового IP-адреса после спячки

Сообщение Gineaser »

Код: Выделить всё

/sbin/ifdown $iface
/sbin/ifdown $iface

не логичней ли?

Код: Выделить всё

dhclient $iface
Обезьянка видит - Обезьянка делает...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21416
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Bizdelnick »

Gineaser писал(а):
14.02.2012 02:49
не логичней ли?

Код: Выделить всё

dhclient $iface

Почему именно dhclient? Он не во всех случаях работает как надо. И dhcpcd - тоже.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Gineaser
Сообщения: 157
Статус: Evrashka
ОС: Arch Linux

Re: Получение нового IP-адреса после спячки

Сообщение Gineaser »

Почему именно dhclient? Он не во всех случаях работает как надо. И dhcpcd - тоже.

Это как так: "Не во всех случаях и не так как надо"? Если я правильно знаю все сводится к выполнению скрипта с применением утилиты ip.
ifup/ifdown считывает настройки с /etc/network/interface который в свою очередь выполняет скрипт на основе ifconfig

Было бы интересно узнать на примерах какие проблемы появляются у dhclient при принудительной обновлении адреса?
Обезьянка видит - Обезьянка делает...
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: Получение нового IP-адреса после спячки

Сообщение broom »

Rootlexx писал(а):
14.02.2012 00:09
Fedora: hook отсутствует.

Fedora 14:
/usr/lib/pm-utils/sleep.d/56dhclient

Код: Выделить всё

#!/bin/sh
# If we are running dhclient, shutdown running instances cleanly and
# bring them back up on resume.
...
but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21416
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Bizdelnick »

Gineaser писал(а):
14.02.2012 11:10
Было бы интересно узнать на примерах какие проблемы появляются у dhclient при принудительной обновлении адреса?

http://forum.edumandriva.ru/forum/viewtopi...?f=25&t=821
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Gineaser
Сообщения: 157
Статус: Evrashka
ОС: Arch Linux

Re: Получение нового IP-адреса после спячки

Сообщение Gineaser »

если честно вообще бесполезный пруф. Не понял что в нем объясняет что пользоваться командой dhclient eth0 не кошерно и лучше деактивировать и активировать интерфейсы для получения/обновления адреса?

Да и даже если прочитать ссылку там проблема в криворукости автора/косяка в системе, что демон dhcpcd не был включен в автозагрузку...
Обезьянка видит - Обезьянка делает...
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Получение нового IP-адреса после спячки

Сообщение SLEDopit »

Gineaser писал(а):
14.02.2012 14:39
Не понял что в нем объясняет что пользоваться командой dhclient eth0 не кошерно и лучше деактивировать и активировать интерфейсы для получения адреса?
Объясняю на пальцах: после запуска dhclient остаётся работать фоновым процессом. Когда их два три в системе работает, Вы, скорее всего, особо ничего и не заметите. А когда их будет штук 20-30, да ещё и запущенные при разных сетях, будет наблюдаться весьма нестандартное поведение сети. Работать будет невозможно.
Я просто на днях наткнулся на это, потому что тоже считал весьма безобидным запуск команды dhclient. У меня было 30 процессов и один переписывал настройки другого. После подключения к своей точке доступа секунд через 5 у меня пропадал шлюз, а потом появлялся на интерфейсе адрес из другой подсети. Еле разобрался в чём дело.
зы:

Код: Выделить всё

 $ ps -ef | grep dhcl
root     29933     1  0 Feb13 ?        00:00:00 dhclient -v -pf /var/run/dhclient.wlan0.pid -lf /var/lib/dhcp/dhclient.wlan0.leases wlan0

 # dhclient wlan0

 $ ps -ef | grep dhcli
root     27138     1  0 14:46 ?        00:00:00 dhclient wlan0
root     29933     1  0 Feb13 ?        00:00:00 dhclient -v -pf /var/run/dhclient.wlan0.pid -lf /var/lib/dhcp/dhclient.wlan0.leases wlan0
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Gineaser
Сообщения: 157
Статус: Evrashka
ОС: Arch Linux

Re: Получение нового IP-адреса после спячки

Сообщение Gineaser »

SLEDopit писал(а):
14.02.2012 14:50
Объясняю на пальцах: после запуска dhclient остаётся работать фоновым процессом. Когда их два три в системе работает, Вы, скорее всего, особо ничего и не заметите. А когда их будет штук 20-30, да ещё и запущенные при разных сетях, будет наблюдаться весьма нестандартное поведение сети. Работать будет невозможно.
Я просто на днях наткнулся на это, потому что тоже считал весьма безобидным запуск команды dhclient. У меня было 30 процессов и один переписывал настройки другого. После подключения к своей точке доступа секунд через 5 у меня пропадал шлюз, а потом появлялся на интерфейсе адрес из другой подсети. Еле разобрался в чём дело.
зы:

хм, впервые такое вижу, завтра проверю на работе.
Обезьянка видит - Обезьянка делает...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21416
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Bizdelnick »

Gineaser писал(а):
14.02.2012 14:39
Не понял что в нем объясняет что пользоваться командой dhclient eth0 не кошерно

Я не говорил, что это некошерно. Я говорил, что это не является универсальным решением.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Получение нового IP-адреса после спячки

Сообщение SLEDopit »

Rootlexx писал(а):
14.02.2012 00:09
Набросал скрипт, при возобновлении системы перезапускающий поднятые интерфейсы, использующие DHCP:
Увы, но это не универсальный скрипт. Он работает у вас, но совсем не будет работать у меня: в моём /etc/network/interfaces есть запись:

Код: Выделить всё

allow-hotplug work
iface work inet dhcp
        wireless-essid work_wifi
Относится она к интерфейсу wlan0 и поднимается как

Код: Выделить всё

ifup wlan0=work
А ваш скрипт отработает как просто ifup wlan0 и в результате я просто не подключусь к сети вообще.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Получение нового IP-адреса после спячки

Сообщение Rootlexx »

Gineaser писал(а):
14.02.2012 02:49

Код: Выделить всё

/sbin/ifdown $iface
/sbin/ifdown $iface

не логичней ли?

Код: Выделить всё

dhclient $iface

В Debian не один клиент DHCP.
broom писал(а):
14.02.2012 11:17
Rootlexx писал(а):
14.02.2012 00:09
Fedora: hook отсутствует.

Fedora 14:
/usr/lib/pm-utils/sleep.d/56dhclient

Код: Выделить всё

#!/bin/sh
# If we are running dhclient, shutdown running instances cleanly and
# bring them back up on resume.
...


Ясно. Я смотрел в пакете pm-utils, а он, оказывается, в пакете dhclient (логично).
SLEDopit писал(а):
14.02.2012 15:21
Rootlexx писал(а):
14.02.2012 00:09
Набросал скрипт, при возобновлении системы перезапускающий поднятые интерфейсы, использующие DHCP:
Увы, но это не универсальный скрипт. Он работает у вас, но совсем не будет работать у меня: в моём /etc/network/interfaces есть запись:

Код: Выделить всё

allow-hotplug work
iface work inet dhcp
        wireless-essid work_wifi
Относится она к интерфейсу wlan0 и поднимается как

Код: Выделить всё

ifup wlan0=work
А ваш скрипт отработает как просто ifup wlan0 и в результате я просто не подключусь к сети вообще.

Если при поднятии интерфейса в /etc/network/run/ifstate записывается именно строка "wlan0=work", то это просто исправить:

Код: Выделить всё

#!/bin/sh

if [ "$1" = resume -o "$1" = thaw ]; then
  grep ^iface /etc/network/interfaces | while read dummy iface addr meth; do
    if [ $meth = dhcp ]; then
      grep =$iface$ /etc/network/run/ifstate | while read target; do
        /sbin/ifdown $target
        /sbin/ifup $target
      done
    fi
  done
fi


Вообще, теоретически существуют способы управлять уже запущенными экземплярами каждого из доступных клиентов: dhclient'ом можно управлять с помощью omshell, а dhcpcd и pump имеют опции для переполучения адреса: -n и -R соответственно. Но как это сработает в случае нескольких работающих экземпляров, непонятно.
Спасибо сказали: