Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org Fóruns > UnderLinux Wiki
Wiki Classificados Galeria Reviews Jogos Comunidades RSS Feeds FAQ Termos de Uso Sobre
Cadastre-se FotosBlogs Lista de Membros Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Ferramentas pessoais
Publicidade

From UnderLinux Wiki

Imagem:qmail.png

Tutorial Squid



Tabela de conteúdo

Introdução

Opá galera! Vendo que existe um grande interesse desse tipo de assunto, resolvi criar este artigo!

O que não ficou claro, postem ae! Quem tiver mais alguma ideia, manda para mailto:japa@aloo.com.br. To pensando em fazer um howto!


LOAD BALANCE

Vou tentar ser mais claro falando sobre estes dois assuntos!

Divisão de cargas entre 2 ou mais links e qualidade de serviço.

Com o script abaixo, pode-se fazer varias coisas relacionando com loadbalance.

1- canalizar serviços para usarem um determinado link

2- fazer serviços utilizarem 2 links, no metodo nexthop com peso

#!/bin/sh

echo "Inicializando procedimento de rotas"

# RESETANDO TABELAS DE ROTAS, PADRAO DO SISTEMA
echo "255 local" > /etc/iproute2/rt_tables
echo "254 main" >> /etc/iproute2/rt_tables
echo "253 default" >> /etc/iproute2/rt_tables
echo "0 unspec" >> /etc/iproute2/rt_tables
# ADICIONANDO OUTRAS TABELAS
echo "200 router1" >> /etc/iproute2/rt_tables
echo "201 router2" >> /etc/iproute2/rt_tables
echo "202 router3" >> /etc/iproute2/rt_tables

echo " declarando variaveis"
GATE1=200.xxx.xxx.1
LINK1=200.xxx.xxx.3
GATE2=192.168.1.1
LINK2=192.168.1.2


# RESETANDO AS TABELAS
echo " resetando as tabelas"
ip route flush table router1
ip route flush table router2
ip route flush table router3

# CRIANDO A TABELA 1
echo " criando a tabela 1"
ip route show table main | grep -v ^default | while read ROUTE ; do
ip route add table router1 $ROUTE
done
ip route add $LINK1 via $GATE1 table router1
ip route add default via $GATE1 table router1

# CRIANDO A TABELA 2
echo " criando a tabela 2"
ip route show table main | grep -v ^default | while read ROUTE ; do
ip route add table router2 $ROUTE
done
ip route add $LINK2 via $GATE2 table router2
ip route add default via $GATE2 table router2

# CRIANDO A TABELA 3
echo " criando a tabela 3"
ip route add default table router3 nexthop dev eth0 via $GATE1 weight 1 nexthop dev eth1 via $GATE2 weight 1

# CRIANDO AS REGRAS
echo " criando regras"
ip rule add from $LINK1 table router1 prio 26
ip rule add from $LINK2 table router2 prio 27
ip rule add fwmark 1 table router1 prio 29
ip rule add fwmark 2 table router2 prio 30
ip rule add fwmark 3 table router3 prio 25

# LIMPANDO CACHE
echo " limpando cache"
ip route flush cache

Observe a parte de CRIANDO REGRAS, foram criadas 3, para pegar pacotes marcados e direciona-los a utilizar uma determinada tabela de roteamento. Preste atenção nos parametros aonde tem fwmark, isso determina o valor da marcação do pacote! Que tera que bater com o valor marcado no iptables.

Foram criadas 3 tabelas:

A primeira, utiliza um link

A segunda, utiliza outro link

A terceira faz nexthop entre as tabelas, a cada nova conexão dependendo do peso "weight".

Exemplo1: peso 1 por 1, balança em media 50% por cada link!

Exemplo2: peso 2 por 1, balança em media 66% por um link1 e 33% por outro link2!

Para fazer isso tudo funcionar, teremos que ir para segunda etapa, utilizando iptables e marcando os pacotes!

Exemplos:

### faz com que o servico dns faca consultas por um link
$IPTABLES -t mangle -A PREROUTING -p TCP -i eth2 --dport 25 -j MARK --set-mark 1
### faz com que o servico dns faca consultas por um link
$IPTABLES -t mangle -A OUTPUT -p UDP --dport 53 -m owner --uid-owner 25 -j MARK --set-mark 2
### faz o squid utilizar a tabela de roteamento com load balance
$IPTABLES -t mangle -A OUTPUT -p TCP --dport 80 -m owner --uid-owner 23 -j MARK --set-mark 3


BANDWIDTH MANAGER

Os codigos mostrados abaixo são, adapatados a uma outra situação, diferente da citada acima! Desenvolvi esse script para facilitar o alguns controles de gerenciamento e bloqueio. Nesta situação eu criei uma lista de acessos (lista.clientes)

No arquivo lista.clientes tenho:

José|192.168.100.3|128|64|A
estacao 002|192.168.100.4|256|128|B

São 5 campos divididos por "|". e os valores são:

nome|ip|downloadkbit|uploadkbit|status

Se status for A está ativo e se for diferente fica como bloqueado! ou seja, não é aplicada regra para o mesmo!

