РЕШЕНО: Не всегда стартует isc-dhcp-server

Автор vladimir_ar, 19 августа 2012, 11:40:23

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

vladimir_ar

Настроил шлюз между двумя сетевыми (eth3 - смотрит на интернет, eth4 - внутрення сеть), установил isc-dhcp-server, прописал правила ip-tables. Конфиги ниже. Но такая проблема - не всегда стартует isc-dhcp-server, вернее, не отрабатывается запуск dhcpd - после загрузки, если не поднялся dhcp, вручную запускаю
# /etc/init.d/isc-dhcp-server restart
и в строке остановки dhcpd получаю ошибку, что он не запущен, а уже второй строкой идет запуск dhcpd и сервер поднимается и идет раздача адресов и внутренняя сеть работает.

dhclient.conf
Открыть содержимое (спойлер)

send dhcp-client-identifier 1:50:E5:49:5C:63:5D;

request subnet-mask, broadcast-address, time-offset, routers,
   domain-name, domain-name-servers, domain-search, host-name,
   netbios-name-servers, netbios-scope, interface-mtu;
[свернуть]

dhcpd.conf
Открыть содержимое (спойлер)

ddns-update-style none;

INTERFACES="eth4";

# option domain-name 192.168.239.1;
option domain-name-servers 192.168.239.1, 8.8.8.8, 8.8.4.4;
option ntp-servers 192.168.239.1;

default-lease-time 43200;
max-lease-time 86400;

authoritative;

log-facility local7;

subnet 192.168.239.0 netmask 255.255.255.0 {
range 192.168.239.10 192.168.239.20;
option routers 192.168.239.1;
}
[свернуть]

interfaces
Открыть содержимое (спойлер)

auto lo
iface lo inet loopback
pre-up echo "1" > /proc/sys/net/ipv4/ip_forward  # Включаем форвардинг пакетов
pre-up iptables-restore < /etc/ip_rulles.lst     # Загружаем правила
post-down iptables-save > /etc/ip_rulles.lst     # Сохраняем правила

auto eth3
allow-hotplug eth3
iface eth3 inet dhcp
pre-up ip link set eth3 address 50:e5:49:5c:63:5d

auto eth4
allow-hotplug eth4
iface eth4 inet static
address 192.168.239.1
netmask 255.255.255.0
network 192.168.239.0
broadcast 192.168.239.255
gateway 192.168.239.1
pre-up ip link set eth4 address 50:e5:49:5c:63:50
[свернуть]

ip_rules.lst
Открыть содержимое (спойлер)

# Generated by iptables-save v1.4.14 on Sat Aug 11 23:23:45 2012
*nat
:PREROUTING ACCEPT [1511:93694]
:INPUT ACCEPT [22:1652]
:OUTPUT ACCEPT [816:57935]
:POSTROUTING ACCEPT [816:57935]
-A POSTROUTING -s 192.168.239.0/24 -o eth3 -j MASQUERADE
COMMIT
# Completed on Sat Aug 11 23:23:45 2012
# Generated by iptables-save v1.4.14 on Sat Aug 11 23:23:45 2012
*filter
:INPUT DROP [1485:87815]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth4 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -i eth3 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth3 -p tcp -m multiport --ports 50100:51100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth3 -p tcp -m tcp --dport 27010:27030 -j ACCEPT
-A INPUT -i eth3 -p udp -m udp --dport 27010:27030 -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -i eth4 -o eth3 -j ACCEPT
-A FORWARD -i eth3 -o eth4 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth4 -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
COMMIT
# Completed on Sat Aug 11 23:23:45 2012
# Generated by iptables-save v1.4.14 on Sat Aug 11 23:23:45 2012
*mangle
:PREROUTING ACCEPT [101266:131943977]
:INPUT ACCEPT [101264:131943363]
:FORWARD ACCEPT [2:614]
:OUTPUT ACCEPT [59198:21862386]
:POSTROUTING ACCEPT [59200:21863000]
COMMIT
# Completed on Sat Aug 11 23:23:45 2012
[свернуть]

