Неправильная отправка DHCP NAK

Bug reports
User avatar
Абрамчук Вадим
Posts: 75
Joined: 21 Oct 2014, 20:15

Re: Неправильная отправка DHCP NAK

Post by Абрамчук Вадим »

Всё. Решил. Из серии "невероятно, но факт".

Симптом: SOHO-роутеры отваливаются на несколько секунд каждый раз при обновлении лизы. То есть если лиза - 2 минуты, то каждые 2 минуты роутер будет отваливаться. Происходит это только если использовать больше одного accel-ppp сервера одновременно.

Причина: udhcpc из состава busybox плохо обрабатывает лизы с короткой длительностью из-за ошибки в логике таймаута.
На лизе в 2 минуты клиент переходит в состояние REBINDING сразу, без предварительного RENEW. Отправляет запрос на REBIND (который по сути есть широковещательный REQUEST), на который получает ответ от двух accel-ppp серверов: ACK + NAK. Получив NAK от "чужого" сервера (не того, который выдал ему лизу), клиент (udhcpc в роутере) убирает IP-адрес со своего сетевого интерфейса и начинает заново процес получения IP (с DISCOVER). Трафик не ходит как раз эти 2-3 секунды, пока роутер не получит новый адрес.

Лечение: Использовать лизу длительностью в 10 минут, т.е. где-то так:

Code: Select all

[ipoe]
lease-time=600
max-lease-time=660
vlan-timeout=900
User avatar
Абрамчук Вадим
Posts: 75
Joined: 21 Oct 2014, 20:15

Re: Неправильная отправка DHCP NAK

Post by Абрамчук Вадим »

Хорошо бы дописать в документации. Пусть никто не топчется больше по моим граблям.

Code: Select all

diff --git a/accel-pppd/accel-ppp.conf.5 b/accel-pppd/accel-ppp.conf.5
index e29d418..1da2628 100644
--- a/accel-pppd/accel-ppp.conf.5
+++ b/accel-pppd/accel-ppp.conf.5
@@ -228,7 +228,7 @@ Or you can specify fixed password in
 .B <string>.
 .TP
 .BI "lease-time=" n
-Specifies lease time in seconds to be sent to dhcp client.
+Specifies lease time in seconds to be sent to dhcp client. Note that low values (like 120) may cause traffic loss problems with some buggy clients (specifically SOHO routers using busybox's udhcpc) in multi-server configuration.
 .TP
 .BI "max-lease-time=" n
 Specifies max lease time in seconds, after this time session will be terminated if client won't renew it.
Post Reply