Не инициируется сессия на версиях >=1.11

IPoE related questions
blind_oracle
Posts: 5
Joined: 27 Sep 2016, 06:27

Не инициируется сессия на версиях >=1.11

Post by blind_oracle »

* Аксель пробовал 1.11 релиз и последний коммит из гита.
* CentOS 6, ядро 3.10.103 (судя по всему ванильное, без RH-патчей) из репы elrepo.
* Модуль IPoE собран, загружен.

Конфиг IPoE:

Code: Select all

[ipoe]
verbose=1
username=ifname
password=username
unit-cache=1000
local-net=10.1.99.0/24
interface=eth1,start=up,mode=L3,shared=1,ifcfg=0
Результаты:
1) В режиме L2 на входящие пакеты из сети 10.1.99.0/24 (она connected на интерфейсе eth1) не реагирует от слова никак. Так и надо? Может я не правильно понял смысл этого режима?
2) В режиме L3 пакеты видит, пытается создать сессию, и сразу её рубит.

Code: Select all

[2016-09-27 00:51:03]:  info: ipoe0: create interface ipoe0 parent eth1
[2016-09-27 00:51:03]: debug: ipoe0: radius(1): req_enter 1
[2016-09-27 00:51:03]:  info: ipoe0: send [RADIUS(1) Access-Request id=1 <User-Name "eth1"> <NAS-Identifier "accel-ppp"> <NAS-IP-Address 10.1.98.253> <NAS-Port 31> <NAS-Port-Id "ipoe0"> <NAS-Port-Type Ethernet> <Calling-Station-Id "54:53:ed:a7:69:bb"> <Called-Station-Id "eth1"> <Framed-IP-Address 10.1.99.1> <User-Password >]
[2016-09-27 00:51:03]: debug: ipoe0: radius(1): req_exit 0
[2016-09-27 00:51:03]:  info: ipoe0: recv [RADIUS(1) Access-Accept id=1]
[2016-09-27 00:51:03]:  info: ipoe0: eth1: authentication succeeded
[2016-09-27 00:51:03]:  info: ipoe: start interface eth1 (start=up,mode=L3,shared=1,ifcfg=0)
[2016-09-27 00:51:03]:   msg: accel-ppp version 810d23477a9ca33dfa2379c3fc742c3c56df3a9d
Напрягаяет постоянный вывод баннера ("accel-ppp version 810d23477a9ca33dfa2379c3fc742c3c56df3a9d"), который, судя по исходникам, выводится только в main() и при подключении через telnet.
Такое ощущение что какой-то форк там тихо падает без ошибок и создаётся заново.

При этом в версии 1.10.3 всё работает отлично. ЧЯДНТ? Спасибо заранее!
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Не инициируется сессия на версиях >=1.11

Post by Dmitry »

Такое ощущение что какой-то форк там тихо падает без ошибок и создаётся заново.
так оно и есть
blind_oracle
Posts: 5
Joined: 27 Sep 2016, 06:27

Re: Не инициируется сессия на версиях >=1.11

Post by blind_oracle »

Dmitry wrote:
Такое ощущение что какой-то форк там тихо падает без ошибок и создаётся заново.
так оно и есть
Что можно предпринять? Сдампить core и\или прицепиться gdb? Или уходить с богомерзкого CentOS на нормальный Debian? :)
dimka88
Posts: 866
Joined: 13 Oct 2014, 05:51
Contact:

Re: Не инициируется сессия на версиях >=1.11

Post by dimka88 »

Запустите сначала при помощи gdb.
blind_oracle
Posts: 5
Joined: 27 Sep 2016, 06:27

Re: Не инициируется сессия на версиях >=1.11

Post by blind_oracle »

Перешёл на Debian7 с ядром 3.16 из бэкпортов, то же самое.

Запустил под gdb, вот такая петрушка:

Code: Select all

# gdb --args /opt/accel-ppp/sbin/accel-pppd -c /etc/accel-ppp.conf
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /opt/accel-ppp/sbin/accel-pppd...done.

