Balanceando 2 links linux
configuração pode ser feita. Dando assim o chute inicial para que outros scripts com mais funcionalidades e mais complexos possam ser criados.
Requisitos: Alguns requisitos são vitais para o funcionamento deste tipo de configuração tais como os ja descritos no título do artigo: Iptables Iproute2 Scripts de inicialização das conexões (caso seja velox, ou serviço parecido) Cenário: O cenário utiliz Balanceando 2 links linux Premium gy tonmoraes 07, 2012 | 12 pages Balanceamento de links Utilizando iptables e iproute2 Por: Leandro R – Introdução: Com o barateamento de links de acesso a internet e o aparecimento da conexão de anda-larga a um valor acessível, muitas empresas e edifícios residenciais começaram a utilizar soluções para prover acesso à internet através de pequenos servidores (routers) que fazem a comunicação entre a rede do cliente e a internet. Nesse momento surgiu a idéia de juntar duas conexões com a internet de modo que um unico canal de saída fosse visto fazendo com que a velocidade da conexão fosse duplicada, consequentemente barateando o custo de uma conexão de por exemplo 1 Mbps, Swpe to page que sai pelo valor de em prática a idéia de com a internet e até contra queda de con que demonstra de fo r13 Kbps. Para por to de conexão undÃCncia a falhas ‘frini HOW-TO” o esse tipo de utilizado para a demonstração do exemplo é um edifício residencial no qual existem duas conexões com a internet através de assinaturas de acesso a banda-larga (Velox).
Os dois modems ADSL estão configurados como ROTEADORES e existe um sewidor linux (distribuição a escolha) com 3 placas de rede que estão configuradas da seguinte maneira: etho: Rede interna (Rede do edifíci0) – (192. 1680. 1 /255. 255. 255. 0) ethl: Conexão Velox – (192. 168. 1. 2/255. 255. 255. 0) eth2: conexao velox – (192. 168. 2. 2/255. 255. 255. 0) O dispositivo de rede ethO está ligado a um switch aonde as demais máquinas dos apartamentos estão conectadas. OBS: Neste cenário devemos ressaltar que todos os computadores da rede interna do edifício poderão se comunicar por estarem ligadas diretamente ao segmento da rede. Configurações: Primeiro Passo: Inicializando as conexões. Neste ponto começarei a mostrar os scripts utilizados para a configuração do servidor.
Vou começar mostrando algumas configurações que foram feitas dentro do /etc/rc. local, que acabaram sendo de grande ajuda para que o serviço funcionasse corretamente. – /etc/rc. local — — in/sh # # This script Will be executed *afterk all the other init scripts. # You can put your own initialization stuff in here if you don’t # want to do the full Sys V style init stuff. touch /var/lock/ subsys/local echo “Inicializando conexao com a internet.. ” Isbin/ ifdown ethl /sbi 13 Ivar/lock/subsys/local echo “Inicializando conexao com a internet.. ” /sbin/ifdown ethl /sbin/ifdown eth2 echo “Iniclizando VELOX #1” /sbin/ifup ethl /sbin/route add default gw 192. 168. 1. /etc/firewall/ip-velox. pl echo “Inicializando VELOX #2” /sbin/ifup eth2 /sbin/route del defaultgw 192. 168. 1. 1 Isbin/ route add default g-w 192. 168. 2. fetc/firewall/ip-velox. pl /sbin/route del default gw 192. 168. 2. 1 echo “Configurando o firewall” /etc/firewall/firewall. sh – /etc/rc. local Essas configurações foram feitas para que o velox pudesse conectar-se automaticamente usando o script ip-velox. pl (Desenvolvido pelo Fabio Vilan, e pode ser encontrado em http://www. isec. com. br/velox). OBS: Não sei informar se este script ainda consegue conectar-se ao velox. O legal dele é a parte de teste de conexão (testa se está ativa ou não).
As configurações das rotas foram necessarias para que cada velox pudesse conectar e autenticar-se pois o problema que geralmente contece quando se tem duas conexões no mesmo computador é que, quando a primeira conexão é estabelecida a rota padrão é automatlcamente definida, assim a segunda conexão fica perdlda, tentando enviar pacotes que usam a rota padrão, neste caso pela primeira que já está estabelecida. Assim não conseguiamos autenticar a segunda conexão do velox. Lendo-se o script é possível identificar os passos para o estabelecimento das conexões: 1. Derruba as d script é possível identificar os passos para o estabelecimento das conexões: 1. Derruba as duas conexões (uma de cada velox); 2. Levanta a placa do primeiro velox (Velox #1 3. Adiciona uma rota padrão para esta placa que foi inicializada; 4. Tenta se conectar e autenticar utilizando o script ip-velox. pl; 5. Levanta a placa do segundo velox (Velox #2); 6.
Deleta a rota padrão criada para o primeiro velox (Velox #1); 7. Adiciona a rota padrão para o segundo velox (Velox #2); 8. Utiliza o script de conexão e autenticação para o segundo velox (Velox #2); 9. Deleta a rota padrão criada para o segundo velox (Velox #2); 10. Levanta o firewall. OBS: Este script termina por não estabelecer uma rota padrão, pois estas configurações serão feitas dentro do script /etc/ irewall/firewall. sh que é chamado pelo rc. local ao final do processo de autenticação. Segundo Passo: Criando tabelas de conexões para roteamento. Quando o iproute2 está instalado é criado um arquivo dentro do diretório letc/iproute2 (ou /etc), chamado rt_tables.
O arquivo onde as tabelas (de regras) de roteamento são definidas. Cada tabela é definida por seu número identificador e nome. A ordenação vai de 0 à 255 (256 valores = 8 bits) e a falxa de 253 à 255 é reservada às tabelas do sistema (local, main e default). O kernel trabalha exclusivamente com o identificador númerico da tabela. Assim podemos estabelecer novas tabelas e definir situações especiais de roteamento. Exemplo de arquivo (fetc/ estabelecer novas tabelas e definir situações especiais de roteamento. Exemplo de arquivo (/etc/iproute2/rt_tables) utilizado para a configuração do balanceamento de links de acordo com o cenáno proposto. /etc/iproute2/rt_tables # # reserved values # #255 local #254 main #253 default unspec # # local # #1 inr. ruhep 10 veloxl 11 velox2 30 velox ‘etc/iproute2/rt_tables Neste exemplo foram criadas 3 tabelas que serão utilizadas para a criação das regras de roteamento avançadas, necessárias para funcionamento do balanceamento de links. As tabelas cridas no arquivo rt_tables foram: valor 10 11 30 Nome veloxl velox2 velox De acordo com o arquivo, uma tabela tem “ID” 10, outra tem “ID” 11 e outra tabela, com valor mais acima tem “ID” 30. A criação dessas tabelas foram necessárias, pois são utilizadas no momento em que serão criadas as regras de roteamento.
Para maiores explicações sobre rt_tables, e roteamento avançado, procure pelos documentos da RNP (GTER), http://eng. registro . br/gterl 7/videos/05-roteamento-avancado-linux. pdf, em sites de busca (google) www. google. com. br, tambem vale a pena ar uma olhada no how-to do iproute2, além disso existe uma empresa chamada Alto Rio Preto Informatica, que disponibilizou um excelente “case” em seu site: http://v,mw. altoriopreto. com . br/case1_tech2. php Terceiro passo. Desenvolvendo o script do firew http://www. altoriopreto. com. br/casel_tech2. php Terceiro Passo: Desenvolvendo o script do firewall e criando o roteamento. O script /etc/firewall/firewall. sh (que é chamado pelo /etc/rc. ocal) contém não apenas configurações do firewall, mas também regras de NAT e ajustes nas tabelas de roteamento para que seja feito o balanceamento. para os casos das configurações das abelas de roteamento usaremos o comando “ip” e para o firewall e as regras de nat o “iptables”. Este firewall foi escrito com base na documentação do firewall de exemplo do Márcio Oliveira (marcio@netkraft. com. br), que provÃa acesso à internet para uma rede interna através do squid (porém neste exemplo não o usamos). Ao longo do script existirão comentários sobre as regras que o script está executando, mantendo assim uma linha lóglca de configuração e simplificando a identificação de comandos. – /etc/firewall/firewall. sh — Firewall for ADSL Velox Telemar # # 3y Leandro R. eandro@cesan . com. r # # OBS: Balanceamento de trafego para # # 2 links ADSL Legenda eth0 -> Rede interna (192. 168. 0. 1/24) ethl -> Velox #1 (192. 168. 1. 2/24) eth2 velox (192. 1 68. 2. 2/24) # Variaveis DNS1=i’200. 202. 93. 75’i DNS2=’200. 202. O. 34’i # Carregando os modulos basicos: echo -n “Carregando os modulos… ” modprobe ip_tables modprobe iptable_filter modprobe PAGF 13 -n “Carregando os modulas… ” modprobe ip_tables modprobe iptable_fllter modprobe Ip_conntrack modprobe ip_conntrack_ftp modprobe iptable_nat modprobe ip_nat_ftp modprobe ipt_LOG modprobe ipt_state modprobe echo ” Resetando o Firewall: echo -n “Resetando o firewall… ptables – F iptables -Z iptables -X iptables iptables iptables iptables echo ‘ t -P -P -P nat -F INPUT DROP FORWARD DROP OUTPUT ACCEPT [OKT’ # Habilitando o roteamento de pacotes: echo -n “Habilitando o roteamento… ” echo “1 ” > /proc/sys/net/ipv4/ip_forward echo “1′ > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo ” [OK]’ # Liberando a chain INPUT para o localhost: echo -n “Liberando acesso do localhost… ” iptables -A INPUT -p ALL -s 127. 0. 0. 1 -i lo – j ACCEPT iptables -A INPUT -p ALL -s 192. 168. 0. 1 -i lo -j ACCEPT iptables -A INPUT -p ALL -s 192. 168. 1. 2 -i lo -j ACCEPT iptables -A INPUT -p ALL -s 192. 58. 2. 2 -i lo -j ACCEPT echo ” # Otimizando o firewall: echo -n “‘Otimizando o roteamento… iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT echo ” [OK]” # Liberando resposta dos servidores DNS: echo -n “Liberando servidores DNS… ” iptables -A INPUT -p udp -s 192. 168. 0. 0/24 -sport 53 d $DNSI -j ACCEPT iptables -A INPUT -p udp -s 192. 168. 0. 0/24 sport 53 -d $DNS2 -j ACCEPT echo ” [OK]” DHCP server echo -n “Liberando servidor DHCP… ” iptables -A INPUT -p udp -s 192. 168. 0. 0/24 -sport 79 -d 192. 168. 0. 1 -j ACCEPT echo i’ [OKT’ # Des DHCP… ” ptables -A INPUT -p udp -s 192. 168. 0. 0/24 —sport 9 -d 192. 168. 0. 1 -j ACCEPT echo [OK]” # Descartar pacotes fragmentados: echo -n “Bloqueando pacotes fragmentados… iptables -A INPUT -i ethl -f -j LOG –log-prefix “Pacote fragmentado: ” iptables -A INPUT -i ethl -f -j DROP iptables -A INPUT -i eth2 -f -j LOG -log-prefix ‘Pacote Fragmentado: ‘i iptables -A INPUT -i eth2 -f -j DROP echo ” [OK]” # Bloqueando ataques do tipo SPOOF de IP: echo -n “Bloqueando spoofing… ” iptables A INPUT -i ethl -s 10. 0. 0. 0/8 -j DROP iptables -A INPUT -i ethl -s 172. 16. 0. 0/12 -j DROP iptables -A INPUT -i ethl -s 192. 168. 0. 0/16 -j DROP iptables -A INPUT -i ethl -s 224. 0. 0. /4 -j DROP iptables – A INPUT -i ethl -s 240. 0. 0. 0/5 -j DROP echo ” [ORI” # Liberando alguns acessos por ping: echo -n “Liberando acesso iptables -A INPUT -p icmp iptables -A INPUT -p icmp iptables -A INPUT -p icmp echo ” por ping… i’ –icmp-type 8 -i ethO -j ACCEPT –icmp-type O -j ACCEPT -s 192. 168. 0. /24 -d 0/0 -j ACCEPT [01<1' # Regra para SSH: (opcional) echo -n "Liberando acesso ao SSH... " iptables -A INPUT -p -rcp --dport 22 -j ACCEPT echo " [OK]" # Regras do FORWARD # Descarta pacotes invalidos: echo - n "Descartando pacotes invalidas para reenvio... " iptables -A FORWARD -m state --state INVALID -j DROP echo " [OK]" Mantendo conexoes ativas: echo -n "Manutencao de conexoes ativas... " iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT echo " [00' # Liberando ac FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT echo " [OK]" # Liberando acesso ao DNS para a rede interna (Email): echo -n "Liberando DNS para rede interna... " iptables -A FORWARD -s 192. 168. 0. /24 -j ACCEPT iptables iptables iptables iPtables ech0 " -A -A -A -A FORWARD FORWARD FORWARD FORWARD -p -p -p -p udp udp udp udp -s -s -s -s 192. 168. 0_0/24 d $DNSI --dport 53 192. 168. 0. 0/24 -d $DNS2 --dport 53 $DNSI sport 53 -d 192. 168. 0. 0/24 SDNS2 --sport 53 -d 192. 68. 0. 0,'24 [OK]" -j -j -j -j ACCEPT ACCEPT ACCEPT ACCEPT # Fazendo mascaramento de enderecos IP (NAO NAT): # OBS: essa regra eh mutuamente excludente com a proxima, a do NAT ou seja, escolha uma das duas echo -n "Habilitando o mascaramento... " #iptables -t nat -A POSTROUTING - j MASQUERADE iptables -t nat -A POSTROUTING -o ethl - j MASQUERADE iptables -t nat -A POSTROUTING -o eth2 - j MASQUERADÉ echo " [OKT' # Marcando pacotes echo - n "Marcando pacotes... " iptables -A PREROUTING -t mangle - s 192. 168. 0. /24 -d 0/0 -j MARK --set-mark 3 echo " [OKT' # Desabilitando o filtro de pacotes do martian source echo - "Desligando rp_filter... " for eee in /proc/sys/net/ipv4/conf/*/ rp_fllter; do echo O > Seee done echo ” [OK]” Definindo regras de balanceamento de Link: echo -n “Balanceando links velox… ” # velox ip route add 192. 168. 1. 0/24 dev ethl src 192. 168. 1. 2 table ve10X1 route add 192. 1680. 0/24 via 192. 168. 011 tame veloxl ip route add default via 192. 168. 1. 1 table veloxl # velox ip ro 192. 168. 0. 0/24 via 192. 168. 0. 1 table veloxl ip route add default via 192. 168. 1. 1 table veloxl # velox ip route add 192. 168. 2. 0/24 dev eth2 src 192. 168. . 2 table velox2 #ip route add 192. 168. 0. 0/24 via 192. 168. 0. table velox2 ip route add default via 192. 168. 2. 1 table velox2 # setando velox na tabela principal de roteamento ip route add 192. 168. 1. 0/24 dev ethl src 192. 168. I . 2 iP route add 192. 168. 2. 0/24 dev eth2 src 192. 168. 2. 2 # setando a rota preferencial ip route add default via 192. 168. 1. 1 # regras das tabelas ip rule add from 192. 168. 1. 2 table veloxl ip rule add from 192. 158. 2. 2 table velox2 # balanceamento de link ip rule add fiumark 3 lookup velox prio 3 ip route add default table velox nexthop via 192. 158. 1. 1 dev ethl weight 1 nexthop via 192. 168. . 1 dev eth2 weight 1 #OBS: o comando assima eve ser digitado em uma só linha, ou # usando o caractere para dividí-la. # flush no roteamento ip route flush cache echo ” [OKT’ sleep 3 # /etc/firewall/firewall. sh O script ainda libera o acesso para que o nosso serviço de DHCP rodando neste mesmo servidor possa fornecer o pool de endereços IP para os apartamentos do edifício exemplo do nosso cenário. No final do script, ou seja, na parte onde são feitas as configurações para o funcionamento do balanceamento dos links, é importante a observação que faz referencia ao comando de balanceamento que deve ser digitado em somente uma linha,