On Tue, 20 Sep 2011 15:15:32 +0300, Tux Mason wrote:
Hello,
Thank you for the prompt reply.
When I set my browser to use the troxy port, netstat output shows
SYN_SENT for a while and the connection times out.
Of course. Squid is required to invert the connecting IP addresses
on
arrival at a tproxy port. You CAN NOT send forward-proxy traffic
from the
browser to a Squid tproxy flagged port and have anything useful come
out the
WAN side of Squid.
Set your browser to use no proxy at all and the Squid box as its box
gateway
router.
My goal is to use WCCP with squid 3.1.x and TPROXY4.
I would like to test with my browser first and ensure all is well
before i can make any permanent settings on my router.
I use the squid box for caching only and not routing.
Routing is not optional. TPROXY operates by catching packets as they
pass through the box. It must be setup either as a 'normal' router or as
a bridging router.
Note that there is no need for it to be the only router, or even to
handle all outgoing traffic. One of the network designs is to have a
main gateway router use WCCP to pass port 80 packets from LAN to the
squid box for teh TPROXY steps and routing to take place. The routing
Squid box does is usually just to send the packets back to the main
gateway after TROXY.
To test the TPROXY functionality, you can plug your test workstation
into the squid box as the only client and use it as that workstations
gateway router. It is a good idea not to get WCCP involved until you are
sure that at least will work.
Once that is done and being tested correctly. Check your rpfilter
settings
against the wiki page. I have reason to believe the wiki docs are
now out of
date as of kernel 2.6.35 and incorrect regarding rpfilter. But none
has yet
confirmed which altered settings we need.
---- /etc/sysctl.conf
-------------------------------------------------------------------------------------------------------------
# Enable source routing
net.ipv4.conf.all.accept_source_route = 1
net.ipv4.conf.lo.accept_source_route = 1
net.ipv4.conf.eth0.accept_source_route = 1
net.ipv4.conf.default.accept_source_route = 1
Source route is not relevant to TPROXY. Where the routing stages happen
on packet output from squid or on bypassed traffic.
Probably best to leave that at its default.
# Enable IP spoofing
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
One of the kernel guys informs that rp_filter "2" now means loose
routing checks. "0" should still mean none (I think), so that should be
fine.
# Enable packet forwarding
net.ipv4.ip_forward=1
----------------------------------------------------------------------------------------------------------------------------------------
---------- squid.conf excerpt
I see no NAT rules for port 3128 interception.
I used squid interception on port 3128 with WCCP and it worked ok.
That means the client->WCCP_router->Squid stage works. NAT and TPROXY
have very different outgoing packets, so means nothing about outgoing
Squid->WCCP_router->Internet traffic.
Below is the rule I was using for NAT (on the squid box) after
creating the required gre tunnel between the cisco router and the
squid box.
iptables -t nat -A PREROUTING -i wccp0 -p tcp -m tcp --dport 80 -j
DNAT --to-destination <SQUID_PUBLIC_IP>:3128
My objective now is to get squid TPROXY4 working with one or two pcs
before I can attempt to make it work with WCCP.
This way I can be sure that my squid server is well configured in
case
i run into trouble when configuring WCCP.
In my firefox settings, I set the proxy server to <SQUID_PUBLIC_IP>
and the port to 80. (squid tproxy is running on port 3129)
This will make the browser send packets from its IP to the domain which
is being hosted on the Squid IP on port 80.
TPROXY will tell Squid to send packets to SQUID_PUBLIC_IP on port 80,
using the browser IP as outgoing.
Squid will connect to itself using port 80 and sending the client IP as
source....
Like I said, configuring the browser to be aware of the proxy _is not
possible_ with TPROXY. It only ever worked with NAT because of a bug,
which is now fixed.
The browser MUST be connecting directly to the IP and port where some
website is hosted. The network routing functionality makes sure the
packets flow through the squid box, where TPROXY there can pick packets
up.
The iptables status shows that the packets are forwarded from port 80
to port 3129 ok.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
root@cache1:~# iptables -t mangle -L -v -n
Chain PREROUTING (policy ACCEPT 1856 packets, 185K bytes)
pkts bytes target prot opt in out source
destination
160K 6616K DIVERT tcp -- eth0 * 0.0.0.0/0
0.0.0.0/0 socket
24 1112 TPROXY tcp -- eth0 * 0.0.0.0/0
0.0.0.0/0 tcp dpt:80 TPROXY redirect
<SQUID_PUBLIC_IP>:3129
mark 0x1/0x1
Chain INPUT (policy ACCEPT 160K packets, 6632K bytes)
pkts bytes target prot opt in out source
destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source
destination
Chain OUTPUT (policy ACCEPT 317K packets, 34M bytes)
pkts bytes target prot opt in out source
destination
Chain POSTROUTING (policy ACCEPT 317K packets, 34M bytes)
pkts bytes target prot opt in out source
destination
Chain DIVERT (1 references)
pkts bytes target prot opt in out source
destination
160K 6616K MARK all -- * * 0.0.0.0/0
0.0.0.0/0 MARK set 0x1
160K 6616K ACCEPT all -- * * 0.0.0.0/0
0.0.0.0/0
That looks right for the rules. I think this whole issue is simply the
browser configuration (ie the testing method).
Amos