Wes Zuber wrote:
> Darren, I noticed on another box that it looks like this:
>
> IP states added:
> 446043 TCP
> 735333 UDP
> 21536 ICMP
> 80110891 hits
> 47075066 misses
> 0 maximum
> 0 no memory
> 92 bkts in use
> 92 active
> 756869 expired
> 445951 closed
>
>
> bkts and active pretty much matching up.
>
>
> But on the box that is having the issue (and a bunch more traffic and
> connections)
>
> IP states added:
> 503251 TCP
> 103500 UDP
> 63074 ICMP
> 59277927 hits
> 31067012 misses
> 49128 maximum
> 0 no memory
> 44 bkts in use
> 9040 active
> 166568 expired
> 494217 closed
>
>
> When I check the state table I see about 44 connections.. certainly not
> 9 thousand by any means, if this helps at all.
>
> Almost seems like the count is not decrementing or something once the
> state is actually cleared.
>
> Thanks,
>
> --Wes
>
> On Aug 14, 2006, at 12:03 PM, Darren Reed wrote:
>
>>> Hi there,
>>>
>>> running FreeBSD 6.1 stable with:
>>>
>>> ipf: IP Filter: v4.1.13 (416)
>>> Kernel: IP Filter: v4.1.13
>>> Running: yes
>>> Log Flags: 0x20000000 = block
>>> Default: block all, Logging: available
>>> Active list: 1
>>> Feature mask: 0xa
>>>
>> ..
>>> If we run ipfstat -FS it only clears a few states.. If I run ipfstat -
>>> sl we only see a fraction of the states.
>>>
>>>
>>> On previous versions ipfstat -FS always knocked the state table to
>>> zero then it started building again.
>>
>> I think you mean "ipf -FS". Try "ipf -FS -Fs".
>>
>> Darren
Following complaints of poor performance (substantiated by mrtg network
packet loss and traffic graphs) I think I've just seen what looks like a
very similar issue on one of our firewall routers (FreeBSD
5.4-RELEASE-p22 with ipfilter 4.1.13). It's one of approximately 10
absolutely identical machines (same hardware, same parent build binaries
installed), but is the only one currently exhibiting these problems.
Whilst it is probably the one of the busier ones in terms of
'connections', hence state turnover, it is not at all busy in terms of
traffic.
router:~ $ sysctl -a net.inet.ipf
net.inet.ipf.fr_flags: 0
net.inet.ipf.fr_pass: 134217730
net.inet.ipf.fr_active: 0
net.inet.ipf.fr_tcpidletimeout: 86400
net.inet.ipf.fr_tcphalfclosed: 14400
net.inet.ipf.fr_tcpclosewait: 480
net.inet.ipf.fr_tcplastack: 480
net.inet.ipf.fr_tcptimeout: 480
net.inet.ipf.fr_tcpclosed: 120
net.inet.ipf.fr_udptimeout: 240
net.inet.ipf.fr_udpacktimeout: 24
net.inet.ipf.fr_icmptimeout: 120
net.inet.ipf.fr_defnatage: 1200
net.inet.ipf.fr_ipfrttl: 120
net.inet.ipf.fr_running: 1
net.inet.ipf.fr_statesize: 399979
net.inet.ipf.fr_statemax: 279883
net.inet.ipf.ipf_nattable_sz: 2047
net.inet.ipf.ipf_natrules_sz: 127
net.inet.ipf.ipf_rdrrules_sz: 127
net.inet.ipf.ipf_hostmap_sz: 2047
net.inet.ipf.fr_authsize: 32
net.inet.ipf.fr_authused: 0
net.inet.ipf.fr_defaultauthage: 600
net.inet.ipf.fr_chksrc: 0
net.inet.ipf.fr_minttl: 4
router:~ $ sudo ipfstat -s
IP states added:
52878784 TCP
284828793 UDP
1314093 ICMP
3431784467 hits
810105418 misses
1390510 maximum
0 no memory
5121 bkts in use
278711 active
286138681 expired
52604278 closed
State logging enabled
State table bucket statistics:
5121 in use
1.28% bucket usage
0 minimal length
2 maximal length
1.008 average length
I routinely log the output of 'ipfstat -s' (and many other things) to a
file every couple of minutes to help diagnose resource exhaustion.
Running the 'ipfstat -s' output through a small analysis program shows
that the number of 'active' states is permanently hovering dangerously
near or hitting the maximum, hence the increasing 'maximum' counter.
Just like Wes, we only see a small number of state entries in the table,
which makes it impossible to see with-what and why the table is full:
router: $ sudo ipfstat -R -sl | grep '^[.0-9]\{1,\} ->' | wc -l
5589
this number approximates the number of buckets in use above.
Following Darren's suggestion in answer to Wes, I also tried:
router:analyse $ sudo ipf -Fs
router:analyse $ sudo ipfstat -s
IP states added:
52883307 TCP
284859681 UDP
1314258 ICMP
3432259293 hits
810184346 misses
1390583 maximum
0 no memory
3670 bkts in use
277255 active
286171244 expired
52608747 closed
State logging enabled
State table bucket statistics:
3670 in use
0.92% bucket usage
0 minimal length
2 maximal length
1.007 average length
and
router:analyse $ sudo ipf -FS
router:~ $ sudo ipfstat -s
IP states added:
52883977 TCP
284862978 UDP
1314270 ICMP
3432313434 hits
810194606 misses
1390583 maximum
0 no memory
1268 bkts in use
274830 active
286176199 expired
52610196 closed
State logging enabled
State table bucket statistics:
1268 in use
0.32% bucket usage
0 minimal length
2 maximal length
1.002 average length
both made very little difference to the number of active states -
in fact, they've only affected the 'bkts in use' which is approximately
the number seen in the output of 'ipfstat -R -sl'.
We've been forced to reboot the machine to clear the problem, but
already I notice that there is a considerable disparity between the
entries in the state table and the 'active' states:
router $ sudo ipfstat -s
IP states added:
608735 TCP
3058970 UDP
11518 ICMP
95440825 hits
25601396 misses
0 maximum
0 no memory
30396 bkts in use
39408 active
3052623 expired
587192 closed
State logging enabled
State table bucket statistics:
30396 in use
7.60% bucket usage
0 minimal length
4 maximal length
1.067 average length
$ sudo ipfstat -R -sl | grep -- '^[.0-9]* ->' | wc -l
33488
Doing a quick survey of all my routers I find that a number of them
exhibit this sort of disparity (the active ones), with some of the
differences being quite large:
router active statetbl active-statetbl
2 21 20 1
3 7550 5853 1697
4 133 37 96
5 119888 22560 97328
6 25 25 0
7 37461 30154 7307 <- this is the router discussed above
8 32248 6213 26035
9 20624 8499 12125
10 12593 4570 8023
11 3 3 0
12 150645 34458 116187
13 116973 18377 98596
14 5 5 0
15 6 6 0
16 6 6 0
17 6 6 0
I have been considering whether I need to adjust some of the ipf.fr_*
timeouts downwards, but since the states don't appear in the state table
I'm not very confident that this will make any difference (when I've had
problems which were helped by adjusting timeouts before, the state table
always looked full).
I'm now wondering what the 'invisible' states are (Darren mentioned
'orphans'), how they get created and if there is a way to clear them and
free up resources again.
Thanks in advance for any light shed or wisdom dispensed.
Best wishes,
Simon
--
----------------------------------------------------------------------
Dr Simon A. Boggis Senior Network Analyst
Computing Services, Tel. 020 7882 7078
Queen Mary, University of London, London E1 4NS UK.