(gdb) run
Starting program: /opt/accel-ppp/sbin/accel-pppd -c /etc/accel-ppp.conf
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[2016-09-28 13:34:29.730] open ns (null)
[New Thread 0x7ffff5885700 (LWP 6739)]
[New Thread 0x7ffff5084700 (LWP 6740)]
[2016-09-28 13:34:29.739] ipoe: start interface eth1 (start=up,mode=L3,shared=1,ifcfg=0)
[2016-09-28 13:34:29.741] accel-ppp version 810d23477a9ca33dfa2379c3fc742c3c56df3a9d
[New Thread 0x7ffff7fca700 (LWP 6741)]
[New Thread 0x7ffff4883700 (LWP 6742)]
[New Thread 0x7ffff4782700 (LWP 6743)]
[New Thread 0x7ffff3f81700 (LWP 6744)]
[2016-09-28 13:34:35.380] ipoe0: e0e610e02b78d434: create interface ipoe0 parent eth1
[2016-09-28 13:34:35.381] ipoe0: e0e610e02b78d434: radius(1): req_enter 1
[2016-09-28 13:34:35.381] ipoe0: e0e610e02b78d434: send [RADIUS(1) Access-Request id=1 <User-Name "eth1"> <NAS-Identifier "accel-ppp"> <NAS-IP-Address 10.1.98.253> <NAS-Port 7> <NAS-Port-Id "ipoe0"> <NAS-Port-Type Ethernet> <Calling-Station-Id "54:53:ed:a7:69:bb"> <Called-Station-Id "eth1"> <Framed-AppleTalk-Zone "ipoe"> <Framed-IP-Address 10.1.99.1> <User-Password >]
[2016-09-28 13:34:35.430] ipoe0: e0e610e02b78d434: radius:packet: unknown attribute received (0,242)
[2016-09-28 13:34:35.430] ipoe0: e0e610e02b78d434: radius(1): req_exit 0
[2016-09-28 13:34:35.430] ipoe0: e0e610e02b78d434: recv [RADIUS(1) Access-Accept id=1]
[2016-09-28 13:34:35.431] ipoe0: e0e610e02b78d434: eth1: authentication succeeded

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7fca700 (LWP 6741)]
0x0000000000422ee6 in iplink_get_stats (ifindex=7, stats=0x7ffff7fc9c00) at /usr/src/accel-ppp-code/accel-pppd/libnetlink/iputils.c:116
116     /usr/src/accel-ppp-code/accel-pppd/libnetlink/iputils.c: No such file or directory.
Падает на вызове:

Code: Select all

struct rtnl_handle *rth = net->rtnl_get();
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Не инициируется сессия на версиях >=1.11

Post by Dmitry »

bt full надо в gdb вызвать после падения и логи уровня 5 записать
blind_oracle
Posts: 5
Joined: 27 Sep 2016, 06:27

Re: Не инициируется сессия на версиях >=1.11

Post by blind_oracle »

Логи 5 уровня это level=5 в [log]? Он и так стоит, как и verbose=1 везде, вот всё что выводит в логах:

Code: Select all

