Search squid archive

Re: Cache_peer based on destination's geoip

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 26 Oct 2009 01:06:21 -0700 (PDT), Frito Lay
<lameventanas@xxxxxxxxx> wrote:
> Hello list,
> 
> Some medieval country that shall remain unnamed is blocking access to
some
> specific websites, but the list of websites is huge, dynamic, and not
> public.
> 
> I have two proxy servers, one of which is located outside of this
> firewall, but access to this proxy server is slower than to the local
one.
> 
> I would like to configure the local proxy to use a peer cache based on
the
> geoip address of the destination.
> 
> If the required object belongs to a specific country then the request
will
> go through the second proxy.
> 
> I know about the cache_peer_domain option, but I would like to use a
geoip
> based solution.
> 
> So this is what I came up with:
> 
> external_acl_type GeoIP ttl=1 negative_ttl=1 children=1 concurrency=0
%DST
> /var/tmp/acl_geoip.pl
> acl AclGeoIP
>  external GeoIP
> cache_peer 10.160.48.250 sibling 8080 0 name=external_proxy
> cache_peer_access external_proxy allow AclGeoIP
> cache_peer_access external_proxy deny all
> 
> /var/tmp/acl_geoip.pl is a dummy script that logs its input and returns
> "OK":
> 
> #!/usr/bin/perl
> open FD, ">/tmp/test.$$";
> select FD;
> $|=1;
> select STDOUT;
> $|=1;
> print FD "Starting $0 with parameters: "..join(', ',@ARGV)."\n";
> 
> while (<STDIN>) {
>     print FD $_;
>     print "OK\n";
> }
> close FD;
> 
> I can see the "Starting xxx with parameters xxx" in the log file, but
> nothing else is written.
> 
> This is what I get on the logs when visiting yahoo:
> 
> 2009/10/26 16:08:10.776| FwdState::start() 'http://www.yahoo.com/'
> 2009/10/26 16:08:10.776| StoreEntry::lock: key
> '312257ED4F8C8AE02ABE51C413EC3927'
>  count=2
> 2009/10/26
>  16:08:10.776| peerSelect: http://www.yahoo.com/
> 2009/10/26 16:08:10.776| StoreEntry::lock: key
> '312257ED4F8C8AE02ABE51C413EC3927' count=3
> 2009/10/26 16:08:10.776| peerSelectFoo: 'GET www.yahoo.com'
> 2009/10/26 16:08:10.776| peerCheckNetdbDirect: MY RTT = 0 msec
> 2009/10/26 16:08:10.776| peerCheckNetdbDirect: minimum_direct_rtt = 400
> msec
> 2009/10/26 16:08:10.776| peerCheckNetdbDirect: MY hops = 0
> 2009/10/26 16:08:10.776| peerCheckNetdbDirect: minimum_direct_hops = 4
> 2009/10/26 16:08:10.776| whichPeer: from 0.0.0.0 port 0
> 2009/10/26 16:08:10.776| peerSelectFoo: direct = DIRECT_MAYBE
> 2009/10/26 16:08:10.776| peerDigestLookup: peer 10..160.48.250
> 2009/10/26 16:08:10.776| aclCheckFast: list: 0xb81bc748
> 2009/10/26 16:08:10.776| ACLChecklist::preCheck: 0xbfa30b24 checking
>  'cache_peer_access external_proxy
>  allow AclGeoIP'
> 2009/10/26 16:08:10.776| ACLList::matches: checking AclGeoIP
> 2009/10/26 16:08:10.776| ACL::checklistMatches: checking 'AclGeoIP'
> 2009/10/26 16:08:10.776| aclMatchExternal: GeoIP("www.yahoo.com") =
lookup
> needed
> 2009/10/26 16:08:10.776| aclMatchExternal: "www.yahoo.com": entry=@0,
age=0
> 2009/10/26 16:08:10.776| aclMatchExternal: "www.yahoo.com": queueing a
> call.
> 2009/10/26 16:08:10.776| aclMatchExternal: "www.yahoo.com": return -1.
> 2009/10/26 16:08:10.776| ACL::ChecklistMatches: result for 'AclGeoIP' is
-1
> 2009/10/26 16:08:10.776| ACLList::matches: result is false
> 2009/10/26 16:08:10.776|
>  aclmatchAclList: 0xbfa30b24 returning false (AND list entry failed to
>  match)
> 2009/10/26 16:08:10.776| aclmatchAclList: async=0 nodeMatched=0
> async_in_progress=0 lastACLResult() = 0 finished() = 0
> 2009/10/26 16:08:10.776| ACLChecklist::preCheck: 0xbfa30b24 checking
> 'cache_peer_access external_proxy deny all'
> 2009/10/26 16:08:10.776| ACLList::matches: checking all
> 2009/10/26 16:08:10.776| ACL::checklistMatches: checking 'all'
> 2009/10/26 16:08:10.776| aclMatchIp: '172.16.10.10' found
> 2009/10/26 16:08:10.776| ACL::ChecklistMatches: result for 'all' is 1
> 2009/10/26 16:08:10.776| ACLList::matches: result is true
> 
> So the acl is evaluated, returns false, and the log file doesn't have
any
> output.  How come?

Nope. The helpers is a "slow" category lookup being used in a "fast"
category access list. The helper is never called, just the existing results
cache tested to see if a result is known.
http://wiki.squid-cache.org/SquidFaq/SquidAcl#Fast_and_Slow_ACLs

To get this to work you need to use the ACL in a "slow" category access
list such as http_access first to get the result cached in Squid so it can
be retrieved without any delays by cache_peer_access.

Amos


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux