PPPoE кладет сеть LCP пакетами

PPPoE related questions
johnik
Posts: 7
Joined: 23 Nov 2015, 05:32

PPPoE кладет сеть LCP пакетами

Post by johnik »

Добрый день!

Недавно столкнулся с проблемой - абонент пытается авторизоваться и присылает LCP ConfAck, ацель в ответ шлет два LCP ConfAck, и абонент снова отправляет ConfAck и так по кругу. Такая карусель может продолжаться бесконечно, рестарт ацеля не всегда помогает. В tcpdump и логах ацель в этот моент видно только LCP, в результате на интерфейсе сервера есть только LCP трафик, и у уже авторизованных абонентов винда говорит "Нет ресурсов".

Code: Select all

[2015-11-23 08:15:36.213] ppp3: edf9f554962e6db6: recv [LCP ConfReq id=53 <mru 1492> <magic 44a74992>]
[2015-11-23 08:15:36.213] ppp3: edf9f554962e6db6: send [LCP ConfAck id=53 ]
[2015-11-23 08:15:36.213] ppp3: edf9f554962e6db6: send [LCP ConfAck id=53 ]
[2015-11-23 08:15:36.218] ppp3: edf9f554962e6db6: recv [LCP ConfReq id=54 <mru 1492> <magic 44a74992>]
[[2015-11-23 08:15:36.218] ppp3: edf9f554962e6db6: send [LCP ConfAck id=54 ]
[2015-11-23 08:15:36.218] ppp3: edf9f554962e6db6: send [LCP ConfAck id=54 ]
[2015-11-23 08:15:36.226] ppp36: edf9f554962e6dc4: pppd_compat: ip-down finished (0)
[2015-11-23 08:15:36.228] ppp3: edf9f554962e6db6: recv [LCP ConfReq id=55 <mru 1492> <magic 44a74992>]
[2015-11-23 08:15:36.228] ppp3: edf9f554962e6db6: send [LCP ConfAck id=55 ]
[2015-11-23 08:15:36.228] ppp3: edf9f554962e6db6: send [LCP ConfAck id=55 ]
[2015-11-23 08:15:36.242] send [PPPoE PADT 00:1e:67:9f:d5:24 => 00:1b:11:fa:c2:3b sid=0980 <AC-Name pppoe_server1> <Service-Name >]
[2015-11-23 08:15:36.242] ppp3: edf9f554962e6db6: recv [LCP ConfReq id=56 <mru 1492> <magic 44a74992>]
[2015-11-23 08:15:36.242] ppp3: edf9f554962e6db6: send [LCP ConfAck id=56 ]
[2015-11-23 08:15:36.242] ppp3: edf9f554962e6db6: send [LCP ConfAck id=56 ]
[2015-11-23 08:15:36.248] ppp3: edf9f554962e6db6: recv [LCP ConfReq id=57 <mru 1492> <magic 44a74992>]
[2015-11-23 08:15:36.248] ppp3: edf9f554962e6db6: send [LCP ConfAck id=57 ]
[2015-11-23 08:15:36.248] ppp3: edf9f554962e6db6: send [LCP ConfAck id=57 ]

Code: Select all

[root@pppoe_server1 ~]# tcpdump -i eth1 pppoes
ethertype PPPoE S (0x8864), length 60: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Request (0x01), id 53, length 16  
ethertype PPPoE S (0x8864), length 36: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Ack (0x02), id 53, length 16  
ethertype PPPoE S (0x8864), length 36: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Ack (0x02), id 53, length 16  
ethertype PPPoE S (0x8864), length 60: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Request (0x01), id 54, length 16  
ethertype PPPoE S (0x8864), length 36: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Ack (0x02), id 54, length 16  
ethertype PPPoE S (0x8864), length 36: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Ack (0x02), id 54, length 16  
ethertype PPPoE S (0x8864), length 60: PPPoE  [ses 0x754] LCP (0xc021), length 16: LCP, Conf-Request (0x01), id 55, length 16  
ethertype PPPoE S (0x8864), length 36: PPPoE  [ses 0x754] LCP (0xc021), length 16: LCP, Conf-Ack (0x02), id 55, length 16  
ethertype PPPoE S (0x8864), length 36: PPPoE  [ses 0x754] LCP (0xc021), length 16: LCP, Conf-Ack (0x02), id 55, length 16  
ethertype PPPoE S (0x8864), length 60: PPPoE  [ses 0x812] LCP (0xc021), length 16: LCP, Conf-Request (0x01), id 56, length 16  
Повторятеся на версиях 1.9 и 1.8, на сервере стоит CentOS 6.7 с ядром 2.6.32.
Я нашел в исходниках ацеля, что два ConfAck отправляется в случае если lcp сессия имеет статуc started:
часть функции lcp_recv из файла ppp_lcp.c

Code: Select all

...
	lcp->fsm.recv_id = hdr->id;

	switch(hdr->code) {
		case CONFREQ:
			r = lcp_recv_conf_req(lcp, (uint8_t*)(hdr + 1), ntohs(hdr->len) - PPP_HDRLEN);
			if (lcp->started) {
				if (r == LCP_OPT_ACK) {
					send_conf_ack(&lcp->fsm);
				}
				else
					r = LCP_OPT_FAIL;
			}
			switch(r) {
				case LCP_OPT_ACK:
					ppp_fsm_recv_conf_req_ack(&lcp->fsm);
					break;
				case LCP_OPT_NAK:
					ppp_fsm_recv_conf_req_nak(&lcp->fsm);
					break;
				case LCP_OPT_REJ:
					ppp_fsm_recv_conf_req_rej(&lcp->fsm);
					break;
			}
			lcp_free_conf_req(lcp);
			if (r == LCP_OPT_FAIL)
				ap_session_terminate(&lcp->ppp->ses, TERM_USER_ERROR, 0);
			break;
...
E сли r == LCP_OPT_ACK происходит вызов send_conf_ack(&lcp->fsm), потом в swith происходит вызов ppp_fsm_recv_conf_req_ack(&lcp->fsm), внутри этой функции снова вызывается send_conf_ack.

Не уверен, может причина не в дублирующихся ConfAck, а в не правильной настройке ацеля.

Code: Select all

[modules]
log_file
l2tp
pppoe
auth_mschap_v2
radius
ippool
sigchld
pppd_compat
connlimit

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=1

[common]
single-session=replace

[ppp]
verbose=1
min-mtu=300
mtu=1400
mru=1400
ccp=0
check-ip=0
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
lcp-echo-interval=30
lcp-echo-failure=10
max-configure=30

[auth]

[pppoe]
verbose=1
ac-name=pppoe_server1
service-name=pppoe_server1
interface=eth0,padi-limit=1000
interface=eth2,padi-limit=1000

[l2tp]
verbose=5
dictionary=/etc/accel-ppp/l2tp/dictionary
avp_permissive=1

[dns]
dns1=10.128.0.1
dns2=8.8.8.8

[wins]

[radius]
dictionary=/etc/accel-ppp/radius/dictionary
nas-identifier=192.168.18.1
nas-ip-address=192.168.18.1
gw-ip-address=10.128.0.1
server=192.168.18.12,supersecret,auth-port=1812,acct-port=0,req-limit=100,fail-time=0
server=192.168.18.13,supersecret,auth-port=0,acct-port=1813,req-limit=100,fail-time=0
verbose=1
timeout=10

[client-ip-range]
disable

[ip-pool]
gw-ip-address=10.128.0.1
attr=Framed-Pool
192.168.0.2-255

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
log-debug=/var/log/accel-ppp/debug.log
copy=1
level=4


[pppd-compat]
ip-up=/usr/local/bin/ip-up
ip-down=/usr/local/bin/ip-down
ip-change=/usr/local/bin/ip-change
radattr-prefix=/var/run/radattr
verbose=1

[chap-secrets]
gw-ip-address=192.168.100.1

[shaper]
up-limiter=police
down-limiter=tbf

[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001

[snmp]
master=0
agent-name=accel-ppp

[connlimit]
limit=10/min
burst=10
timeout=600

[ipv6-pool]
fc00:0:1::/48,64
delegate=fc00:1::/36,48

[ipv6-dns]

[ipv6-dhcp]
verbose=1
pref-lifetime=604800
valid-lifetime=2592000
route-via-gw=1
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: PPPoE кладет сеть LCP пакетами

Post by Dmitry »

это конечно ошибка в исходниках, но причина в чём-то другом
надо бы больше логов, с момента подключения
johnik
Posts: 7
Joined: 23 Nov 2015, 05:32

Re: PPPoE кладет сеть LCP пакетами

Post by johnik »

Вот дебаг лог по абоненту с такой проблемой от начала подключения:

Code: Select all

[2015-11-19 15:01:42.067] recv [PPPoE PADR 00:0c:01:5f:00:47 => 00:e7:6f:9f:e5:23 sid=0000 <Host-Uniq ffffffff> <Service-Name pppoe_server1> <AC-Cookie f69e300cf9e50e3b5c81b869adb83b077e1bbd3285db3c81>]
[2015-11-19 15:01:42.067] send [PPPoE PADS 00:e7:6f:9f:e5:23 => 00:0c:01:5f:00:47 sid=04a2 <AC-Name pppoe_server1> <Service-Name pppoe_server1> <Host-Uniq ffffffff>]
[2015-11-19 15:01:42.068] ppp2: : connect: ppp2 <--> pppoe(00:0c:01:5f:00:47)
[2015-11-19 15:01:42.068] ppp2: edf9f554962e2e73: send [LCP ConfReq id=1 <auth MSCHAP-v2> <magic 78d07d08> <mru 1400>]
[2015-11-19 15:01:42.068] ppp61: edf9f554962e2e1a: recv [LCP ConfReq id=d0 <mru 1480> <magic 2a2b6299>]
[2015-11-19 15:01:42.068] ppp61: edf9f554962e2e1a: send [LCP ConfAck id=d0 ]
[2015-11-19 15:01:42.068] ppp61: edf9f554962e2e1a: send [LCP ConfAck id=d0 ]
[2015-11-19 15:01:42.068] ppp75: edf9f554962e2cde: recv [LCP ConfReq id=4f <mru 1480> <magic 01bc6be0>]
[2015-11-19 15:01:42.068] ppp75: edf9f554962e2cde: send [LCP ConfAck id=4f ]
[2015-11-19 15:01:42.158] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=5a <mru 1492> <magic 07958b53>]
[2015-11-19 15:01:42.158] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5a ]
[2015-11-19 15:01:45.068] ppp2: edf9f554962e2e73: send [LCP ConfReq id=1 <auth MSCHAP-v2> <magic 78d07d08> <mru 1400>]
[2015-11-19 15:01:45.071] ppp2: edf9f554962e2e73: recv [LCP ConfAck id=1 <auth MSCHAP-v2> <magic 78d07d08> <mru 1400>]
[2015-11-19 15:01:45.071] ppp2: edf9f554962e2e73: send [MSCHAP-v2 Challenge id=1 <6e8aab61bf7603326b053dffb8cf6cb>]
[2015-11-19 15:01:45.077] ppp2: edf9f554962e2e73: recv [MSCHAP-v2 Response id=1 <504b1b9e5b7d779ce8ea822f662dd179>, <cd2cc9f7cfe056d83a6999db623d0416686e051a4839661>, F=0, name="usr002"]
[2015-11-19 15:01:45.077] ppp2: edf9f554962e2e73: send [RADIUS(1) Access-Request id=1 <User-Name "usr002"> <NAS-Identifier "192.168.18.1"> <NAS-IP-Address 192.168.18.1> <NAS-Port 2> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "00:0c:01:5f:00:47"> <Called-Station-Id "00:e7:6f:9f:e5:23"><Microsoft MS-CHAP-Challenge ><Microsoft MS-CHAP2-Response >]
[2015-11-19 15:01:45.097] ppp2: edf9f554962e2e73: recv [RADIUS(1) Access-Accept id=1 <Framed-Protocol PPP> <Framed-IP-Address 10.128.1.38> <Filter-Id "session Framed-IP-Address redirect blocked cancel"> <Filter-Id "session Framed-IP-Address redirect negbal cancel"> <Filter-Id "session Framed-IP-Address rate set in 350 3000 100001 out 350 3000 100001"> <Filter-Id "session Framed-IP-Address start"> <Acct-Interim-Interval 300><Microsoft MS-CHAP2-Success ><Microsoft MS-MPPE-Recv-Key ><Microsoft MS-MPPE-Send-Key ><Microsoft MS-MPPE-Encryption-Policy 2><Microsoft MS-MPPE-Encryption-Type 6>]
[2015-11-19 15:01:45.097] ppp2: edf9f554962e2e73: send [MSCHAP-v2 Success id=1 "S=C61F603E6CD77B7EA9D3803C36F987640DA0C58A M=Authentication succeeded"]
[2015-11-19 15:01:45.097] ppp2: edf9f554962e2e73: send [IPCP ConfReq id=1 <addr 10.128.0.1>]
[2015-11-19 15:01:45.097] ppp2: edf9f554962e2e73: usr002: authentication succeeded
[2015-11-19 15:01:45.101] ppp2: edf9f554962e2e73: recv [IPCP ConfReq id=5 <addr 0.0.0.0> <dns1 0.0.0.0> <dns2 0.0.0.0>]
[2015-11-19 15:01:45.101] ppp2: edf9f554962e2e73: send [IPCP ConfNak id=5 <addr 10.128.1.38> <dns1 10.128.0.1> <dns2 8.8.8.8>]
[2015-11-19 15:01:45.106] ppp2: edf9f554962e2e73: send [LCP ProtoRej id=3 <8281>]
[2015-11-19 15:01:45.107] ppp2: edf9f554962e2e73: recv [IPCP ConfAck id=1 <addr 10.128.0.1>]
[2015-11-19 15:01:45.116] ppp2: edf9f554962e2e73: recv [IPCP ConfReq id=6 <addr 10.128.1.38> <dns1 10.128.0.1> <dns2 8.8.8.8>]
[2015-11-19 15:01:45.116] ppp2: edf9f554962e2e73: send [IPCP ConfAck id=6]
[2015-11-19 15:01:45.116] ppp2: edf9f554962e2e73: send [RADIUS(2) Accounting-Request id=1 <User-Name "usr002"> <NAS-Identifier "192.168.18.1"> <NAS-IP-Address 192.168.18.1> <NAS-Port 2> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "00:0c:01:5f:00:47"> <Called-Station-Id "00:e7:6f:9f:e5:23"> <Acct-Status-Type Start> <Acct-Authentic RADIUS> <Acct-Session-Id "edf9f554962e2e73"> <Acct-Session-Time 0> <Acct-Input-Octets 0> <Acct-Output-Octets 0> <Acct-Input-Packets 0> <Acct-Output-Packets 0> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.128.1.38>]
[2015-11-19 15:01:45.118] ppp2: edf9f554962e2e73: recv [RADIUS(2) Accounting-Response id=1]
[2015-11-19 15:01:45.120] ppp2: edf9f554962e2e73: pppd_compat: ip-up started (pid 7780)
[2015-11-19 15:01:45.335] ppp2: edf9f554962e2e73: pppd_compat: ip-up finished (0)
[2015-11-19 15:01:45.876] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=1f <mru 1480> <magic 1f0721df>]
[2015-11-19 15:01:45.876] ppp2: edf9f554962e2e73: send [LCP ConfAck id=1f ]
[2015-11-19 15:01:45.876] ppp2: edf9f554962e2e73: send [LCP ConfReq id=3 <auth MSCHAP-v2> <magic 78d07d08> <mru 1400>]
[2015-11-19 15:01:45.876] ppp2: edf9f554962e2e73: send [LCP ConfAck id=1f ]
[2015-11-19 15:01:45.887] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=5b <mru 1492> <magic 0a2f7adb>]
[2015-11-19 15:01:45.887] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5b ]
[2015-11-19 15:01:45.887] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5b ]
[2015-11-19 15:01:45.897] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=5c <mru 1492> <magic 0b4da544>]
[2015-11-19 15:01:45.897] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5c ]
[2015-11-19 15:01:45.897] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5c ]
[2015-11-19 15:01:45.906] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=5d <mru 1492> <magic 0b4da544>]
[2015-11-19 15:01:45.906] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5d ]
[2015-11-19 15:01:45.906] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5d ]
[2015-11-19 15:01:45.916] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=5e <mru 1492> <magic 0b4da544>]
[2015-11-19 15:01:45.916] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5e ]
[2015-11-19 15:01:45.916] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5e ]
[2015-11-19 15:01:45.926] ppp2: edf9f554962e2e73: recv [LCP ConfReq id=5f <mru 1492> <magic 0b4da544>]
[2015-11-19 15:01:45.926] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5f ]
[2015-11-19 15:01:45.926] ppp2: edf9f554962e2e73: send [LCP ConfAck id=5f ]
...
Дальше весь лог состоит из LCP ConfAck и ConfReq.

