Добрый день.

Имеется машина с 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.

Проблема заключается в том, что не реже одного раза в неделю эта машина ловит 
kernel panic и перегружается.

Менять пробовал всё, что только можно: сетевые карты, полностью компьютер с 
переустановкой ОСи начисто, блок питания, патч-корды.

Научил машину скидывать дампы и ориентируясь на прошлые треды сделал с дампом 
следующее:

# kgdb -q /boot/kernel/kernel vmcore.0 | tee backtrace1.txt

Reading symbols from /boot/kernel/ipl.ko...Reading symbols from 
/boot/kernel/ipl.ko.symbols...done.
done.
Loaded symbols for /boot/kernel/ipl.ko
Reading symbols from /boot/kernel/ipfw.ko...Reading symbols from 
/boot/kernel/ipfw.ko.symbols...done.
done.
Loaded symbols for /boot/kernel/ipfw.ko
Reading symbols from /boot/kernel/libalias.ko...Reading symbols from 
/boot/kernel/libalias.ko.symbols...done.
done.
Loaded symbols for /boot/kernel/libalias.ko
#0  doadump () at pcpu.h:246
        in pcpu.h
(kgdb) bt
#0  doadump () at pcpu.h:246
#1  0xc089e9b7 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:416
#2  0xc089ec19 in panic (fmt=) at /usr/src/sys/kern/kern_shutdown.c:590
#3  0xc0bd3adc in trap_fatal (frame=0xc5335824, eva=4)
   at /usr/src/sys/i386/i386/trap.c:938
#4  0xc0bd3d60 in trap_pfault (frame=0xc5335824, usermode=0, eva=4)
   at /usr/src/sys/i386/i386/trap.c:851
#5  0xc0bd46a5 in trap (frame=0xc5335824) at /usr/src/sys/i386/i386/trap.c:533
#6  0xc0bb67bb in calltrap () at /usr/src/sys/i386/i386/exception.s:165
#7  0xc5ea206a in nat_new (fin=0xc5335968, np=0xc579ba00, natsave=0x0, flags=)
   at /usr/src/sys/modules/ipfilter/../../contrib/ipfilter/netinet/ip_nat.c:2610
#8  0xc5ea5f2e in fr_checknatout (fin=0xc5335968, passp=0xc5335964)
   at /usr/src/sys/modules/ipfilter/../../contrib/ipfilter/netinet/ip_nat.c:3861
#9  0xc5ec0039 in fr_check (ip=0xc71e5810, hlen=20, ifp=0xc5da2400, out=1, 
   mp=0xc5335a70)
   at /usr/src/sys/modules/ipfilter/../../contrib/ipfilter/netinet/fil.c:2624
#10 0xc5eb79be in fr_check_wrapper (arg=0x0, mp=0xc5335a70, ifp=0xc5da2400, 
   dir=2)
   at 
/usr/src/sys/modules/ipfilter/../../contrib/ipfilter/netinet/ip_fil_freebsd.c:186
#11 0xc0956658 in pfil_run_hooks (ph=0xc0def3a0, mp=0xc5335ae0, 
   ifp=0xc5da2400, dir=2, inp=0x0) at /usr/src/sys/net/pfil.c:82
#12 0xc09ac325 in ip_output (m=0xc6072400, opt=0x0, ro=0xc5335b50, flags=1, 
   imo=0x0, inp=0x0) at /usr/src/sys/netinet/ip_output.c:511
#13 0xc09a9239 in ip_forward (m=0xc6072400, srcrt=0)
   at /usr/src/sys/netinet/ip_input.c:1531
#14 0xc09aa942 in ip_input (m=0xc6072400)
   at /usr/src/sys/netinet/ip_input.c:735
#15 0xc0955a79 in netisr_dispatch_src (proto=1, source=0, m=0xc6072400)
   at /usr/src/sys/net/netisr.c:917
#16 0xc0955d10 in netisr_dispatch (proto=1, m=0xc6072400)
   at /usr/src/sys/net/netisr.c:1004
#17 0xc094bc81 in ether_demux (ifp=0xc5734000, m=0xc6072400)
   at /usr/src/sys/net/if_ethersubr.c:901
#18 0xc094c1d3 in ether_input (ifp=0xc5734000, m=0xc6072400)
   at /usr/src/sys/net/if_ethersubr.c:760
#19 0xc062a2da in lem_handle_rxtx (context=0xc5771000, pending=1)
   at /usr/src/sys/dev/e1000/if_lem.c:3616
#20 0xc08d83d2 in taskqueue_run (queue=0xc5768040)
   at /usr/src/sys/kern/subr_taskqueue.c:239
#21 0xc08d85dd in taskqueue_thread_loop (arg=0xc57755a8)
   at /usr/src/sys/kern/subr_taskqueue.c:360
#22 0xc0873df1 in fork_exit (callout=0xc08d8520 <taskqueue_thread_loop>, 
   arg=0xc57755a8, frame=0xc5335d38) at /usr/src/sys/kern/kern_fork.c:844
#23 0xc0bb6830 in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:270
(kgdb) bt full
#0  doadump () at pcpu.h:246
No locals.
#1  0xc089e9b7 in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:416
        _giantcnt = (kgdb) printf "%s", (char *)msgbufp->msg_ptr
kets/sec

Limiting icmp unreach response from 328 to 200 packets/sec
Limiting closed port RST response from 213 to 200 packets/sec
Limiting icmp unreach response from 298 to 200 packets/sec


Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address   = 0x4
fault code              = supervisor read, page not present
instruction pointer     = 0x20:0xc5ea206a
stack pointer           = 0x28:0xc5335864
frame pointer           = 0x28:0xc53358e8
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 0 (em1 taskq)
trap number             = 12
panic: page fault
cpuid = 0
Uptime: 6d0h8m58s
Physical memory: 1997 MB
Dumping 221 MB: 206 190 174 158 142 126 110 94 78 62 46 30 14268 to 200 
packets/sec

(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)



Опыта в отлове таких проблем у меня нет никакого, но чувствую, что дело в нате. 
Куда копать, что пробовать?

На всякий случай, если это может пригодиться, вот ссылка на core.txt из 
директории /var/crash (~180kb): http://dl.dropbox.com/u/83258/core.txt

Если нужна ещё какая-то информация, пишите, предоставлю.

Заранее спасибо за потраченное время.

Alexey Karguine
[email protected]



Ответить