Не могу понять, что происходит. То ли где-то гонка интерфейсов? Раньше было практически при каждой загрузке, причем не всегда еще и интернет поднимался. И при выполнении
# /etc/init.d/networking restart
валились все интерфейсы (сетевые).
Понаблюдал за этим делом при ручных запусках - пришел к выводу, что при старте сначала интерфейса eth4 (внутренняя сеть), а потом eth3 - стартует нормально. Поэтому в interfaces поменял местами секции инициализации интерфейсов - теперь он выглядит так:

Открыть содержимое (спойлер)

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback
pre-up echo "1" > /proc/sys/net/ipv4/ip_forward  # Включаем форвардинг пакетов
pre-up iptables-restore < /etc/ip_rulles.lst     # Загружаем правила
post-down iptables-save > /etc/ip_rulles.lst     # Сохраняем правила

auto eth4
allow-hotplug eth4
iface eth4 inet static
address 192.168.239.1
netmask 255.255.255.0
network 192.168.239.0
broadcast 192.168.239.255
gateway 192.168.239.1
pre-up ip link set eth4 address 50:e5:49:5c:63:50

# The primary network interface
auto eth3
allow-hotplug eth3
iface eth3 inet dhcp
pre-up ip link set eth3 address 50:e5:49:5c:63:5d
[свернуть]
Теперь все стартует нормально, /etc/init.d/networking restart отрабатывает без проблем, только иногда не стартует при загрузке сервер dhcp на внутреннюю сеть.
И еще - может сюда тоже привязано - при выходе из sleep-а dhcpd отсутствует - сервера нет. При запуске /etc/init.d/isc-dhcp-server restart в строке остановки dhcpd получаю ошибку, что он не запущен. Вылечил, прописав в конфиге в pm (секция sleep.d) при выходе строку /etc/init.d/isc-dhcp-server start. Но по логике то не должно этого быть - состояние сервера и демон dhcpd должен остаться в памяти?
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

xbsd

столько всего запостили, а по сути вопроса ничего толком нет. :) показывайте, что у вас в /var/log/dhcpd.log?
Цитата: vladimir_ar от 19 августа 2012, 11:40:23если не поднялся dhcp, вручную запускаю
Код: [Выделить]
# /etc/init.d/isc-dhcp-server restart
и в строке остановки dhcpd получаю ошибку, что он не запущен
ну все правильно. а по вашему как должно быть?
и это, а что с интерфейсами eth0 - eth2

vladimir_ar

Цитата: xbsd от 19 августа 2012, 12:59:42ну все правильно. а по вашему как должно быть?
Это то понятно - он не запущен. Почему не запускается иногда? isc-dhcp-server в автозапуске, а вот dhcpd не всегда стартует.
Цитата: xbsd от 19 августа 2012, 12:59:42и это, а что с интерфейсами eth0 - eth2
А хз. Скорее всего, когда настройка интерфейсов делалась через Network Manager и создавалось несколько вариантов соединения на одну и туже карту, он их нумеровал по очереди 0, 1, 2... Т.е. сейчас через ifconfig карты отображаются как eth3, eth4, других нет (кроме lo).
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

Malaheenee

vladimir_ar, а разве секции auto eth4 и allow-hotplug ath4 не взаимоисключающие? Причем последняя у нас в свое время глючила, напрочь отказываясь стартовать после подключения кабеля, несмотря на название...

З.Ы. И потрите, пожалуйста, комментарии в листингах - читать очень сложно :)
Все мы где-то, когда-то и в чем-то были новичками.

vladimir_ar

Лишние коменты потер.
А касательно allow-hotplug... Может так совпадало и я еще что-то параллельно цеплял, но когда рэмил - у меня вовсе ничего не поднималось. Но это могло быть совпадением с тем, когда не по этим причинам (т.е. не по причине двух исключающих параметров). Потом, когда более-менее стабильно заработало - не трогал. С работы домой попаду - проверю, может остаточные сбои уже именно из-за этого.
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

xbsd

Цитата: vladimir_ar от 19 августа 2012, 14:57:19Почему не запускается иногда?
потому что надо смотреть dhcpd.log
Цитата: vladimir_ar от 19 августа 2012, 14:57:19А хз. Скорее всего, когда настройка интерфейсов делалась через Network Manager и создавалось несколько вариантов соединения на одну и туже карту, он их нумеровал по очереди 0, 1, 2... Т.е. сейчас через ifconfig карты отображаются как eth3, eth4, других нет (кроме lo).
для диагностики лучше использовать iproute2, а не ifconfig. Почитал тут handbook...
Many computers have multiple network cards (sometimes two wired interfaces and a wifi interface), and with hotplug support on most bus types, the 2.6 kernel no longer guarantees fixed naming of network interfaces. But a user who wants to configure their network in /etc/network/interfaces needs a fixed name!

