22.02.11 @ 20:33 Alexey Karguine wrote:
Имеется машина с 8.1. ОС ставилась с нуля. Ядро GENERIC. Никакие
переменные в sysctl.conf и loader.conf не заданы.
[mu] /var/crash % uname -a
FreeBSD mu.global-net.ru 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Mon Jul 19
02:55:53 UTC 2010
[email protected]:/usr/obj/usr/src/sys/GENERIC i386
[mu] /var/crash % kldstat
Id Refs Address Size Name
1 8 0xc0400000 bb5504 kernel
2 1 0xc5ea1000 37000 ipl.ko
3 1 0xc60e6000 11000 ipfw.ko
4 1 0xc60f8000 d000 libalias.ko
В машине установлены две интеловские гигабитные карточки. На одной из
них подняты два влана. Работает quagga, забирает bgp-маршруты (не
full-view). Также эта машина натит трафик с помощью ipnat.
А зачем ipfw/libalias, если ipnat?
Проблема заключается в том, что не реже одного раза в неделю эта машина
ловит kernel panic и перегружается.
Менять пробовал всё, что только можно: сетевые карты, полностью
компьютер с переустановкой ОСи начисто, блок питания, патч-корды.
Зачем это шаманство, если по dmesg явно видно активное сканирование
tcp-портов?
#6 0xc0bb67bb in calltrap () at /usr/src/sys/i386/i386/exception.s:165
#7 0xc5ea206a in nat_new (fin=0xc5335968, np=0xc579ba00, natsave=0x0,
fault virtual address = 0x4
fault code = supervisor read, page not present
(kgdb) list *0xc5ea206a
0xc5ea206a is in nat_new
(/usr/src/sys/modules/ipfilter/../../contrib/ipfilter/netinet/ip_nat.c:2610).
2605 nat->nat_ifps[1] = np->in_ifps[1];
2606 nat->nat_ptr = np;
2607 nat->nat_p = fin->fin_p;
2608 nat->nat_mssclamp = np->in_mssclamp;
2609 if (nat->nat_p == IPPROTO_TCP)
2610 nat->nat_seqnext[0] = ntohl(tcp->th_seq);
2611
2612 if ((np->in_apr != NULL) && ((ni->nai_flags & NAT_SLAVE) == 0))
2613 if (appr_new(fin, nat) == -1)
2614 return -1;
(kgdb)
Я не знаком с этим кодом, но, похоже, где-то битый указатель, то ли
natsave, то ли tcp. Делать up в kgdb до тех пор, пока не будет в функции
nat_new(), после чего сделать p nat и p tcp, если какой-то из них
ненулевой, делать p *nat и p *tcp. Полученное вместе с трейсом в send-pr.
Опыта в отлове таких проблем у меня нет никакого, но чувствую, что дело
в нате. Куда копать, что пробовать?
Пробовать лучше перейти на другой нат - ipfilter давно уже deprecated.
Покопать можно в сторону зарезки лишних пакетов (сканы портов).
--
WBR, Vadim Goncharov