Segue abaixo o script add-htb.sh que eu uso

#!/bin/sh
IPTABLES="/sbin/iptables"
TC="/sbin/tc"
$TC qdisc del dev eth0 root
$TC qdisc del dev eth1 root
$TC qdisc add dev eth0 root handle 1: htb default 10
$TC qdisc add dev eth1 root handle 1: htb default 10
$TC class add dev eth0 parent 1: classid 1:1 htb rate 1024kbit ceil 10240kbit
$TC class add dev eth1 parent 1: classid 1:1 htb rate 1024kbit ceil 10240kbit
$TC class add dev eth0 parent 1:1 classid 1:10 htb rate 10240kbit ceil 10240kbit prio 4
$TC qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 5
$TC filter add dev eth0 parent 1:0 protocol ip prio 4 handle 10 fw classid 1:10
$TC class add dev eth1 parent 1:1 classid 1:10 htb rate 10240kbit ceil 10240kbit prio 4
$TC qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 5
$TC filter add dev eth1 parent 1:0 protocol ip prio 4 handle 10 fw classid 1:10

addrules() {
#/ permite no firewall
$IPTABLES -A FORWARD -s $ADDR -j ACCEPT
$IPTABLES -A FORWARD -d $ADDR -j ACCEPT
# para upload
$TC class add dev eth0 parent 1:1 classid 1:$ID htb rate $UPLO ceil $UPLO prio 4
$TC qdisc add dev eth0 parent 1:$ID handle $ID: sfq perturb 5
$TC filter add dev eth0 parent 1:0 protocol ip prio 4 handle $ID fw classid 1:$ID
$IPTABLES -t mangle -A FORWARD -s $ADDR -j MARK --set-mark $ID
# para download
$TC class add dev eth1 parent 1:1 classid 1:$ID htb rate $DOWN ceil $DOWN prio 4
$TC qdisc add dev eth1 parent 1:$ID handle $ID: sfq perturb 5
$TC filter add dev eth1 parent 1:0 protocol ip prio 4 handle $ID fw classid 1:$ID
$IPTABLES -t mangle -A POSTROUTING -d $ADDR -j MARK --set-mark $ID
}

ID=11
LISTA=`cat lista.clientes`
for CLIENTE in $LISTA; do
NOME=`echo $CLIENTE | awk -F "|" '{print $1}'`
ADDR=`echo $CLIENTE | awk -F "|" '{print $2}'`
DOWN=`echo $CLIENTE | awk -F "|" '{print $3}'`"kbit"
UPLO=`echo $CLIENTE | awk -F "|" '{print $4}'`"kbit"
STAT=`echo $CLIENTE | awk -F "|" '{print $5}'`
# checa se esta ativado
if [ "$STAT" = "A" ]; then
echo "ATIVO -> $NOME, $ADDR -> DOWN=$DOWN e UPLO=$UPLO"
addrules
else
echo "BLOCK -> $NOME"
fi
# soma indice
let "ID=$ID+1"
done


QOS em nivel de IPTABLES

É bem interessante! Mais ainda se integrar com a nova tecnologia do L7(layer7), que idependente da porta, a pessoa tem como descobrir o serviço que está rodando!

Abaixo foram criadas chains para facilitar a manutenção do mesmo! Segue parte do script.

## TOS stuff: (type: iptables -m tos -h)
## Minimize-Delay 16 (0x10)
## Maximize-Throughput 8 (0x08)
## Maximize-Reliability 4 (0x04)
## Minimize-Cost 2 (0x02)
## Normal-Service 0 (0x00)
$IPTABLES -t mangle -N MANGLE_POSTROUTING
$IPTABLES -t mangle -F MANGLE_POSTROUTING
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 20 -j TOS --set-tos 8
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 21 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 22 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 23 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 25 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 53 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p udp --dport 53 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_POSTROUTING -p tcp --dport 80 -j TOS --set-tos 8
$IPTABLES -t mangle -N MANGLE_PREROUTING
$IPTABLES -t mangle -F MANGLE_PREROUTING
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 20 -j TOS --set-tos 8
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 21 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 22 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 23 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 25 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 53 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_PREROUTING -p udp --dport 53 -j TOS --set-tos 16
$IPTABLES -t mangle -A MANGLE_PREROUTING -p tcp --dport 80 -j TOS --set-tos 8

Agora é so chamar a chain, na tabela mangle do seu firewall!


Epílogo

Espero ter ajudado a todos! Sofri um pouco para aprender tudo isso também!

Qualquer duvida, posta ae!

Obs.: Existem muitas maneiras de fazer tudo isso! essa é so uma, se alguem tiver mais dicas, manda ae! Ou até mesmo para fazermos um howto!


Créditos

  • Este tutorial foi desenvolvido por japaeye4u e editado no wiki por Duca.

Imagem:Avatar olhos spawn 2.jpg --Duca 17:48, 10 Janeiro 2006 (BRDT)

Horários baseados na GMT -3. Agora são 10:01.


Powered by vBulletin®
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.