Squid + IPtables com dois links de internet

Neste artigo, explico como configurar dois links de internet para rodar no Squid. Desde o roteamento, passando pelo balanceamento de links com IPtables e colocando os dois links para funcionar dentro do Squid. Os exemplos foram testados e colocados em produção em uma VM com VMware Esxi, rodando Slackware 14.1 com Squid 3.4.8.

[ Hits: 13.244 ]

Por: Don em 14/05/2015


IPtables



Bom dia, galera.

Vou escrever um breve artigo sobre como fazer balanceamento de link por IPtables e Squid.

Normalmente, vemos esse balanceamento sendo feito com IPtables, mas minha necessidade era que as conexões de proxy também tivessem acesso aos meus dois links de internet, utilizando, para isso, o Squid.

Bom, vou colocar aqui o cenário com IPs fictícios, óbvio (rs). São dois IPs de internet e uma rede local. Uma coisa que pode ser interessante para quem ler, é que um dos meus links de internet é uma intranet, então, tenho que ligar meu Squid a um cache-pai, com a diretiva "cache_peer" como "parent".

Então, tem que se fazer umas coisinhas a mais que vou explicar.
  • Ip link 1 : 200.0.0.1 Gateway 200.0.0.2
  • Ip link : 189.0.0.1 Gateway 189.0.0.2
  • Ip lan : 192.168.1.0
  • Gateway padrão : 200.0.0.2

Não vou entrar em detalhes de como configurar os IPs nas interfaces, então, ficou assim:
  • eth0 - 192.168.1.254/24
  • eth1 - 200.0.0.1/24
  • eth2 - 189.0.0.2/24

Com o servidor Linux configurado até aí, precisamos ativar o "ip_forward" e criar regras de MASQUERADE para os links de internet, usando o IPtables.

# echo 1 > /proc/sys/net/ipv4/ip_forward #Ativa o forward
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE #Mascarade para eth1
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE #Mascarade para eth2

Eu, particularmente, não criei a regra de mascaramento para a eth2, tudo que não passar pelo Squid (ftp, telnet, pop, smtp etc.), vai sempre pela eth1 e tenho setores onde nem mesmo há o mascaramento, a saída é só Web. Então, só passa pelo Squid, fica da necessidade de casa um.

Agora precisamos criar uma tabela de roteamento por onde o segundo link de internet, IP 189.0.0.2, vai passar.

Edite o arquivo /etc/iproute2/rt_tables. Haverá a tabela main, é a tabela principal como o nome já diz, então embaixo vamos criar a tabela "link_bkp":

20   link_bkp

Pode ser qualquer nome e qualquer número no começo, escolhi aleatoriamente.

Agora vamos criar uma regra de encaminhamento via comando "ip" para a tabela "link_bkp".

# ip rule add fwmark 2 table 20

Ou seja, todo pacote que estiver marcado com 2, deve ser direcionado para a tabela 20, no caso "link_bkp".

Agora vamos adicionar uma regra de roteamento para essa tabela:

# ip route add default via 189.0.0.2 dev eth2 table 20

Isso diz para que todo pacote direcionado à tabela 20, saia pelo gateway 189.0.0.2 na interface eth2.

Com isso, temos o link de backup configurado. Agora vou mostrar alguns exemplos de como fazer marcação de pacotes, para que trafeguem pelo link de backup de acordo com sua vontade.

Um exemplo básico: meu link principal caiu e preciso jogar toda a LAN no outro link:

# iptables -t mangle -A PREROUTING -s 192.168.1.0/24 -j MARK set-mark 2

Aqui marco todos os pacotes com origem na rede 192.168.1.0/24 com 2, que pela minha regra direciona para a tabela 20, nosso link de backup. =)

Agora, suponhamos que meu link principal, dentro de uma intranet, bloqueia conexões FTP (acreditem, é um tormento - rs), então preciso que tudo que for FTP saia pelo link de backup.

# iptables -t mangle -A PREROUTING -p tcp --dport 25 -j MARK set-mark 2

Aqui, digo que todo pacote TCP com destino de porta 25 seja marcado com 2, sendo assim, direcionado para a tabela 20. Ah, mas preciso que só a máquina do Joãozinho acesse FTP. Sem problemas:

# iptables -t mangle -A PREROUTING -p tcp -s 192.168.1.5/32 --dport 25 -j MARK --set-mark 2

A regra aqui é a mesma, mas limitei somente pacotes com origem do IP 192.168.1.5. IP da máquina do Joãozinho.

Tendo um bom conhecimento de que portas as aplicações usam, posso escolher que aplicações e que IPs passarão por um link ou outro, fazendo assim o balanceamento.

    Próxima página

Páginas do artigo
   1. IPtables
   2. Squid
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Recebendo relatório do SARG via e-mail (Gmail)

Criando delay pools (Proxy/Squid)

Autenticando usuários do Squid em um banco de dados MySQL

Squid atuando como proxy reverso

Bloqueando o Messenger com iptables e Squid

  
Comentários
[1] Comentário enviado por willian.firmino em 14/05/2015 - 23:21h

Slackware com squid e squidguard rola?

[2] Comentário enviado por wagnerfs em 16/05/2015 - 09:41h

Parabéns pale artigo. Bastante elucidativo e prático.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782

[3] Comentário enviado por donr em 17/05/2015 - 19:49h


Obrigado Wagner
Willian, rola sim, fim ha algum tempo ja , se não me engano tive que compilar o fonte , etc, etc.
Foi bom no meu caso pois eu tava trabalhando com uma quantidade enorme de urls na minha blacklist, e o squid tava ficando muito lento, com o squidguard a performace melhorou um bocado.

[4] Comentário enviado por removido em 18/05/2015 - 05:01h

Olá. Artigo versão p/ IPv6 rola?

[5] Comentário enviado por DiegocostaJ em 20/05/2015 - 00:21h


Parabéns por compartilhar o conhecimento, o artigo já esta nos meus favoritos.

Abç

[6] Comentário enviado por donr em 24/05/2015 - 19:10h

Valeu Diego

listeiro_037(não achei seu nome rs), nunca tentei , mas creio que rola sim. Configurando o iptables pra rodar com IPv6, acho que funciona normalmente. Se alguém conseguir posta aí pra gente ver rs.

[7] Comentário enviado por wagnerdias em 25/05/2015 - 10:39h

Bom dia a todos! Sou iniciante com linux e estou tomando uma surra com iptables no squid+dansguardian. Todos os sites que tento entrar ficam bloqueados pelo squid ou dansguardian. Acho que o erro está no iptables onde posso ver as configurações dele?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts