squid: não é possível conectar-se ao peer com tcp_outgoing_address

1

Eu encontrei o problema com a configuração de dois servidores de lula. Eu tenho o seguinte esquema -

A idéia principal é baixar todos os arquivos do rackspace e do amazon através do pai squid e armazenar todos os arquivos em seu cache.

No servidor main_squid foi configurado o PBR (iptables + ip route). Todos os pacotes passam pelos mesmos canais pelos quais os pedidos foram recebidos

# ip ru sh
0:      from all lookup local
1000:   from all fwmark 0x3e8 lookup ISP1
2000:   from all fwmark 0x7d0 lookup ISP2
3011:   from all fwmark 0xbc3 lookup ISP3
32762:  from xxx.xxx.xxx.62 lookup ISP1
32763:  from yyy.yyy.yyy.239 lookup ISP2
32764:  from zzz.zzz.zzz.10 lookup ISP3
32766:  from all lookup main
32767:  from all lookup default

main_squid squid.conf http_port 192.168.210.1:3128 transparente

cache_peer 192.168.220.2 sibling 3128 3130
dead_peer_timeout 5 seconds

acl AMAZON dstdom_regex -i (.*)s3\.amazonaws\.com
cache_peer_access 192.168.220.2 allow AMAZON

acl RACKSPACE dstdom_regex -i (.*)rackcdn\.com
cache_peer_access 192.168.220.2 allow RACKSPACE

url_rewrite_program /usr/bin/squidguard
url_rewrite_children 32

cache_dir null /tmp
cache_store_log none
cache deny all

acl local_net src 192.168.0.0/16
http_access allow local_net

parent_squid squid.conf

http_port 192.168.220.2:3128
acl main_squid src 192.168.220.1

http_access allow main_squid
http_access allow manager localhost
http_access allow manager main_squid

icp_access allow main_squid

cache_mem 30 GB
maximum_object_size_in_memory 128 MB
cache_dir aufs /squid 400000 16 256
minimum_object_size 16384 KB
maximum_object_size 1024 MB
cache_swap_low 93
cache_swap_high 98

acl PSD urlpath_regex -i \.psd$
cache allow PSD

acl ZIP urlpath_regex -i \.zip$
cache allow ZIP

acl OTHER url_regex -i ^http://*
cache deny OTHER

refresh_pattern \.psd$ 2592000 100 2592000 override-lastmod
override-expire ignore-reload ignore-no-cache
refresh_pattern \.zip$ 2592000 100 2592000 override-lastmod
override-expire ignore-reload ignore-no-cache

Tudo funciona bem, até eu descomentar em main_squid a seguinte linha

tcp_outgoing_address yyy.yyy.yyy.239

Quando tento baixar qualquer arquivo zip da amazon, vejo a seguinte mensagem em cache.log

2013/04/22 01:00:41| TCP connection to 192.168.220.2/3128 failed

Se eu executo o tcpdump em yyy.yyy.yyy.239, eu vejo que o main_squid tenta se conectar ao pai via interface externa sem sucesso.

Então, minha pergunta. Como posso configurar o main_squid que ele poderia se conectar ao pai mesmo com a opção tcp_outgoing_address configurada?

P.S.

