[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: debian + hostapd + pptp = pptp random disconnect



On Mon, May 14, 2012 at 04:15:22PM +0300, Gary Trotcko wrote:
> Мммм....  Но почему при _выключенном_hostapd_ сессия на рвётся?

 Это меня тоже занимало, продолжал чесать репу после того как
 написал последнее письмо. И нашёл признаки того, что у клиента
 поломан ip-шный стэк. Видно по этому фрагменту:

> 13:29:55.739405 IP 192.168.120.184.56438 > 192.168.117.211.1723: Flags
> [.], ack 21, win 3650, options [nop,nop,TS val 32812773 ecr
> 654458210], length 0

> 13:30:46.979768 IP 192.168.117.211.1723 > 192.168.120.184.56438: Flags
> [F.], seq 21, ack 16, win 62, options [nop,nop,TS val 654463334 ecr
> 32812773], length 0

> 13:30:46.980456 IP 192.168.120.184.56438 > 192.168.117.211.1723: Flags
> [P.], seq 16:32, ack 22, win 3650, options [nop,nop,TS val 32825584
> ecr 654463334], length 16: pptp CTRL_MSGTYPE=CCRQ CALL_ID(0)

 Здесь такая нестыковка: после прихода от сервера пакета нулевой длины
 на клиенте счётчик байтов смещается на 1 (с ack=21 на ack=22).
 IMHO, это бага.

 Как реагирует на это ядро сервера -- неизвестно, но вполне вероятно,
 что оно начинает дропать все дальнейшие пакеты от клиента (которые
 выбежали за границу окна передачи), но при этом считать, что FIN остался
 без подтверждения. Если это так, то пачка FINов от сервера является
 простыми ретрансмиссиями первого, что похоже на правду, поскольку
 у них всех ecr=32812773.

 Ниже нашлась ещё одна фигня со строны клиента:

> 13:30:47.188877 IP 192.168.120.184.56438 > 192.168.117.211.1723: Flags
> [.], ack 22, win 3650, options [nop,nop,TS val 32825636 ecr
> 654463355,nop,nop,sack 1 {21:22}], length 0

 Сочетание ack=22 и sack={21:22} нелепо, таких пакетов быть не должно.

 В общем, похоже что включение hostapd приводит к поломке ip-стэка.
 Правда, я всё-таки не вижу причину для первоначального FINа от сервера.
 Но дамп неполный, не исключено, что коннекция сломалась задолго до того,
 как был запущен tcpdump, и первый FIN -- окончание процесса умирания
 по таймауту. Тогда никакие "злоумышленники" не при чём, конечно. :)
-- 
 Eugene Berdnikov


Reply to: