Balanceamento e Roteamento Avançado com dois Links
Prezados colegas,
Primeiramente saudações pinguianas a todos.
Sei que já tem um certo tempo que não posto nada, mas esses dias eu passei por uma dificuldade que me motivou a escrever esse artigo.
Recebi a missão de implementar um servidor Gateway com dois links de internet, balanceamento de carga e FailOver. Como quebrei a cabeça para fazer as tabelas do balanceamento funcionar, resolvi escrever esse artigo para que fique tudo documentado e para ajudar as pessoas que venham a precisar da mesma solução.
Vejamos o cenário:
O que precisamos?
Primeiramente precisamos criar as tabelas no linux!
Primeiramente precisamos criar as tabelas no linux!
Edite o arquivo “/etc/iproute2/rt_table”:
1
| # vim /etc/iproute2/rt_table |
Deixe-o assim:
Agora vamos criar o script para adicionar as tabelas!
Vamos criar o seguinte arquivo:
Vamos criar o seguinte arquivo:
1
| # vim /usr/local/bin/balanceamento |
Deixe com o seguinte conteúdo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| #!/bin/bash ####################################################### #################### A T E N C A O #################### ### ### Colocar tabelas no arquivo /etc/iproute2/rt_tables ### para o balanceamento funcionar ### ### EXemplo: ### ### 24 link1 ### 25 link2 ####################################################### ## Variaveis de Comandos RULE= "/sbin/ip rule" ROUTE= "/sbin/ip route" ## Rede Local IF_PADRAO= "eth0" RD_PADRAO= "10.0.0.0/255.255.248.0" ## LINK1 IF_LINK1= "eth1" IP_LINK1= "201.143.112.163" GW_LINK1= "201.143.112.162" RD_LINK1= "201.143.112.161/255.255.255.248" ## LINK2 IF_LINK2= "eth2" IP_LINK2= "177.149.109.105" GW_LINK2= "177.149.109.104" RD_LINK2= "177.149.109.103/255.255.255.248" case $1 in add) echo "Adicionando Regras e Tabelas..." ## Configuracoes para o LINK1 $ROUTE $1 $RD_LINK1 dev $IF_LINK1 src $IP_LINK1 table link1 $ROUTE $1 default via $GW_LINK1 table link1 $RULE $1 from $IP_LINK1 table link1 $ROUTE $1 127.0.0.0 /8 dev lo table link1 $ROUTE $1 $RD_PADRAO dev $IF_PADRAO table link1 $RULE $1 fwmark 1 table link1 # ## Configuracoes para o LINK2 $ROUTE $1 $RD_LINK2 dev $IF_LINK2 src $IP_LINK2 table link2 $ROUTE $1 default via $GW_LINK2 table link2 $RULE $1 from $IP_LINK2 table link2 $ROUTE $1 127.0.0.0 /8 dev lo table link2 $ROUTE $1 $RD_PADRAO dev $IF_PADRAO table link2 $RULE $1 fwmark 2 table link2 # $ROUTE flush cache echo "[OK]" ;; del) echo "Removendo Regras e Tabelas.." ## Limpando Tabelas $ROUTE flush table link1 $ROUTE flush table link2 ## Limpando Regras $RULE $1 from $IP_LINK1 table link1 $RULE $1 from $IP_LINK2 table link2 # Limpando Marcacoes $RULE $1 fwmark 1 table link1 $RULE $1 fwmark 2 table link2 echo "[OK]" ;; *) echo "Use add ou del" ;; esac |
Agora, para ativar o balanceamento, precisamos rodar o scrip! Faça o comando abaixo:
1
| # /usr/local/bin/balanceamento add |
Feito isso, você já terá as tabelas criadas e ativas! Agora você pode acessar seu servidor tanto pelo link1 (201.143.112.163) quanto pelo link2 (177.149.109.105).
Agora, precisamos configurar o script para criar as tabelas sempre que o servidor liga! Para isso edite o arquivo “/etc/rc.local” com o comando abaixo:
1
| # vim /etc/rc.local |
Deixe-o assim:
Depois disso, sempre que o servidor reiniciar, ele já estará acessível pelos dois links. Agora que já está tudo configurado e funcionando, vamos brincar um pouco com o balanceamento! Vou descrever aqui uns exemplos.
Vamos supor que você queira que a máquina 10.0.0.5 utilize o link2 para navegar na internet. Basta inserir uma regra no Firewall indicando isso:
1
| iptables -t mangle -A PREROUTING -s 10.0.0.5 -j MARK -- set -mark 2 |
Vamos supor que você queira que o seu servidor utilize o link2 para mandar e-mails para fora! Façamos então a seguinte regra:
1
| iptables -t mangle -A OUTPUT -p tcp -m multiport --dport 25,587 -j MARK -- set -mark 2 |
Isso foi alguns exemplos simples. Agora, basta usar a sua imaginação.
UMA COISA MUITO IMPORTANTE A SER MENCIONADA, é que se você tiver uma VPN interligando todas as filiais (como nesse artigo), você precisa adicionar as rotas paras as redes das VPNs nas tabelas. Para isso, substitua os scripts “/etc/openvpn/rotas/up.sh” e “/etc/openvpn/rotas/down.sh” desse artigo por esses:
Script “/etc/openvpn/rotas/up.sh“:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #!/bin/sh ## Comandos ROUTE= "/sbin/ip route" ## VPN IF_VPN= "tap0" ## IPS VPNs IP_VPN_FILIAL1= "5.0.0.5" IP_VPN_FILIAL2= "5.0.0.15" ## Redes VPN RD_FILIAL1= "192.168.0.0/255.255.255.0" RD_FILIAL2= "172.4.96.0/255.255.255.0" $ROUTE add $RD_FILIAL1 via $IP_VPN_FILIAL1 $ROUTE add $RD_FILIAL1 via $IP_VPN_FILIAL1 dev $IF_VPN table link1 $ROUTE add $RD_FILIAL1 via $IP_VPN_FILIAL1 dev $IF_VPN table link2 $ROUTE add $RD_FILIAL2 via $IP_VPN_FILIAL2 $ROUTE add $RD_FILIAL2 via $IP_VPN_FILIAL2 dev $IF_VPN table link1 $ROUTE add $RD_FILIAL2 via $IP_VPN_FILIAL2 dev $IF_VPN table link2 |
Script “/etc/openvpn/rotas/down.sh“:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| #!/bin/sh ## Comandos ROUTE= "/sbin/ip route" ## VPN IF_VPN= "tap0" ## IPS VPNs IP_VPN_FILIAL1= "5.0.0.5" IP_VPN_FILIAL2= "5.0.0.15" ## Redes VPN RD_FILIAL1= "192.168.0.0/255.255.255.0" RD_FILIAL2= "172.4.96.0/255.255.255.0" $ROUTE del $RD_FILIAL1 via $IP_VPN_FILIAL1 $ROUTE del $RD_FILIAL1 via $IP_VPN_FILIAL1 dev $IF_VPN table link1 $ROUTE del $RD_FILIAL1 via $IP_VPN_FILIAL1 dev $IF_VPN table link2 $ROUTE del $RD_FILIAL2 via $IP_VPN_FILIAL2 $ROUTE del $RD_FILIAL2 via $IP_VPN_FILIAL2 dev $IF_VPN table link1 $ROUTE del $RD_FILIAL2 via $IP_VPN_FILIAL2 dev $IF_VPN table link2 |
Bom galera, fico por aqui!
No próximo artigo ensinarei como fazer um FAILOVER com os dois links.
No próximo artigo ensinarei como fazer um FAILOVER com os dois links.
Fonte e Autor:
http://www.aprendendolinux.com/balanceamento-e-roteamento-avancado-com-dois-links/
http://www.aprendendolinux.com/balanceamento-e-roteamento-avancado-com-dois-links/
Nenhum comentário:
Postar um comentário