[2016-09-29 12:49:08]:  info: ipoe: start interface eth1 (start=up,mode=L3,shared=1,ifcfg=0)
[2016-09-29 12:49:08]:   msg: accel-ppp version 810d23477a9ca33dfa2379c3fc742c3c56df3a9d
[2016-09-29 12:49:08]:  info: ipoe0: create interface ipoe0 parent eth1
[2016-09-29 12:49:08]: debug: ipoe0: radius(1): req_enter 1
[2016-09-29 12:49:08]:  info: ipoe0: send [RADIUS(1) Access-Request id=1 <User-Name "eth1"> <NAS-Identifier "accel-ppp"> <NAS-IP-Address 10.1.98.253> <NAS-Port 87> <NAS-Port-Id "ipoe0"> <NAS-Port-Type Ethernet> <Calling-Station-Id "14:b4
[2016-09-29 12:49:08]:  warn: ipoe0: radius:packet: vendor 26 not found
[2016-09-29 12:49:08]:  warn: ipoe0: radius:packet: unknown attribute received (0,242)
[2016-09-29 12:49:08]: debug: ipoe0: radius(1): req_exit 0
[2016-09-29 12:49:08]:  info: ipoe0: recv [RADIUS(1) Access-Accept id=1 <Session-Timeout 300> <Vendor-Specific >]
[2016-09-29 12:49:08]:  info: ipoe0: eth1: authentication succeeded
[2016-09-29 12:49:08]:  info: ipoe: start interface eth1 (start=up,mode=L3,shared=1,ifcfg=0)
[2016-09-29 12:49:08]:   msg: accel-ppp version 810d23477a9ca33dfa2379c3fc742c3c56df3a9d
bt full:

Code: Select all

# gdb --args /opt/accel-ppp-git/sbin/accel-pppd -c /etc/accel-ppp.conf
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /opt/accel-ppp-git/sbin/accel-pppd...done.
(gdb) run
Starting program: /opt/accel-ppp-git/sbin/accel-pppd -c /etc/accel-ppp.conf
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[2016-09-29 12:50:49.984] open ns (null)
[New Thread 0x7ffff5885700 (LWP 5120)]
[New Thread 0x7ffff5084700 (LWP 5121)]
[2016-09-29 12:50:50.018] ipoe: start interface eth1 (start=up,mode=L3,shared=1,ifcfg=0)
[2016-09-29 12:50:50.027] accel-ppp version 810d23477a9ca33dfa2379c3fc742c3c56df3a9d
[New Thread 0x7ffff7fca700 (LWP 5122)]
[New Thread 0x7ffff4883700 (LWP 5123)]
[New Thread 0x7ffff4782700 (LWP 5124)]
[New Thread 0x7ffff3f81700 (LWP 5125)]
[2016-09-29 12:50:51.548] ipoe0: e0e610e02b78fba3: create interface ipoe0 parent eth1
[2016-09-29 12:50:51.549] ipoe0: e0e610e02b78fba3: radius(1): req_enter 1
[2016-09-29 12:50:51.551] ipoe0: e0e610e02b78fba3: send [RADIUS(1) Access-Request id=1 <User-Name "eth1"> <NAS-Identifier "accel-ppp"> <NAS-IP-Address 10.1.98.253> <NAS-Port 88> <NAS-Port-Id "ipoe0"> <NAS-Port-Type Ethernet> <Calling-Station-Id "c4:85:08:8d:92:53"> <Called-Station-Id "eth1"> <Framed-AppleTalk-Zone "ipoe"> <Framed-IP-Address 10.1.99.4> <User-Password >]
[2016-09-29 12:50:51.601] ipoe0: e0e610e02b78fba3: radius:packet: vendor 26 not found
[2016-09-29 12:50:51.601] ipoe0: e0e610e02b78fba3: radius:packet: unknown attribute received (0,242)
[2016-09-29 12:50:51.601] ipoe0: e0e610e02b78fba3: radius(1): req_exit 0
[2016-09-29 12:50:51.601] ipoe0: e0e610e02b78fba3: recv [RADIUS(1) Access-Accept id=1 <Session-Timeout 300> <Vendor-Specific >]
[2016-09-29 12:50:51.602] ipoe0: e0e610e02b78fba3: eth1: authentication succeeded

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7fca700 (LWP 5122)]
0x0000000000422ee6 in iplink_get_stats (ifindex=88, stats=0x7ffff7fc9c00) at /usr/src/accel-ppp-code/accel-pppd/libnetlink/iputils.c:116
116     /usr/src/accel-ppp-code/accel-pppd/libnetlink/iputils.c: No such file or directory.
(gdb) bt full
#0  0x0000000000422ee6 in iplink_get_stats (ifindex=88, stats=0x7ffff7fc9c00) at /usr/src/accel-ppp-code/accel-pppd/libnetlink/iputils.c:116
        req = {n = {nlmsg_len = 0, nlmsg_type = 0, nlmsg_flags = 0, nlmsg_seq = 0, nlmsg_pid = 0}, i = {ifi_family = 0 '\000', __ifi_pad = 0 '\000', ifi_type = 0, ifi_index = 0, ifi_flags = 0, ifi_change = 0},
          buf = '\000' <repeats 592 times>"\260, \224\374\367\377\177\000\000\240\224\374\367\377\177\000\000%\000\000\000\000\000\000\000Е\374\367\377\177\000\000\355\341V\366\377\177\000\000B\256\234\366\377\177\000\000\000\000\000\000\000\000\000\000\377\341V\366\377\177\000\000\360\224\374\367\377\177\000\000\340\224\374\367\377\177\000\000\006\000\000\000\000\000\000\000P\226\374\367\377\177\000\000\361\247\066\366\377\177\000\000B\256\234\366\377\177\000\000\000\000\000\000\000\000\000\000\370\247\066\366\377\177\000\000\002\000\000\000\000\000\000\000\360\247\066\366\377\177", '\000' <repeats 30 times>"\377, \177", '\000' <repeats 66 times>, " \000\000\000", '\001' <repeats 16 times>, "\000\000\000\000\377\377\377\377\377\377\377\377\000\001\001\001\000\000\000\000\000\000\000\000\001\001\001\001\377\377\377\377\001\001\001\001\001", '\000' <repeats 15 times>"\354, ۜ\366\377\177\000\000\377\341V\366\377\177\000\000s", '\000' <repeats 15 times>, "h\223\374\367\377\177\000\000\377\377\377\377\377\177\000\000\000\000\000\000\021", '\000' <repeats 11 times>"\354"...}
        ifi = 0x7ffff7dea9c2
        len = 32767
        tb = {0x0 <repeats 36 times>}
        rth = 0x7fff00000005
        r = 0
