Получение нового IP-адреса после спячки
Модераторы: Warderer, Модераторы разделов
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Получение нового IP-адреса после спячки
Здравствуйте.
Имеется следующая проблема. Сеть настроена в /etc/network/interfaces на использование DHCP. Если перевести систему в спящий режим и возобновить работу, IP-адрес остаётся таким же, каким был до засыпания. И если во время пребывания системы в спящем режиме этот адрес получила другая, то после возобновления данной получается конфликт IP-адресов.
По идее, после возобновления системы клиент DHCP должен заново получить IP-адрес, но сам он этого не делает, а hook'а для этого в pm-utils не предусмотрено.
Поэтому обращаюсь к пользователям wheezy/sid с просьбой подтвердить, наблюдается ли такое с последними версиями этих пакетов. Если да, буду оформлять отчёт об ошибке и поделюсь соображениями, как её можно исправить.
Имеется следующая проблема. Сеть настроена в /etc/network/interfaces на использование DHCP. Если перевести систему в спящий режим и возобновить работу, IP-адрес остаётся таким же, каким был до засыпания. И если во время пребывания системы в спящем режиме этот адрес получила другая, то после возобновления данной получается конфликт IP-адресов.
По идее, после возобновления системы клиент DHCP должен заново получить IP-адрес, но сам он этого не делает, а hook'а для этого в pm-utils не предусмотрено.
Поэтому обращаюсь к пользователям wheezy/sid с просьбой подтвердить, наблюдается ли такое с последними версиями этих пакетов. Если да, буду оформлять отчёт об ошибке и поделюсь соображениями, как её можно исправить.
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Получение нового IP-адреса после спячки
man из мандривы, но, думаю, это не существенно:
вот в /etc/pm/sleep.d и создаётся hook нужного содержания·
p.s. может быть под словами «а hook'а для этого в pm-utils не предусмотрено» подразумевается, что в каталоге должно что-то быть?
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-адреса после спячки
Да. Но там ничего для этого нет. Значит, надо стыритьнаписать и отправить сопровождающим пакета pm-utils.
Очень похоже, что в некоторых дистрибутивах: Fedora, Mandriva, openSUSE... - hook для этого есть (там среди оных фигурируют скрипты с именем вида "что-то_тамnetwork") - посмотрю вечером.
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Получение нового IP-адреса после спячки
$ 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-адреса после спячки
/etc/pm предназначен для пользовательских (не входящих в состав пакета pm-utils) hook'ов. Нужно смотреть в /usr/lib/pm-utils/sleep.d.
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Получение нового IP-адреса после спячки
Посмотрел.
- 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-адреса после спячки
Код: Выделить всё
/sbin/ifdown $iface
/sbin/ifdown $ifaceне логичней ли?
Код: Выделить всё
dhclient $ifaceОбезьянка видит - Обезьянка делает...
-
Bizdelnick
- Модератор
- Сообщения: 21416
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение нового IP-адреса после спячки
Почему именно dhclient? Он не во всех случаях работает как надо. И dhcpcd - тоже.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
Gineaser
- Сообщения: 157
- Статус: Evrashka
- ОС: Arch Linux
Re: Получение нового IP-адреса после спячки
Почему именно dhclient? Он не во всех случаях работает как надо. И dhcpcd - тоже.
Это как так: "Не во всех случаях и не так как надо"? Если я правильно знаю все сводится к выполнению скрипта с применением утилиты ip.
ifup/ifdown считывает настройки с /etc/network/interface который в свою очередь выполняет скрипт на основе ifconfig
Было бы интересно узнать на примерах какие проблемы появляются у dhclient при принудительной обновлении адреса?
Обезьянка видит - Обезьянка делает...
-
broom
- Бывший модератор
- Сообщения: 1629
- Статус: мизантроп.ка
- ОС: Gentoo
Re: Получение нового IP-адреса после спячки
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-адреса после спячки
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
Gineaser
- Сообщения: 157
- Статус: Evrashka
- ОС: Arch Linux
Re: Получение нового IP-адреса после спячки
если честно вообще бесполезный пруф. Не понял что в нем объясняет что пользоваться командой dhclient eth0 не кошерно и лучше деактивировать и активировать интерфейсы для получения/обновления адреса?
Да и даже если прочитать ссылку там проблема в криворукости автора/косяка в системе, что демон dhcpcd не был включен в автозагрузку...
Да и даже если прочитать ссылку там проблема в криворукости автора/косяка в системе, что демон dhcpcd не был включен в автозагрузку...
Обезьянка видит - Обезьянка делает...
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Получение нового IP-адреса после спячки
Объясняю на пальцах: после запуска 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 wlan0UNIX 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.
The more you believe you don't do mistakes, the more bugs are in your code.
-
Gineaser
- Сообщения: 157
- Статус: Evrashka
- ОС: Arch Linux
Re: Получение нового IP-адреса после спячки
SLEDopit писал(а): ↑14.02.2012 14:50Объясняю на пальцах: после запуска dhclient остаётся работать фоновым процессом. Когда их два три в системе работает, Вы, скорее всего, особо ничего и не заметите. А когда их будет штук 20-30, да ещё и запущенные при разных сетях, будет наблюдаться весьма нестандартное поведение сети. Работать будет невозможно.
Я просто на днях наткнулся на это, потому что тоже считал весьма безобидным запуск команды dhclient. У меня было 30 процессов и один переписывал настройки другого. После подключения к своей точке доступа секунд через 5 у меня пропадал шлюз, а потом появлялся на интерфейсе адрес из другой подсети. Еле разобрался в чём дело.
зы:
хм, впервые такое вижу, завтра проверю на работе.
Обезьянка видит - Обезьянка делает...
-
Bizdelnick
- Модератор
- Сообщения: 21416
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение нового IP-адреса после спячки
Я не говорил, что это некошерно. Я говорил, что это не является универсальным решением.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Получение нового IP-адреса после спячки
Увы, но это не универсальный скрипт. Он работает у вас, но совсем не будет работать у меня: в моём /etc/network/interfaces есть запись:
Код: Выделить всё
allow-hotplug work
iface work inet dhcp
wireless-essid work_wifiКод: Выделить всё
ifup wlan0=workUNIX 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.
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-адреса после спячки
Gineaser писал(а): ↑14.02.2012 02:49Код: Выделить всё
/sbin/ifdown $iface /sbin/ifdown $iface
не логичней ли?Код: Выделить всё
dhclient $iface
В Debian не один клиент DHCP.
broom писал(а): ↑14.02.2012 11:17
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Увы, но это не универсальный скрипт. Он работает у вас, но совсем не будет работать у меня: в моём /etc/network/interfaces есть запись:
Относится она к интерфейсу wlan0 и поднимается какКод: Выделить всё
allow-hotplug work iface work inet dhcp wireless-essid work_wifiА ваш скрипт отработает как просто ifup wlan0 и в результате я просто не подключусь к сети вообще.Код: Выделить всё
ifup wlan0=work
Если при поднятии интерфейса в /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 соответственно. Но как это сработает в случае нескольких работающих экземпляров, непонятно.