+ Responder ao Tópico



  1. #1

    Question Squid - Download interrompido

    Olá

    Estou com um problema sem conseguir resolver. Já pesquisei de tudo na net e não achei a solução para meu caso.

    Tenho um firewall rodando com IPTABLES que direciona todo o tráfego da porta 80 para o Squid. O tráfego na internet funciona bem (mesmo apresentando muitas mensagens de TCP_MISS/200, 302 ou 304 no access.log). O problema acontece quando um download de arquivo é iniciado: sempre interrompe antes de terminar de baixar o arquivo. Geralmente fica em 30 ou 40% do tamanho original.

    Sem o Squid o download vai até o final (usando apenas o mascaramento de IP).

    A distribuição que tenho usado é o Mandriva 2007 com Squid 2.6.

    Vou postar aqui a regra do IPTABLES e o arquivo do Squid para verificação.

    IPTABLES (mascaramento e redirecionamento da porta 80)
    /sbin/iptables -t nat -A POSTROUTING -s 192.168.254.0/24 -o eth3 -j MASQUERADE
    /sbin/iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j DNAT --to 192.168.254.254:3128
    /sbin/iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128

    SQUID.CONF
    http_port 192.168.254.254:3128 transparent
    hierarchy_stoplist cgi-bin ?
    acl QUERY urlpath_regex cgi-bin \?
    cache deny QUERY
    acl apache rep_header Server ^Apache
    broken_vary_encoding allow apache
    cache_swap_low 90
    cache_swap_high 95
    maximum_object_size 4096 KB
    ipcache_size 1024
    ipcache_low 90
    ipcache_high 95
    fqdncache_size 1024
    cache_replacement_policy heap LFUDA
    memory_replacement_policy heap GDSF
    cache_dir diskd /var/spool/squid 100 64 256 Q1=64 Q2=72
    access_log /var/log/squid/access.log squid
    dns_nameservers 200.250.77.85 200.250.77.87
    refresh_pattern ^ftp: 1440 20% 10080
    refresh_pattern ^gopher: 1440 0% 1440
    refresh_pattern . 0 20% 4320
    half_closed_clients off
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl to_localhost dst 127.0.0.0/8
    acl SSL_ports port 443
    acl Safe_ports port 80 # http
    acl Safe_ports port 21 # ftp
    acl Safe_ports port 443 # https
    acl Safe_ports port 70 # gopher
    acl Safe_ports port 210 # wais
    acl Safe_ports port 1025-65535 # unregistered ports
    acl Safe_ports port 280 # http-mgmt
    acl Safe_ports port 488 # gss-http
    acl Safe_ports port 591 # filemaker
    acl Safe_ports port 777 # multiling http
    acl CONNECT method CONNECT
    acl src_livre src 192.168.254.84
    acl empresa src 192.168.254.0/24
    acl restrito1 url_regex "/etc/squid/restrito1"
    acl restrito2 url_regex "/etc/squid/restrito2"
    acl dst_livre url_regex "/etc/squid/dst_livre"
    acl download urlpath_regex "/etc/squid/download"
    acl semcache urlpath_regex "/etc/squid/semcache" \?
    http_access allow manager localhost
    http_access deny manager
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localhost
    http_access allow src_livre !restrito1 !restrito2
    http_access allow empresa dst_livre !restrito1 !restrito2 !download
    no_cache deny semcache
    http_access deny all
    http_reply_access allow all
    icp_access allow all
    delay_pools 0
    coredump_dir /var/spool/squid


    É isto... Se alguém souber do caminho das pedras, posta aí...

    Valeu..

    Eurico Junior

  2. #2

    Padrão

    tenta colocar essa linha mano velho:

    quick_abort_min -1 KB

    depois posta o resultado que nos vamo vendo!

  3. #3

    Padrão

    amigo!

    da uma olhada nos seus logs comigo aqui foi problema de alocação dinamica xmalloc e xcalloc ae o squid reiniciava!


    /var/log/messages:

    Jul 7 19:32:12 dragonfly (squid): xcalloc: Unable to allocate 1 blocks of 135168 bytes!
    Jul 7 20:05:11 dragonfly (squid): xcalloc: Unable to allocate 1 blocks of 135168 bytes!

    cache.log:

    FATAL: xcalloc: Unable to allocate 1 blocks of 135168 bytes!

    Squid Cache (Version 3.0.STABLE1): Terminated abnormally.
    CPU Usage: 87.959 seconds = 49.203 user + 38.756 sys
    Maximum Resident Size: 519168 KB

    ae os downloads que estavam sendo feitos seria cancelados claro né!


    []'s

  4. #4

    Padrão

    Olá...

    Valeu pelos posts.

    Anderson: este erro que acontece não trava o Squid. Apenas cancela o download, a navegação continua normalmente e os logs continuam a serem gerados no access.log. Percebi apenas que existe uma grande quantidade de linhas com TCP_MISS/200. Esta linha aparece para o arquivo que está sendo feito download quando inicia e logo após a interrupção aparece novamente.

    Arium: vou fazer um teste do 'quick_abort_min' e posto o resultado assim que puder alterar no server.

    T+

    Eurico Junior

  5. #5

    Padrão

    opa.

    como eu disse acima, cancela os downloads!

  6. #6

    Padrão

    Olá Anderson

    Vou dar uma verificada nos logs do message e dou um retorno...


    Eurico Junior

  7. #7

    Padrão

    funcionou o comandinho que passei a vc maninho? abraço!

  8. #8

    Padrão

    Olá Arium:

    acrescentei o valor de quick_abort_min, porém sem resultado. Os downloads continuam a serem interrompidos sem nenhum aviso e em momentos aleatórios (pode ser com 20 ou 30% da transferência ou mais até).

    Anderson: nos momentos em que os downloads são interrompidos não é feita a reinicialização do squid, ele fica com o mesmo número de processo antes e depois do download e no log do messages não apresenta nada referente à erro do proxy.

    Estou pesquisando mais alguma coisa e se tiverem outra idéia do que pode ser feito, posta aí...


    Eurico Junior

  9. #9

    Padrão

    Mais uma informação...

    Fiz alguns testes de tamanhos de arquvos que são baixados e geralmente os erros acontecem com arquivos maiores que 20Mb.

    Executei o download de vários arquivos abaixo deste tamanho e passaram. No entanto arquivos maiores geralmente são cancelados. As fontes de download são diversas e descarto a possibilidade de problemas no servidor de origem, até mesmo porque se desligar o squid e deixar apenas no mascaramento do iptables o download é finalizado corretamente.


    Eurico Junior

  10. #10

    Padrão

    1-tenta mudar
    half_closed_clients on

    depois se nao der

    tira o proxy transparente e tenta com ipdireto ve se buffa


    depois cola a saida desses três comandos aqui
    #uptime
    #free -om
    #df -h

  11. #11

    Padrão

    amigo verifica suas regras ai o que cv tem e uma regra no squid que cancelas downloas maiores que um determinado valor tipo maior q 20 megas no seu caso pode procurar que eu isso eu tinha uma regra parecida aki mais ja apaguei boa sorte

  12. #12

    Padrão

    Olá Trunks

    As regras estão na primeira página. Não tem nada que faça o download parar em determinado tamanho de arquivo, até mesmo porque o tamanho onde o download é interrompido é aleatório.

    Valeu assim esmo...


    Eurico Junior

  13. #13

    Padrão

    amigo vc faz cache ai correto estou supondo que seu download seja interronpido pelo tamnaho do arquivo esteja maior do que o cache pode ser isso

  14. #14

    Padrão

    Olá Trunks

    Até cheguei a considerar isto, mas para ter a certeza que não era, fiz uma limpa em toda a pasta do cache e reiniciei o squid para ele criar o cache novamente e, com apenas a minha máquina ligada refiz o teste de download com arquivos de vários tamanhos. Geralmente o erro acontece com arquivos maiores que 20Mb. Mas o cache está praticamente vazio nestes testes...

    Pesquisei muito rapidamente mas não me aprofundei nisto, tem como usar o squid 2.6 sem ele ser usado como cache (apenas como proxy)?

    Eurico Junior

  15. #15

    Padrão

    http_port 3128
    visible_hostname
    # Configurao do cache
    cache_mem 128 MB
    maximum_object_size_in_memory 64 KB
    maximum_object_size 512 MB
    minimum_object_size 0 KB
    cache_swap_low 90
    cache_swap_high 95
    cache_dir ufs /var/spool/squid 2048 16 256
    # Localizao do log de acessos do Squid
    cache_access_log /var/log/squid/access.log
    refresh_pattern ^ftp: 15 20% 2280
    refresh_pattern ^gopher: 15 0% 2280
    refresh_pattern . 15 20% 2280
    acl all src 0.0.0.0/0.0.0.0
    acl manager proto cache_object
    acl localhost src 127.0.0.1/255.255.255.255
    acl SSL_ports port 443 563
    acl safe_ports port 81 # http
    acl SSL_ports port 2096 # http
    acl safe_ports port 20 # http
    acl Safe_ports port 80 # http
    acl Safe_ports port 21 # ftp
    acl Safe_ports port 443 563 # https, snews
    acl Safe_ports port 70 # gopher
    acl Safe_ports port 210 # wais
    acl Safe_ports port 1025-65535 # unregistered ports
    acl Safe_ports port 280 # http-mgmt
    acl Safe_ports port 488 # gss-http
    acl Safe_ports port 591 # filemaker
    acl Safe_ports port 777 # multiling http
    acl Safe_ports port 901 # SWAT
    acl purge method PURGE
    acl CONNECT method CONNECT
    http_access allow manager localhost
    http_access deny manager
    http_access allow purge localhost
    http_access deny purge
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    # Libera acessos na hora do almoo
    acl ALMOO url_regex "/etc/squid/almoo"
    acl LIVRE time MTWHF 12:00-13:30
    http_access allow ALMOO LIVRE
    # Filtros por palavras e por dominios
    # acl proibidos dstdom_regex "/etc/squid/proibidos"
    # http_access deny proibidos
    # acl bloqueados dstdomain
    # http_access deny bloqueados
    # Autenticao dos usurios
    auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid_passwd
    acl autenticados proxy_auth REQUIRED
    http_access allow autenticados
    # Libera para a rede local
    acl redelocal src 10.10.10.0/24
    http_access allow localhost
    http_access allow redelocal
    # Bloqueia acessos externos
    http_access deny all

    minha conf ta ai aki ta funcionando perfeitamente so modifica ela para o seu uso ou compara com a sua e ve o q tem quem sabe ai cv descobre o erro

  16. #16

    Padrão

    Obrigado...

    Vou fazer um teste e comparar com a configuração que tenho aqui. Depois eu posto o resultado.


    Eurico Junior

  17. #17

    Padrão Resolvido!!

    Bem, vou deixar a solução deste problema aqui..

    Apenas atualizei o Mandriva que usava (era versão 2007) para a 2008 Springs, copiei o squid.conf do servidor anterior para o novo servidor e pronto. Funcionou direitinho.

    A atualização arrumou este problema e outro que tinha no fechamento de VPN através do iptables. Dois problema com uma única atualização.

    Na realidade não sei de o que acontecia na versão anterior, mas quando tiver um tempo vou fazer uns testes para saber se não era algum bug...

    Obrigado pela ajuda...

    Eurico Junior

  18. #18

    Padrão

    é importante esse feedback

    obrigado por completar o post.

    abraços