#1  0x0000000000406a4f in ap_session_set_ifindex (ses=0x662cd0) at /usr/src/accel-ppp-code/accel-pppd/session.c:72
        stats = {rx_packets = 4160527504, tx_packets = 32767, rx_bytes = 4294961424, tx_bytes = 32767, rx_errors = 4160530880, tx_errors = 32767, rx_dropped = 4158589477, tx_dropped = 32767, multicast = 6696144, collisions = 0,
          rx_length_errors = 1, rx_over_errors = 0, rx_crc_errors = 40, rx_frame_errors = 0, rx_fifo_errors = 6696144, rx_missed_errors = 0, tx_aborted_errors = 6696144, tx_carrier_errors = 0, tx_fifo_errors = 2,
          tx_heartbeat_errors = 0, tx_window_errors = 6696736, rx_compressed = 0, tx_compressed = 6654800}
#2  0x00007ffff6152fbb in auth_result (ses=0x662be8, r=0) at /usr/src/accel-ppp-code/accel-pppd/ctrl/ipoe/ipoe.c:611
        username = 0x662f20 "eth1"
#3  0x00007ffff588e024 in rad_auth_finalize (rpd=0x663038, r=0) at /usr/src/accel-ppp-code/accel-pppd/radius/auth.c:150
No locals.
#4  0x00007ffff588e26b in rad_auth_recv (req=0x663248) at /usr/src/accel-ppp-code/accel-pppd/radius/auth.c:196
        pack = 0x670848
        dt = 49
#5  0x00007ffff588b92f in rad_req_read (h=0x663258) at /usr/src/accel-ppp-code/accel-pppd/radius/req.c:422
        req = 0x663248
        pack = 0x670848
#6  0x00007ffff7bd784b in ctx_thread (ctx=0x662f58) at /usr/src/accel-ppp-code/accel-pppd/triton/triton.c:217
        h = 0x670768
        t = 0x662bf8
        call = 0x0
        tt = 6695928
        events = 1
#7  0x00007ffff7bd7610 in triton_thread (thread=0x662550) at /usr/src/accel-ppp-code/accel-pppd/triton/triton.c:159
        set = {__val = {516, 0 <repeats 15 times>}}
        sig = 10
        need_free = 0
#8  0x00007ffff77b5b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
No symbol table info available.
#9  0x00007ffff6a63fbd in clone () from /lib/x86_64-linux-gnu/libc.so.6
No symbol table info available.
#10 0x0000000000000000 in ?? ()
No symbol table info available.
blind_oracle
Posts: 5
Joined: 27 Sep 2016, 06:27

Re: Не инициируется сессия на версиях >=1.11

Post by blind_oracle »

В общем, поковырявшись сам дебаггером выяснил что к моменту обращения к структуре net (iputils.c:116) она является нулевым указателем т.к. объявлена как thread local storage (net.c:43 и ap_net.h:33), а инициализируется, судя по всему, в соседнем потоке. Убрал __thread, падать перестало, но теперь сессия валится на:

Code: Select all

[2016-09-30 00:04:47.565] ipoe0: e0e610e02b796dd0: 10.1.99.5: authentication succeeded
[2016-09-30 00:04:47.565] ipoe0: e0e610e02b796dd0: can't determine router address
[2016-09-30 00:04:47.565] ipoe0: e0e610e02b796dd0: terminate
[2016-09-30 00:04:47.565] ipoe0: e0e610e02b796dd0: ipoe: session finished
Результат работы iproute_get() (ipoe.c:816) присваивается ses->siaddr, а не ses->router, ошибка копипасты сверху из секции DHCP?

