Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Squid - tcp_outgoing_address, preciso de ajuda.

    Boa noite a todos, hoje tentei o dia inteiro direcionar o acesso do YouTube a um link exclusivo, pelo squid, usando tcp_outgoing_address, se alguém puder me ajudar ficarei grato, segue o cenário:

    link1, eth1 ip xxx.xxx.xxx.xxx
    link2, eth2 ip yyy.yyy.yyy.yyy
    rede local, eth0 ip 10.0.0.0/23

    Uso squid 2.7

    No squid.conf:

    acl link2 url_regex .youtube.com
    tcp_outgoing_address yyy.yyy.yyy.yyy link2
    http_access allow link2

    Tenho uma regra para o squid não fazer cache do Youtube, será esse o problema?

    acl YouTube dstdomain youtube.com
    always_direct allow YouTube

    Adicionei uma segunda tabela de roteamento:

    echo "200 secundario" >> /etc/iproute2/rt_tables

    Adicionei as rotas estáticas na tabela "secundario", adicionei a rota default do link2 na tabela "secundario".

    ip route add default via yyy.yyy.yyy.yyy table secundario

    Uso regras de NAT para proxy transparent:

    modprobe iptable_nat
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

    Nem sinal de funcionar, não acontece nada, o Youtube continua funcionando normal, não tive nehum retorno de erro, o que faltou fazer? Grato a todos.

  2. #2

    Padrão

    Boa noite amigo, isso eh algo que ja tentei e nao obtive sucesso, na empresa ao qual trabalho tenho firewall onde nele tem dois links, o link principal sai pelo squid, o segundo link sai com iptables + iproute2.

    Att,

    Brenno Freires

  3. #3

    Padrão

    No meu caso aqui quero que redicionamento aconteça depois do squid, o que você acha de minha configuração?

  4. #4

    Padrão

    acl link2 url_regex .youtube.com
    acl link2 url_regex youtube.com #correto

    tcp_outgoing_address yyy.yyy.yyy.yyy link2
    tcp_outgoing_address yyy.yyy.yyy.yyy secundario #correto

    http_access allow link2
    http_access allow secundario #correto

    echo "200 secundario" >> /etc/iproute2/rt_tables


    Cuidado tambem, se alguma regra de marcação esta ativa e impedindo o squid de redirecionar o link.
    Última edição por info24hs; 13-06-2009 às 13:45.

  5. #5

    Padrão ip rule

    Bom dia amigo, ja implantei essa soluçao com bons resultados. Segue abaixo como fiz
    Supondo o sequinte cenario:
    IPS das placas de rede do squid:
    eth0 = 192.168.10.254/24 #Clientes
    eth1 = 10.0.0.1/24 #Link 1
    eth2 = 10.1.1.1/24 #Link 2
    gw_link1 = 10.0.0.254
    gw_link2 = 10.1.1.254

    1 - No squid.conf , defina quais dominios vao sair pelo Link2
    acl link2 dstdomain .youtube.com .orkut.com
    tcp_outgoing_address 10.1.1.1 link2

    2 - Encaminho em anexo um Script que fiz, que ajudou muito no trabalho. Altere as variaveis do script conforme a nescessidade. Caso tenha interesse, tambem tenho outro script que faz marcaçao de pacotes redirecionando certos trafegos para cada link.

    Espero ter colaborado. Qualquer duvida, post novamente.
    Att.
    Gabriel Siena
    Arquivos Anexos Arquivos Anexos

  6. #6

    Padrão

    Citação Postado originalmente por info24hs Ver Post
    acl link2 url_regex .youtube.com
    acl link2 url_regex youtube.com #correto

    tcp_outgoing_address yyy.yyy.yyy.yyy link2
    tcp_outgoing_address yyy.yyy.yyy.yyy secundario #correto

    http_access allow link2
    http_access allow secundario #correto

    echo "200 secundario" >> /etc/iproute2/rt_tables


    Cuidado tambem, se alguma regra de marcação esta ativa e impedindo o squid de redirecionar o link.

    Amigo, no caso secundario é o nome que dei a minha segunda tabela de rota, isso no iproute, tem que citar isso no squid.conf também? Grato.

  7. #7

    Padrão

    Citação Postado originalmente por Josue Guedes Ver Post
    Amigo, no caso secundario é o nome que dei a minha segunda tabela de rota, isso no iproute, tem que citar isso no squid.conf também? Grato.
    isso, como ele vai saber por onde tem que sair...

  8. #8

    Padrão

    Citação Postado originalmente por gsiena Ver Post
    Bom dia amigo, ja implantei essa soluçao com bons resultados. Segue abaixo como fiz
    Supondo o sequinte cenario:
    IPS das placas de rede do squid:
    eth0 = 192.168.10.254/24 #Clientes
    eth1 = 10.0.0.1/24 #Link 1
    eth2 = 10.1.1.1/24 #Link 2
    gw_link1 = 10.0.0.254
    gw_link2 = 10.1.1.254

    1 - No squid.conf , defina quais dominios vao sair pelo Link2
    acl link2 dstdomain .youtube.com .orkut.com
    tcp_outgoing_address 10.1.1.1 link2

    2 - Encaminho em anexo um Script que fiz, que ajudou muito no trabalho. Altere as variaveis do script conforme a nescessidade. Caso tenha interesse, tambem tenho outro script que faz marcaçao de pacotes redirecionando certos trafegos para cada link.

    Espero ter colaborado. Qualquer duvida, post novamente.
    Att.
    Gabriel Siena
    Ajudou sim, vou testar e posto os resultados.

  9. #9

    Padrão

    Citação Postado originalmente por gsiena Ver Post
    Bom dia amigo, ja implantei essa soluçao com bons resultados. Segue abaixo como fiz
    Supondo o sequinte cenario:
    IPS das placas de rede do squid:
    eth0 = 192.168.10.254/24 #Clientes
    eth1 = 10.0.0.1/24 #Link 1
    eth2 = 10.1.1.1/24 #Link 2
    gw_link1 = 10.0.0.254
    gw_link2 = 10.1.1.254

    1 - No squid.conf , defina quais dominios vao sair pelo Link2
    acl link2 dstdomain .youtube.com .orkut.com
    tcp_outgoing_address 10.1.1.1 link2

    2 - Encaminho em anexo um Script que fiz, que ajudou muito no trabalho. Altere as variaveis do script conforme a nescessidade. Caso tenha interesse, tambem tenho outro script que faz marcaçao de pacotes redirecionando certos trafegos para cada link.

    Espero ter colaborado. Qualquer duvida, post novamente.
    Att.
    Gabriel Siena
    Amigo, uma coisa que notei aqui, que estou fazendo é o seguinte, eu não estou limpando as tabelas de roteamento, eu simplismente estou adicionado uma outro e mantendo a tabela normal. Notei que seu script exclui as tabelas e cria outras duas, será esse meu problema?

  10. #10

    Padrão Limpar tabelas roteamento

    O script faz basicamente uma copia da tabela main (principal) para as tabelas link1 e link2 , porem cada uma com seu default gateway, alem disso cria um default gateway para a tabela main, que é a principal do sistema. Tambem cria as regras de roteamento (ip rule) , que sao importantes para fazer com que o squid obedeça as tabelas. Sem os ip rules, o squid sempre vai sair pela rota padrao do sistema, mesmo com as duas tabelas criadas.

  11. #11

    Padrão

    Amigo, quero agradescer muito pelas informações postadas, que são muito valiosas, o script faz tudo que é necessário, estive analisando, contudo ainda não tive sucesso após rodar o script, alguma mensagens de erro apareceram, você utilizou em qual distribuição?

    Aqui retornou o seguinte:

    Noting to do flush.

    Acredito ser algum comando incopatível de versões ou distribuição. Grato.

  12. #12

    Padrão Nothing to flush

    Amigo, essa mensagem tambem ocorre aki e nao é nescessariamente um erro, é somente um aviso, que ao executar um comando para dar um flush (zerar as regras) de uma tabela, nenhuma regra existia.. o comando referente a isso roda logo no começo do script, o aviso só esta dizendo "nada para limpar" . Quanto a distribuição eu usei no Debian e Ubuntu, squid 2.6Stable18
    No seu caso, o Squid apresenta algum erro? seus IPs setados nas eth referente aos links sao fixos?
    Eu gostaria se possivel que vc me mandasse o seu squid.conf para mim analizar.
    Se possivel tambem mandar o conteudo exibido por esse comando: route -n
    Obs, esse ultimo, rode sem executar o script que mandei

  13. #13

    Padrão

    Bom, aqui está sendo usado o Squid 2.7 em CentOS 5.3, segue o squid.conf:

    http_port 3128 transparent
    visible_hostname pnetserv
    ftp_user [email protected]

    ###################Configurao de Cache######################
    cache_mem 500 MB # quantidade da cache usada na memoria ram.
    maximum_object_size_in_memory 256 KB
    maximum_object_size 200 MB
    minimum_object_size 0 KB

    cache_swap_low 90
    cache_swap_high 95


    cache_dir diskd /var/spool/squid/cache1 100000 16 256
    cache_dir diskd /var/spool/squid/cache2 100000 16 256

    ################## Refresh de Conteudo #####################
    #multimedia
    #=============================================================$
    refresh_pattern -i \.(mov|mpg|mpeg|flv|avi|mp3|3gp|sis|wma|3gp|mp4) 43200 20% 43200
    #=============================================================$
    #compression
    #=============================================================$
    refresh_pattern -i \.(zip|rar|ace|bz|bz2|tar|gz|exe|rpm|deb|bin|cab) 43200 20% 43200
    #=============================================================$
    refresh_pattern ^ftp: 1440 20% 10080
    refresh_pattern ^gopher: 1440 0% 1440
    refresh_pattern . 0 20% 4320
     
    ########################## LOGS ###########################
    cache_access_log /var/log/squid/access.log
    cache_store_log none
    ##########################################################
    #########
    # ACLs ##
    #########
    acl all src 0.0.0.0/0.0.0.0
    acl permitidos src 10.0.0.0/23
    acl localhost src 127.0.0.1/255.255.255.255
    http_access allow localhost
    http_access allow permitidos
     
    ################## Safe Ports #######################
    acl manager proto cache_object
    acl SSL_ports port 443 563 # https, snews
    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 280 # http-mgmt
    acl Safe_ports port 488 # gss-http
    acl CONNECT method CONNECT
     
    ############# Nao fazer cache YouTube################
    acl YouTube dstdomain youtube.com
    always_direct allow YouTube
    ####################################################

    ########### DNS ########################

    dns_nameservers 200.185.6.163 200.185.6.131
    dns_retransmit_interval 5 seconds
    dns_timeout 2 minutes
    Redirecionamento YouTube
     
    acl link2 dstdomain .youtube.com
    tcp_outgoing_address 192.168.8.2 link2
    http_access allow link2

    #Fim do squid.conf


    Os Ip´s das interfaces são fixos e estão corretos no script.

    route -n


    Tabela de Roteamento IP do Kernel
    Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
    165.190.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
    10.0.0.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0
    169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
    0.0.0.0 165.190.0.1 0.0.0.0 UG 0 0 0 eth1

    No caso, eu tive que desfazer a rede e usar no Mikrotik como estava antes, pois prescisa deste link em produção aqui, mais farei denovo e posto novamente.

    Curiosamente meu Squid aqui, neste final de semana parou funcionar, não retorna erro nenhum, nem nos logs, apenas não abre página, muito esquisito, acredito que deve ter algum problema com ele, vou reinstalar para continuar os testes.
     
     


     
     
     
     
     

  14. #14

    Padrão OK

    Tudo bem, quando fizer mais testes, me avise... qualquer coisa podemos combinar eu poderia acessar remotamente e te ajudar ai... sem custo, afinal estamos num forum..rs
    Abraços.. qualquer coisa estou a disposiçao

  15. #15

    Padrão

    Até amanha retorno com os resultados. Obrigado.

  16. #16

    Padrão

    Citação Postado originalmente por gsiena Ver Post
    Tudo bem, quando fizer mais testes, me avise... qualquer coisa podemos combinar eu poderia acessar remotamente e te ajudar ai... sem custo, afinal estamos num forum..rs
    Abraços.. qualquer coisa estou a disposiçao
    Boa tarde, fiz novos testes aqui, e parece que deu certo, contudo, tenho a impressão que nem todo o trafego está sendo direcionado, pois as vezes o trafego na interface da eth2, que é o link2 baixa muito, direcionei youtube, baixaki, 4shared, então esse tráfego é bem alto. Segue algumas informações:

    [root@pnetserv2 squid]# route -n
    Tabela de Roteamento IP do Kernel
    Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
    192.168.8.0 0.0.0.0 255.255.255.252 U 0 0 0 eth2
    165.190.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
    10.0.0.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0
    169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
    0.0.0.0 165.190.0.1 0.0.0.0 UG 0 0 0 eth1
    [root@pnetserv2 squid]# ip route show table link1
    192.168.8.0/30 dev eth2 proto kernel scope link src 192.168.8.2
    165.190.0.0/24 dev eth1 proto kernel scope link src 165.190.0.2
    10.0.0.0/23 dev eth0 proto kernel scope link src 10.0.0.2
    169.254.0.0/16 dev eth1 scope link
    default via 165.190.0.1 dev eth1
    [root@pnetserv2 squid]# ip route show table link2
    192.168.8.0/30 dev eth2 proto kernel scope link src 192.168.8.2
    165.190.0.0/24 dev eth1 proto kernel scope link src 165.190.0.2
    10.0.0.0/23 dev eth0 proto kernel scope link src 10.0.0.2
    169.254.0.0/16 dev eth1 scope link
    default via 192.168.8.1 dev eth2


    No squid.conf


    acl link2 dstdomain .youtube.com .redtube.com .baixaki.com.br .rapidshare.com .superdownloads.com.br .4shared.com .pornotube.com mediafire.com
    tcp_outgoing_address 192.168.8.2 link2
    http_access allow link2

    Observei que se eu der um traceroute, a rota tomada não é o do link2, mais como eu disse está avendo tráfego na eth2, porém, baixo. Grato

  17. #17

    Padrão Traceroute

    Boa noite. Pra testar as rotas das duas tabelas pelo traceroute, tente esses comandos:
    traceroute -i eth1 200.160.2.3
    traceroute -i eth2 200.160.2.3

    Só por curiosidade, vc ta usando o ThunderCahe juntamente com seu Squid? Usando o thunder ainda nao consegui fazer funcionar o tcp_outgoing_address.
    Abraços.

    Citação Postado originalmente por Josue Guedes Ver Post
    Boa tarde, fiz novos testes aqui, e parece que deu certo, contudo, tenho a impressão que nem todo o trafego está sendo direcionado, pois as vezes o trafego na interface da eth2, que é o link2 baixa muito, direcionei youtube, baixaki, 4shared, então esse tráfego é bem alto. Segue algumas informações:

    [root@pnetserv2 squid]# route -n
    Tabela de Roteamento IP do Kernel
    Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface
    192.168.8.0 0.0.0.0 255.255.255.252 U 0 0 0 eth2
    165.190.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
    10.0.0.0 0.0.0.0 255.255.254.0 U 0 0 0 eth0
    169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
    0.0.0.0 165.190.0.1 0.0.0.0 UG 0 0 0 eth1
    [root@pnetserv2 squid]# ip route show table link1
    192.168.8.0/30 dev eth2 proto kernel scope link src 192.168.8.2
    165.190.0.0/24 dev eth1 proto kernel scope link src 165.190.0.2
    10.0.0.0/23 dev eth0 proto kernel scope link src 10.0.0.2
    169.254.0.0/16 dev eth1 scope link
    default via 165.190.0.1 dev eth1
    [root@pnetserv2 squid]# ip route show table link2
    192.168.8.0/30 dev eth2 proto kernel scope link src 192.168.8.2
    165.190.0.0/24 dev eth1 proto kernel scope link src 165.190.0.2
    10.0.0.0/23 dev eth0 proto kernel scope link src 10.0.0.2
    169.254.0.0/16 dev eth1 scope link
    default via 192.168.8.1 dev eth2


    No squid.conf


    acl link2 dstdomain .youtube.com .redtube.com .baixaki.com.br .rapidshare.com .superdownloads.com.br .4shared.com .pornotube.com mediafire.com
    tcp_outgoing_address 192.168.8.2 link2
    http_access allow link2

    Observei que se eu der um traceroute, a rota tomada não é o do link2, mais como eu disse está avendo tráfego na eth2, porém, baixo. Grato

  18. #18

    Padrão

    Não, no uso ainda, usei o Videocache, com sucesso, mais já tem um tempo que deixei de usar.

  19. #19

    Padrão

    Dica: para fazer meu squid funcionar com dois links fiz o seguinte esquema:

    ## -> squid

    ################################################
    ##### Downloads de Arquivos no Link 2 #####
    ################################################
    #
    acl mime rep_mime_type -i "/router/sys/etc/squid_mime.rota_b"
    acl arquivos urlpath_regex -i "/router/sys/etc/squid_files.rota_b"

    http_access deny forbid
    http_access allow localhost
    http_access allow redelocal

    tcp_outgoing_address ip_do_link_b mime
    tcp_outgoing_address ip_do_link_b arquivos
    tcp_outgoing_address ip_do_link_a all

    #-> fim do squid

    #-> variaveis

    GW_LINK1 = gateway do link1
    GW_LINK2 = gateway do link2

    IF_LINK1 = dev do link ex eth0 ou ppp0
    IF_LINK2 = dev do link ex eth1 ou ppp1
    IF_WIFI = dev do link dos meus clientes

    IP_DO_LINK1 = ip da interface do primeiro link de saida da internet
    IP_DO_LINK2 = ip da interface do segundo link de saida da internet

    #-> firewall
    route add default gw $GW_LINK1

    iptables -t mangle -I PREROUTING -i $IF_WIFI -p tcp --dport 80 -j MARK --set-mark 1
    iptables -t mangle -I PREROUTING -i $IF_WIFI -p tcp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I PREROUTING -i $IF_WIFI -p udp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I PREROUTING -i $IF_WIFI -p tcp --dport 443 -j MARK --set-mark 1

    iptables -t mangle -I PREROUTING -i $IF_WIFI -j MARK --set-mark 2

    iptables -t mangle -I OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
    iptables -t mangle -I OUTPUT -p tcp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I OUTPUT -p udp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I OUTPUT -p tcp --dport 443 -j MARK --set-mark 1

    #aqui se encontra o pulo do gato!
    iptables -t mangle -A OUTPUT -s IP_DO_LINK1 -j MARK --set-mark 1
    iptables -t mangle -A OUTPUT -s IP_DO_LINK2 -j MARK --set-mark 2
    #
    #--> iproute2

    ip rule add fwmark 1 table link1 prio 20
    ip rule add fwmark 2 table link2 prio 20

    ip route add default via $GW_LINK1 dev $IF_LINK1 table link1
    ip route add default via $GW_LINK2 dev $IF_LINK2 table link2

    ip route flush cache
    ip route flush table cache

    #

    o problema com o squid e o tcp_outgoing_address é que o mesmo tenta sair com o ip do link2 mais pelo link1 e com estas regras o firewaçl forca o que esta com o ip de cada link sair pelo lugar certo.

    e graças a Deus depois de muita luta e nenhuma solução consegui chegar no resultado que queria e esta funcionando perfeitamente.

    ta ai pra galera que deseja desviar certas conexoes do squid por varios links.

    lembrando que testei usando dois ppp da brt com o mesmo gateway e funcionou perfeitamente.

    abraços pra galera, espero ter ajudado.
    vlw.
    Última edição por nerdz-x; 29-06-2009 às 09:46.

  20. #20

    Padrão

    Citação Postado originalmente por nerdz-x Ver Post
    Dica: para fazer meu squid funcionar com dois links fiz o seguinte esquema:

    ## -> squid

    ################################################
    ##### Downloads de Arquivos no Link 2 #####
    ################################################
    #
    acl mime rep_mime_type -i "/router/sys/etc/squid_mime.rota_b"
    acl arquivos urlpath_regex -i "/router/sys/etc/squid_files.rota_b"

    http_access deny forbid
    http_access allow localhost
    http_access allow redelocal

    tcp_outgoing_address ip_do_link_b mime
    tcp_outgoing_address ip_do_link_b arquivos
    tcp_outgoing_address ip_do_link_a all

    #-> fim do squid

    #-> variaveis

    GW_LINK1 = gateway do link1
    GW_LINK2 = gateway do link2

    IF_LINK1 = dev do link ex eth0 ou ppp0
    IF_LINK2 = dev do link ex eth1 ou ppp1
    IF_WIFI = dev do link dos meus clientes

    IP_DO_LINK1 = ip da interface do primeiro link de saida da internet
    IP_DO_LINK2 = ip da interface do segundo link de saida da internet

    #-> firewall
    route add default gw $GW_LINK1

    iptables -t mangle -I PREROUTING -i $IF_WIFI -p tcp --dport 80 -j MARK --set-mark 1
    iptables -t mangle -I PREROUTING -i $IF_WIFI -p tcp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I PREROUTING -i $IF_WIFI -p udp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I PREROUTING -i $IF_WIFI -p tcp --dport 443 -j MARK --set-mark 1

    iptables -t mangle -I PREROUTING -i $IF_WIFI -j MARK --set-mark 2

    iptables -t mangle -I OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
    iptables -t mangle -I OUTPUT -p tcp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I OUTPUT -p udp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -I OUTPUT -p tcp --dport 443 -j MARK --set-mark 1

    #aqui se encontra o pulo do gato!
    iptables -t mangle -A OUTPUT -s IP_DO_LINK1 -j MARK --set-mark 1
    iptables -t mangle -A OUTPUT -s IP_DO_LINK2 -j MARK --set-mark 2
    #
    #--> iproute2

    ip rule add fwmark 1 table link1 prio 20
    ip rule add fwmark 2 table link2 prio 20

    ip route add default via $GW_LINK1 dev $IF_LINK1 table link1
    ip route add default via $GW_LINK2 dev $IF_LINK2 table link2

    ip route flush cache
    ip route flush table cache

    #

    o problema com o squid e o tcp_outgoing_address é que o mesmo tenta sair com o ip do link2 mais pelo link1 e com estas regras o firewaçl forca o que esta com o ip de cada link sair pelo lugar certo.

    e graças a Deus depois de muita luta e nenhuma solução consegui chegar no resultado que queria e esta funcionando perfeitamente.

    ta ai pra galera que deseja desviar certas conexoes do squid por varios links.

    lembrando que testei usando dois ppp da brt com o mesmo gateway e funcionou perfeitamente.

    abraços pra galera, espero ter ajudado.
    vlw.

    Grato amigo, irei testar e posto os resultados.