# squid -v
Squid Cache: Version 2.6.STABLE21
configure options:  '--host=x86_64-unknown-linux-gnu'
'--build=x86_64-unknown-linux-gnu' '--program-prefix=' '--prefix=/usr'
'--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin'
'--sysconfdir=/etc' '--includedir=/usr/include' '--libdir=/usr/lib64'
'--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib'
'--mandir=/usr/share/man' '--infodir=/usr/share/info'
'--exec_prefix=/usr' '--bindir=/usr/sbin'
'--libexecdir=/usr/lib64/squid' '--localstatedir=/var'
'--datadir=/usr/share' '--sysconfdir=/etc/squid' '--enable-arp-acl'
'--enable-epoll' '--enable-snmp' '--enable-removal-policies=heap,lru'
'--enable-storeio=aufs,coss,diskd,null,ufs' '--enable-ssl'
'--with-openssl=/usr/kerberos' '--enable-delay-pools'
'--enable-linux-netfilter' '--with-pthreads'
'--enable-ntlm-auth-helpers=SMB,fakeauth'
'--enable-external-acl-helpers=ip_user,ldap_group,unix_group,wbinfo_group'
'--enable-auth=basic,digest,ntlm,negotiate'
'--enable-negotiate-auth-helpers=squid_kerb_auth'
'--enable-digest-auth-helpers=password'
'--with-winbind-auth-challenge' '--enable-useragent-log'
'--enable-referer-log' '--disable-dependency-tracking'
'--enable-cachemgr-hostname=localhost' '--enable-underscores'
'--enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SMB,YP,getpwnam,multi-domain-NTLM,SASL'
'--enable-cache-digests' '--enable-ident-lookups'
'--enable-follow-x-forwarded-for' '--enable-wccpv2'
'--enable-fd-config' '--with-maxfd=16384'
'build_alias=x86_64-unknown-linux-gnu'
'host_alias=x86_64-unknown-linux-gnu' 'CFLAGS=-D_FORTIFY_SOURCE=2
-fPIE -Os -g -pipe -fsigned-char' 'LDFLAGS=-pie'

Qualquer ajuda seria muito apreciada

    
por ALex_hha 23.04.2013 / 21:53

2 respostas

0

se alguém estiver interessado, abaixo eu adicionei arquivos de configuração de trabalho (main / parent squid)

arquivo de configuração principal do squid (192.168.220.1)

acl local_net src 192.168.0.0/16
acl parent_peer peername PARENT_PEER
acl parent_squid dst 192.168.220.2

acl FILE_TO_CACHE urlpath_regex \.(zip|iso|rar)$
acl STORAGE dstdomain storage.example.net

http_port 192.168.220.1:3128 intercept
icp_port 3130

cache_peer 192.168.220.2 parent 3128 3130 name=PARENT_PEER connect-timeout=7 proxy-only
cache_peer_access PARENT_PEER allow STORAGE FILE_TO_CACHE

# to connect to parent via internal interface
tcp_outgoing_address 192.168.220.1 parent_peer

# to properly get cache digest from parent
tcp_outgoing_address 192.168.220.1 parent_squid

# sent all other packets via ISP2
tcp_outgoing_address yyy.yyy.yyy.239 local_net

arquivo de configuração do pai lula (192.168.220.2)

acl main_squid src 192.168.220.1
acl FILE_TO_CACHE urlpath_regex -i \.(zip|iso|rar)$

cache allow FILE_TO_CACHE
cache deny all

http_access allow main_squid
http_access allow localhost
http_access deny all

icp_port 3130
icp_access allow main_squid
icp_access deny all

http_port 192.168.220.2:3128

cache_mem 12 GB
maximum_object_size_in_memory 64 MB
minimum_object_size 16384 KB
maximum_object_size 1024 MB

cache_swap_low 93
cache_swap_high 98

refresh_pattern \.iso$ 129600 100 129600 override-lastmod override-expire ignore-reload
refresh_pattern \.zip$ 129600 100 129600 override-lastmod override-expire ignore-reload
refresh_pattern \.rar$ 129600 100 129600 override-lastmod override-expire ignore-reload

cache_effective_user squid
cache_effective_group squid
    
por 25.05.2013 / 20:26
0

Veja a documentação do tcp_outgoing_address

do squid

Você pode usar um acl para limitar o escopo de tcp_outgoing_address . Adicione o seguinte à configuração do main_squid

acl parent_squid dst 192.168.220.2/32
tcp_outgoing_address 192.168.220.1 parent_squid
tcp_outgoing_address yyy.yyy.yyy.239 !parent_squid

Mas é principalmente recurso não utilizado, que tem muitos bugs (eu já vi isso lula em alguns casos). Eu recomendo usar o iptables para forçar a interface / ip correta. Algo como isso deve funcionar

iptables -t nat -A PREROUTING -d 192.168.220.2/32 -j SNAT --to 192.168.220.1
    
por 09.05.2013 / 22:19