После исправления всё взлетело:

Code: Select all

[2016-09-30 00:27:55.563] ipoe0: e0e610e02b79798b: create interface ipoe0 parent eth1
[2016-09-30 00:27:55.563] ipoe0: e0e610e02b79798b: radius(1): req_enter 1
[2016-09-30 00:27:55.563] ipoe0: e0e610e02b79798b: send [RADIUS(1) Access-Request id=1 <User-Name "10.1.99.5"> <NAS-Identifier "accel-ppp"> <NAS-IP-Address 10.1.98.253> <NAS-Port 231> <NAS-Port-Id "ipoe0"> <NAS-Port-Type Ethernet> <Calling-Station-Id "14:b4:84:1b:e7:1c"> <Called-Station-Id "eth1"> <Framed-AppleTalk-Zone "ipoe"> <Framed-IP-Address 10.1.99.5> <User-Password >]
[2016-09-30 00:27:55.612] ipoe0: e0e610e02b79798b: radius:packet: vendor 26 not found
[2016-09-30 00:27:55.612] ipoe0: e0e610e02b79798b: radius(1): req_exit 0
[2016-09-30 00:27:55.612] ipoe0: e0e610e02b79798b: recv [RADIUS(1) Access-Accept id=1 <Session-Timeout 300> <Idle-Timeout 300> <Vendor-Specific > <L4-Redirect 1>]
[2016-09-30 00:27:55.612] ipoe0: e0e610e02b79798b: 10.1.99.5: authentication succeeded
[2016-09-30 00:27:55.613] ipoe0: e0e610e02b79798b: ipoe: session started
Всем спасибо за внимание! :) Внеси, плиз, исправления в гит чтобы свой патч не держать.
colorado
Posts: 1
Joined: 31 Oct 2016, 20:52

Re: Не инициируется сессия на версиях >=1.11

Post by colorado »

Апну тему
blind_oracle wrote:* Аксель пробовал 1.11 релиз и последний коммит из гита.

Результаты:
1) В режиме L2 на входящие пакеты из сети 10.1.99.0/24 (она connected на интерфейсе eth1) не реагирует от слова никак. Так и надо? Может я не правильно понял смысл этого режима?
До релиза 1.11.0 L2 режим на общем интерфейсе работал, сессии ожидаемо стартовали по неклассифицированному пакету (из сетей, указанных в local-net).

Что нужно сделать, чтобы и в новых версиях заработал start=up,mode=L2,shared=1? (Внести какие-то изменения в конфиг или просто оно "сломалось" и нужно ждать новых коммитов ...)

Еще один момент, из той же оперы, "Раньше работало, а сейчас - нет". При nat=1 и start=up,mode=L3,shared=1 в конфиге, когда радиус отдает Framed-IP-Address, этот адрес успешно назначается на ipoe интерфейс, сессия стартует, но трафик не ездит. Если убрать nat=1, то Framed-IP-Address от радиуса акселем игнорируется, на интерфейс назначается локальный IP клиента (он же, username), и все прекрасно бегает. Отсюда 2 вопроса: "кто виноват?" и "что делать?"

Заранее спасибо за ответ!
TeCHNoiD
Posts: 10
Joined: 24 Nov 2016, 00:35

Re: Не инициируется сессия на версиях >=1.11

Post by TeCHNoiD »

проблему подтверждаю, теже параметры

Code: Select all

[ipoe]
verbose=5
password=csid
shared=1
ifcfg=1
mode=L2
start=up
ip-unnumbered=1
proxy-arp=1
nat=1
local-net=10.101.100.0/22
interface=vlan99
gw-ip-address=10.101.100.1/22
сессия не стартует никак, при mode=L3 сессия нормально стартует, но не ходит трафик. радиус присылает белые ip, с роутингом все в порядке, через pppoe всё идёт

Code: Select all

ipoe0: flags=4177<UP,POINTOPOINT,RUNNING,MULTICAST>  mtu 1500
        inet 10.101.100.1  netmask 255.255.255.255  destination x.x.x.x
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20  bytes 1544 (1.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Post Reply