Почему dhclient выдает одноадресный DHCPREQUEST каждые ~15 секунд вместо таймеров T1/T2?
Я использую сервер CentOS 6.2 в качестве шлюза и брандмауэра, а также предоставляю некоторые внутренние сервисы. Это настройка, которую я использовал в течение многих лет, используя различное оборудование и дистрибутивы (на основе Redhat). Недавно я столкнулся с проблемой подключения к Интернету и считаю, что это связано либо с недостатком моего провайдера (Roadrunner, штат Нью-Йорк), либо с недостатком моей конфигурации (по умолчанию) для dhclient.
Я не использую NetworkManager на этом сервере, так как конфигурация сети является статической, и сервер работает 24/7 в качестве шлюза. У меня есть моя конфигурация интерфейса сетевого сценария sysconfig, как показано ниже:
который настроил интерфейс при загрузке и использовании DHCP, с помощью утилиты dhclient. У меня есть действующий сценарий брандмауэра iptables, над которым я непрерывно работаю в течение многих лет, чтобы обеспечить функциональность маршрутизации /NAT, но это не имеет отношения к моей проблеме.
В течение последней недели или двух (по крайней мере, я уже некоторое время видел эти записи в журнале и выключал их), я вижу, что как только аренда DHCP, предложенная моим провайдером, достигает половины пути, вызывая обновление, dhclient входит в цикл, где каждый Через 15 секунд он отправляет одноадресный DHCPREQUEST записи DHCP-сервера, указанной в файле /var/lib/dhclient/dhclient-eth1.leases (см. Ниже). Это продолжается в течение нескольких часов, пока либо не будет нарушено сетевое подключение, либо в конечном итоге будет предпринята попытка обнаружить широковещательную рассылку и правильно получить новую аренду.
Цикл запроса dhclient всегда одноадресный, всегда использует адрес DHCP-сервера, указанный в аренде, которую он пытается обновить, и он всегда использует одно и то же значение xid для каждого из этих запросов. Мне интересно, есть ли способ заставить dhclient всегда выдавать широковещательный DHCPDISCOVER вместо одноадресного пакета REQUEST для обновления? Возможна ли проблема с настройкой или это просто неуклюжая служба DHCP Time Warner? Я использовал TWC в качестве своего провайдера в течение последних 5 лет и никогда не сталкивался с этой проблемой при использовании Linux в качестве шлюза.
Вот мой скрипт конфигурации интерфейса:
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=Internet
HWADDR=00:D0:B7:**:**:**
MTU=1500
BOOTPROTO=dhcp
PEERDNS=no
IPV6INIT=no
ONBOOT=yes
Вот пример файла dhclient-eth1.leases (текущий, но цикл начнется через ~6-8 часов)
lease {
interface "eth1";
fixed-address 74.***.***.***;
option subnet-mask 255.255.240.0;
option routers 74.***.***.***;
option dhcp-lease-time 43200;
option dhcp-message-type 5;
option domain-name-servers 209.18.47.61,209.18.47.62;
option dhcp-server-identifier 10.111.64.1;
option interface-mtu 576;
option broadcast-address 255.255.255.255;
option domain-name "rochester.rr.com";
renew 3 2012/01/18 21:51:02;
rebind 4 2012/01/19 02:57:58;
expire 4 2012/01/19 04:27:58;
}
и выдержка из /var/log/messages относительно этой проблемы (началась примерно в 12:30 и продолжается до 11:30 сегодня утром:
... Длинный список DHCPREQUEST почти идентичен приведенному ниже
Jan 17 16:50:59 server dhclient[1384]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x54a5b374)
Jan 17 16:51:13 server dhclient[1384]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x54a5b374)
Jan 17 16:51:21 server dhclient[1384]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x54a5b374)
Jan 17 16:51:31 server dhclient[1384]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x54a5b374)
Jan 17 16:51:31 server dhclient[1384]: DHCPACK from 10.111.64.1 (xid=0x54a5b374)
Jan 17 16:51:31 server dhclient[1384]: bound to 74.69.54.153 -- renewal in 17309 seconds.
Кажется, здесь успешно, наконец, получил DHCPACK после длинного списка попыток
Вчера вечером, около 7:30 вечера, намного выше записи в журнале выше в 16:51 и даже по другим причинам перезагрузил сервер, что приводит к появлению строки ЗАПРОС ниже.
Jan 17 20:11:51 server dhclient[3872]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x4a4507ce)
Jan 17 20:11:51 server dhclient[3872]: DHCPACK from 10.111.64.1 (xid=0x4a4507ce)
Jan 17 20:11:51 server dhclient[3872]: bound to 74.69.54.153 -- renewal in 17073 seconds.
Jan 18 00:56:24 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:56:32 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:56:46 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:57:04 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 00:57:24 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
.... пропущено несколько часов и много-много строк из вышеперечисленного, каждые ~15 секунд. Здесь я вручную отключил и включил интерфейс.
Jan 18 11:27:29 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 11:27:45 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 11:27:52 server dhclient[3917]: DHCPREQUEST on eth1 to 10.111.64.1 port 67 (xid=0x4a4507ce)
Jan 18 11:27:58 server dhclient[16174]: DHCPREQUEST on eth1 to 255.255.255.255 port 67 (xid=0x63741216)
Jan 18 11:27:58 server dhclient[16174]: DHCPACK from 10.111.64.1 (xid=0x63741216)
Jan 18 11:27:58 server dhclient[16174]: bound to 74.69.54.153 -- renewal in 19384 seconds.
У меня всегда были некоторые проблемы с MTU, связанные с фрагментацией моего брандмауэра, но это, похоже, не является основной причиной, и это будет отдельный вопрос, если таковой имеется.
4 ответа
У меня была такая же проблема с тем же провайдером (RoadRunner). Похоже, что RR предоставляет недопустимый или недоступный IP-адрес хоста dhcp-server-identifier. Хотя было бы неплохо, если бы провайдер решил проблему, вы можете добавить следующее в свой /etc/dhcp/dhclient.conf
(местоположение может отличаться в вашем дистрибутиве):
interface "ethX" {
supersede dhcp-server-identifier 255.255.255.255;
}
Это приведет к тому, что клиент проигнорирует IP-адрес сервера DHCP, предоставленный в ответе, и отправит широковещательную рассылку для DHCPREQUEST. Это взломать Это, вероятно, нарушает регулирующие RFC, но это работает для меня.
У меня есть эта проблема с моим кабельным провайдером. Они не отвечают на одноадресные пакеты DHCPREQUEST. Я использую:
iptables -t nat -A OUTPUT -d 10.0.0.0/255.0.0.0 -o eth1 -p udp -m udp --dport 67 -j DNAT - к месту назначения 255.255.255.255
превратить их в трансляции, и проблема исчезнет.
Скорее всего, это связано с нечетными правилами брандмауэра или какой-то странной конфигурацией на стороне поставщика услуг, которая запрещает направлять запросы DHCP. Ваш DHCP-клиент, скорее всего, ведет себя правильно.
Когда клиент достигает времени RENEW, он отправляет обратно одноадресные DHCPREQUESTS, чтобы попытаться обновить минимум.
Когда он достигнет времени EXPIRE, он снова начнет вещание. И это то, что мы видим из журналов, которые вы вставили.
Если вы сделаете что-то нехорошее, например, убьете dhclient, очистите файл аренды и перезапустите dhclient, все может заработать. Но на самом деле не должно быть обязательным.
Есть ли у вас журналы, когда сетевое соединение фактически разрывается?
У меня было это тоже, проблема в том, что dhclient отправляет индивидуальные (IP-адреса) запросы к Интернет-провайдеру, и мой Интернет-провайдер не принимает одноадресную рассылку только для многоадресной рассылки (255.255.255.255), dhclient должен возвращаться к многоадресной рассылке при сбое одноадресной рассылки, но это не так кажется, что делать это до повторного связывания или истечения срока действия (не уверен, какой), и это может быть несколько дней спустя
Мое решение состояло в том, чтобы запускать этот скрипт ежедневно с рутом из /etc/crontab
#!/bin/bash
/usr/bin/killall -vw dhclient
/sbin/dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0 -cf /etc/dhcp/dhcpd.conf eth0
Первая строка убивает существующего dhclient, который отправляет индивидуальные запросы. Вторая строка запускает новый экземпляр, который использует многоадресную рассылку.
сделать скрипт исполняемым
chmod 755 /root/renew.sh
добавьте такую строку в /etc/crontab
10 1 * * * root /root/renew.sh
В моих журналах был также спам DHCPREQUEST (Debian 8). У меня был dhclient (isc-dhcp-client 4.3.1). Моя установка была немного странной, но я решил свои проблемы, просто удалив isc-dhcp-client и установив dhcpcd 6.0.5 (от Роя Марплеса). dhcpcd кажется умнее, чем isc-dhcp-client. Теперь работает как шарм.