Hello.

I use ipfilter to do NAT and stateful ip filtering and i really like it.
I use dummynet to limit bandwidth and i really like it too.

The problem is they don't work together in specific situation.

my ipf.rules (in simplification):

block in log all
block out log all
pass out quick on ppp0 proto tcp all flags S keep state keep frags
pass out quick on ppp0 proto udp all keep state keep frags
pass out quick on ppp0 proto icmp all keep state keep frags

ipfw configuration (excluding counters):

ipfw add pipe 1 tcp from any 1025-2400 to any out
ipfw pipe 1 config bw 4Kbytes/s
ipfw add pipe 2 tcp from any 20 to any out
ipfw pipe 2 config bw 3Kbytes/s
ipfw allow all from any to any

So i noticed that ipfilter isn't keeping state correctly on outcoming
tcp connections when above ipfw rules are in charge.
For example ipfstat -t shows connections that are never fully established,
they stop at 4/3. There is no data exchange. I observed that:

gateway.36023 -> mailhost.25 S
mailhost.25 -> gateway.36023 SA
mailhost.25 -> gateway.36023 SA
 
and connection is not established.. in ipflog we can see:
ppp0: @0:7 b 217.96.180.81,36023 -> 213.180.130.33,25 PR tcp len 20 52 -AF OUT

Packet was blocked. But it shouldn't be.. I can successfuly connect to 
this mailhost if before "ipfw add pipe ..." rules I had put 
ipfw add allow ip from any to any. 

Summarizing: When I try to limit bandwidth i can't use tcp with keep state.
Precisely: I can't use tcp from hosts behind gateway (NAT), I can establish
tcp connections from gateway.

I don't think that exhausting state table is the case here. Even when I had 
done ipf -FSs tcp didn't work. 

Perhaps I'm missing something obvious (too much time i spent on this problem),
I will be very grateful for every idea, explanation, hint or solution. 

best regards, B.
ps. I'm attaching revelant tcpdump, ipfstat -s and ipnat -s output.
# ipfstat -s
IP states added:
        10111 TCP
        3335 UDP
        5330 ICMP
        1017243 hits
        654090 misses
        0 maximum
        0 no memory
        526 bkts in use
        545 active
        8665 expired
        9566 closed

# ipnat -s
mapped  in      140179  out     138894
added   11916   expired 11343
no memory       0       bad nat 0
inuse   573
rules   15
wilds   0
20:54:54.835061 217.96.180.81.37836 > 213.180.130.33.25: S 1001007946:1001007946(0) 
win 16060 <mss 1460,sackOK,timestamp 4975732 0,nop,wscale 0> (DF) [tos 0x10] 
20:54:54.877479 213.180.130.33.25 > 217.96.180.81.37836: S 3076683582:3076683582(0) 
ack 1001007947 win 10136 <nop,nop,timestamp 1129079898 4975732,nop,wscale 
0,nop,nop,sackOK,mss 1460> (DF)
20:54:58.243475 213.180.130.33.25 > 217.96.180.81.37836: S 3076683582:3076683582(0) 
ack 1001007947 win 10136 <nop,nop,timestamp 1129080235 4975732,nop,wscale 
0,nop,nop,sackOK,mss 1460> (DF)
20:55:04.964428 213.180.130.33.25 > 217.96.180.81.37836: S 3076683582:3076683582(0) 
ack 1001007947 win 10136 <nop,nop,timestamp 1129080910 4975732,nop,wscale 
0,nop,nop,sackOK,mss 1460> (DF)

Reply via email to