It would be difficult to ask every user to create their own udev rules to address this problem. This is why udev was configured in a rather peculiar manner; on first boot (and, more generally, each time that a new network card appears) it uses the name of the network interface and its MAC address to create new rules that will reassign the same name on subsequent boots. These rules are stored in /etc/udev/rules.d/70-persistent-net.rules.

This mechanism has some side effects that you should know about. Let's consider the case of computer that has only one PCI network card. The network interface is named eth0, logically. Now say the card breaks down, and the administrator replaces it; the new card will have a new MAC address. Since the old card was assigned the name, eth0, the new one will be assigned eth1, even though the eth0 card is gone for good (and the network will not be functional because /etc/network/interfaces likely configures an eth0 interface). In this case, it is enough to simply delete the /etc/udev/rules.d/70-persistent-net.rules file before rebooting the computer. The new card will then be given the expected eth0 name.

т.о. начать поиск того, почему сетевые интерфейсы нумеруются хз как, думаю надо начинать именно из файла /etc/udev/rules.d/70-persistent-net.rules. Показывайте (:

vladimir_ar

xbsd, спасибо. С нумерацией карт понятно теперь - система сменила мать - eth1, потом была установлена вторая карта (как оказалось, со сгоревшейвыходной частью) - eth2, потом рабочая, ныне eth3, а в результате смены МАС-а встроенная, бывшая eth2, стала eth4. Так что паники никакой нет, все объяснимо.

Malaheenee, убрал секцию allow-hotplug - перегрузился раз - все отлично. И на передергивание кабеля реагирует нормально - раздача нета продолжается. Буду наблюдать. Интересует только - из
/etc/pm/sleep.d/10_unattended-upgrades-hibernate
убрать строку /etc/init.d/isc-dhcp-server start или нет?

10_unattended-upgrades-hibernate
Открыть содержимое (спойлер)

PATH=/sbin:/usr/sbin:/bin:/usr/bin

if [ ! -x /usr/share/unattended-upgrades/unattended-upgrade-shutdown ]; then
   exit 0
fi

SELF=unattended-upgrades-hibernate
COMMAND=
IFPLUGD_IFACE=

case "${1}" in
        hibernate)
            python /usr/share/unattended-upgrades/unattended-upgrade-shutdown       
                ;;
        resume|thaw)
      # nothing
      /etc/init.d/isc-dhcp-server start
                ;;
esac
[свернуть]
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

Malaheenee

vladimir_ar??? Попробуйте убрать, если это Вы ее туда вписали.
Все мы где-то, когда-то и в чем-то были новичками.

vladimir_ar

Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

vladimir_ar

В общем, проблема осталась. Случайным образом не стартует при загрузке системы, также случайным образом вываливается (в списке процессов пропадает dhcpd) при выходе из suspend (ждущий). Перерыл все логи - в ситуации, когда сервер не стартонул, упоминаний о dhcpd в логах нет. Также не нашел у себя dhcpd.log (искал и поиском по разделам). Может его явно в конфиге dhcpd.conf прописать?

Поднял на тестовой системе (wheezy + kde) эту же конструкцию - пока все отрабатывало, но мало еще тестил - под стабильной тоже не раз думал, что вот оно, решил - ан нет. Пока не знаю, что еще сделать. Могу, конечно, прописать повторный запуск, но не наш метод.
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

kobzar

ну вобще можно быстро накидать скрипт на пару строк который будет мониторить наличие процесса
а запускатьяс по крону скажем каждый час... или как вам удобнее - но ето в корне неверный подход нужно анйти причину и устранить ее !
Вон у товарища екран блокировался - перерыли всю систему и интернет не мгли побороть глюк и ничего не помогало.
А потом оказалось что проблему вызывал торрент клиент какойто рагульный.
Снесли его и трамвай опять поехал по рельсам.
Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.

vladimir_ar

