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.599 ]

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

Fazendo hierarquia proxy/Squid

Instalando o MySAR no CentOS 5.5

Squid3 + Ubuntu Lucid 10.04 + Kerberos Auth + AD

Controle de clientes e acessos no Squid

SUSE Linux - Squid autenticando no Active Directory (AD)

  
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