[tproxy] tproxy4, kernel 2.6.22 and squid-2.6.stable13
Laszlo Attila Toth
panther at balabit.hu
Thu Nov 22 10:22:14 CET 2007
Ming-Ching Tiew írta:
> After checking the mail archive and did some testings, I noticed
> there are quite many different versions of the stuff floating around.
>
> Those in the netfilter web site has given me lots of headaches
> ( kernel version, iptable version and so on ), so I figured that I
> would dig more deeply into the version on balabit website, ie
> tproxy-4.0.3-2.6.22.tgz since they seems to only has minor
> incompatibility with squid.
>
> After installing the patch to a 2.6.22 kernel and compiling
> iptables 1.3.8, everything went on smoothly. And I testing a
> version of squid-2.6.stable13 with has been previously working
> with tproxy2 ( and I did modprobe iptable_tproxy tproxy_any=1 ),
> I noticed that squid is able to receive the redirected traffic.
>
> It's positive so far !
>
> However upon checking the traffic, I noticed that the spoofing is not
> working, even though the http has been cached by squid.
>
> The squid cache.log says :-
>
> tproxy ip=192.168.1.5,0x576e4c0,port=0 ERROR ASSIGN
>
> That would be quite understandable, because the binary for
> squid has been compiled with ( ~/src/forward.c ) :-
>
> itp.v.addr.faddr.s_addr = fwdState->src.sin_addr.s_addr;
> itp.v.addr.fport = 0;
> itp.op = TPROXY_ASSIGN;
> if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp, sizeof(itp)) == -1)
> {
> debug(20, 1) ("tproxy ip=%s,0x%x,port=%d ERROR ASSIGN\n",
> inet_ntoa(itp.v.addr.faddr),
> itp.v.addr.faddr.s_addr,
> itp.v.addr.fport);
> } else {
> itp.op = TPROXY_FLAGS;
> itp.v.flags = ITP_CONNECT;
> if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp, sizeof(itp))
> == -1)
> debug(20, 1) ("tproxy ip=%x,port=%d ERROR CONNECT\n",
> itp.v.addr.faddr.s_addr,
> itp.v.addr.fport);
> }
>
> The tproxy-4.0.3-2.6.22.tgz did not mention how a source should be changed
> to use the new tproxy, I did try using IP_FREEBIND ( using
> #define IP_FREEBIND 15 ) and the error goes away, but the spoofing has
> not been done.
Hello,
basically you don't need that whole code, only the IP_FREEBIND as you
did, plus a bind() call with the address itp.v.addr.faddr.s_addr, port
itp.v.addr.fport.
>
> Any suggestion where else should I check to convince squid to using the
> new spoofing mechanism ?
>
--
Panther
More information about the tproxy
mailing list