И по поводу исходников, я правильно понял, что надо добавить return, в функцию lcp_recv?

Code: Select all

			if (lcp->started) {
				if (r == LCP_OPT_ACK) {
					send_conf_ack(&lcp->fsm);
					return;
				}
				else
					r = LCP_OPT_FAIL;
			}
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: PPPoE кладет сеть LCP пакетами

Post by Dmitry »

да, надо добавить return
но проблема видимо в том что ConfAck передаётся без параметров
johnik
Posts: 7
Joined: 23 Nov 2015, 05:32

Re: PPPoE кладет сеть LCP пакетами

Post by johnik »

Из-за чего в таком случае ConfAck может быть без параметров? Можете подсказать в какую сторону стоит дальше копать?
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: PPPoE кладет сеть LCP пакетами

Post by Dmitry »

я соврал, ConfAck отправляется с параметрами, просто в лог не распечатываются
двойную отправку ConfAck исправил commit 44ba310b79265b0417bd236b4a661801e9d4f892
пробуй, может поможет
хотя мне кажется что причина не в этом
кто является клиентом ? есть ли на его стороне какие-либо логи ?
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: PPPoE кладет сеть LCP пакетами

Post by Dmitry »

хотя этот баг провоцировал так-же повторную отправку send [LCP ConfReq id=3 <auth MSCHAP-v2> <magic 78d07d08> <mru 1400>], что может сбивать клиента с толку
johnik
Posts: 7
Joined: 23 Nov 2015, 05:32

Re: PPPoE кладет сеть LCP пакетами

Post by johnik »

Спасибо, сегодня соберу, обновлю, посмотрим как проработает.
По результатам отпишусь.
johnik
Posts: 7
Joined: 23 Nov 2015, 05:32

Re: PPPoE кладет сеть LCP пакетами

Post by johnik »

Еще заметил, в последних версиях не собирается pptp.ko, когда мейкаю командой make all, или его надо собрать теперь отдельно?
И после запуска отдельно make pptp, не могу найти pptp.ko .
-DBUILD_DRIVER=TRUE во фалагах установлен
basker
Posts: 18
Joined: 15 Sep 2015, 22:33

Re: PPPoE кладет сеть LCP пакетами

Post by basker »

johnik wrote:Еще заметил, в последних версиях не собирается pptp.ko, когда мейкаю командой make all, или его надо собрать теперь отдельно?
И после запуска отдельно make pptp, не могу найти pptp.ko .
-DBUILD_DRIVER=TRUE во фалагах установлен
Это для старых ядер
Post Reply