Цитата: kobzar от 23 августа 2012, 09:26:07ну вобще можно быстро накидать скрипт на пару строк который будет мониторить наличие процесса
а запускатьяс по крону скажем каждый час...
Это не требуется - если он запущен - самопроизвольно не выпадает. Иногда не стартует при загрузке (можно поставить еще в автозапуск, например, при старте DE) - стартую руками и все ОК, иногда вываливается без каких либо сообщений (по крайней мере я пока следов не нашел) при выходе из ждущего - решается прописыванием строки запуска в скрипте отработки выхода из suspend в pm. Но хочется найти, где косяк. Причем это нерегулярно - чаще все нормально, чем нет.

При этом интерфейс, на который инициализируется сервер, поднят и не падает. Единственно, может быть ситуация, что когда стартует isc-dhcp-server eth1 может еще не успевает подняться - но проблема то в том, что в логах это не отображено - т.е. если dhcpd не запустился или при выходе из ждущего вывалился - в syslog ничего нет.
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

kobzar

может поставить другойприоритеет запуска службы ?
Ты дорого мой друг, заплатишь за ошибку,..
Когда оскал мой милый, ты приймешь за улыбку.

vladimir_ar

#13
Об этом еще не подумал. Буду дома - попробую и этот вариант. Но почему-то кажется, что не то - почему тогда исчезает процесс при выходе из suspend-to-ram? Все-таки может он "просыпается" раньше, чем поднимается сетевая?

Сообщение объединено: 23 августа 2012, 11:04:45

Нашел похожую проблему, буду проверять вечером
ЦитироватьУ меня проблема, автоматически не запускается DHCP-сервер, хотя вручную работает без проблем. В логе ничего не пишет. Подскажите что-где посмотреть и как подкрутить?
Цитироватьнапример. запускаем ntsysv и ставим галочку напротив dhcpd

Сообщение объединено: 23 августа 2012, 11:08:51

Хотя не оно - у меня то он не всегда не запускается. Может вовсе проблема в isc-dhcp-server, и поставить просто dhcp3-server?

Сообщение объединено: 23 августа 2012, 11:28:43

Кажется, все же, пытается стартонуть раньше поднятия интерфейса eth1. И в interfaces добавить строку
post-up /etc/init.d/isc-dhcp-server start.?
Debian Testing, kernel 3.16-2-amd64, OpenBox
AMD A8-3750 / 16Gb RAM / ATI HD6550D (onboard) / Sound ASUS Xonar - DS
_______________________________
Debian Testing, kernel 3.14-2-amd64, OpenBox
HP-655 AMD E1 / 8Gb RAM / ATI HD7310M

corner

Мне кажется, у вас есть некотрые проблемы с настройкой iptables.
1. не вижу открытых широковещательных адресов.
2. udp порты 67 68 где, и как они проходят.

Попробуйте сначала запускать сервер с чистой iptables.
Форвардинг необязательно делать в interfaces, это можно сделать, и удобнее, через /etc/sysctl.conf.
После того, как у вас надежно будет работать dhcp с чистой iptables, тогда добавляйте правила
Для примера (касательно dhcp для демонстрации работы с портами и протоколами) ($iif - интерфейс обслуживаемый DHCP, $iip - ip адрес DHCP, $inet - адреса сети клиентов DHCP) :
Открыть содержимое (спойлер)
ipt="/sbin/iptables -t filter"
$ipt -A INPUT -i $iif -p udp -s 0.0.0.0 --sport 68 -d 255.255.255.255 --dport 67 -j ACCEPT
$ipt -A OUTPUT -o $iif -p udp -s 0.0.0.0 --sport 68 -d 255.255.255.255 --dport 67 -j ACCEPT
$ipt -A OUTPUT -o $iif -p udp -s $iip --sport 67 -d 255.255.255.255 --dport 68 -j ACCEPT
$ipt -A INPUT -i $iif -p udp -s 0.0.0.0 --sport 68 -d $iip --dport 67 -j ACCEPT
$ipt -A OUTPUT -o $iif -p udp -s $iip --sport 67 -d $inet --dport 68 -j ACCEPT
$ipt -A INPUT -i $iif -p udp -s $inet --sport 68 -d $iip --dport 67 -j ACCEPT
[свернуть]