maybe a bug in the conntrack ?
Eric Belhomme
{gmane}+no/spam at ricospirit.net
Tue Nov 14 14:25:07 CET 2006
Hi,
I'm not a guru on netfilter nor linux ip stack, but I have a strange
problem and I suspect à bug :
My config : Debian Sarge with a vanilla 2.6.18.2 kernel, iptables 1.2.11
there is 3 eth intefaces on this gateway :
* eth0 192.168.1.254/24 connected to my lan
* eth1 connected to my isp (I have a static public ip address)
* eth2 10.75.1.254 connected to a DMZ
There is also an alias on eth0:1 192.168.100.0/24 for a pseudo dmz
the goal is a host from LAN _must_ be routed on the linux box to connect to
a host 192.168.100.254, even if they are on the same ethernet segment.
this is the begining of my FORWARD rules (default policy is DROP)
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED
log_drop tcp -- 0.0.0.0/0 0.0.0.0/0 state INVALID
log_drop udp -- 0.0.0.0/0 0.0.0.0/0 state INVALID
ACCEPT tcp -- 192.168.1.0/24 192.168.100.0/24 state NEW
So a host 192.168.1.125 should be able to connect to 192.168.100.1, but
look at a tcpdum session on the router :
# tcpdump -n -i eth0 net 192.168.100.254
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:46:08.297208 IP 192.168.1.125.3580 > 192.168.100.254.22: S
3913030203:3913030203(0) win 65535 <mss 1460,nop,nop,sackOK>
13:46:08.297289 IP 192.168.1.125.3580 > 192.168.100.254.22: S
3913030203:3913030203(0) win 65535 <mss 1460,nop,nop,sackOK>
13:46:08.297585 IP 192.168.1.125.3580 > 192.168.100.254.22: . ack
2474300259 win 65535
13:46:11.497946 IP 192.168.1.125.3580 > 192.168.100.254.22: . ack 1 win
65535
13:46:17.496303 IP 192.168.1.125.3580 > 192.168.100.254.22: . ack 1 win
65535
You can see the source host emits a SYN packet entering on eth0, then
reemitted on the same interface, then it emits a ACK, while the dest hosts
didn't acknowledged the SYN by a SYN-ACK packet !
The cause is on my /var/log/message :
# tail -n 1000 /var/log/messages|grep 192.168.100.254
Nov 14 13:46:08 localhost kernel: IPT_DROP: IN=eth0 OUT=eth0 SRC=
192.168.1.125 DST=192.168.100.254 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=
51586 DF PROTO=TCP SPT=3580 DPT=22 WINDOW=65535 RES=0x00 ACK URGP=0
Nov 14 13:46:11 localhost kernel: IPT_DROP: IN=eth0 OUT=eth0 SRC=
192.168.1.125 DST=192.168.100.254 LEN=40 TOS=0x00 PREC=0x00 TTL=127 ID=
51589 DF PROTO=TCP SPT=3580 DPT=22 WINDOW=65535 RES=0x00 ACK URGP=0
So packets from dest host to source host are rejected by netfilter because
conntrack macked them as INVALID !
I done a test by moving rule 5 at 1st position in FORWARD table, and insert
a new rule :
# iptables -I FORWARD 2 -i eth0 -o eth0 -s 192.168.100.0/24 -d
192.168.1.0/24 -j ACCEPT
In this case the SYN-ACK packet comes back, but next packet are DROPPED.
So I replaced the 1st rule by this one :
# iptables -R FORWARD 1 -i eth0 -o eth0 -s 192.168.1.0/24 -d
192.168.100.0/24 -j ACCEPT
and now the connection goes ok... while it is macked as and INVALID
connection !
So what are you thinking about that ?
Regards,
--
Rico
More information about the netfilter
mailing list