Search squid archive

Cache_peer based on destination's geoip

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

 



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?

Thanks for your help, and sorry for the long message.


      



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

  Powered by Linux