Re: Direcionar Trafego p2p
P2P é uma praga, nao adianta marcar!
O que voce deve fazer é o seguinte:
1 - crie uma tabela personalizada (link1), copie as rotas de redes da tabela main para ela, coloque o gateway padrao, o ip da LP com metrica 0
2 - coloque o gateway padrao o ip do adsl com metrica 1
3 coloque as regras: (ip rule)
0: local
10: fwmark 1 link1
32000: main
32001: default
marque o que vc conhece com 1 (http, smtp, pop3, dns) para sair pelo link da LP, o resto deixe sair pelo adsl
Só assim vc conseguira deixar um link para o lixo (adsl) e um link para o que presta.
Re: Direcionar Trafego p2p
jesus,
Essa sua regra não funciona pois a conexão P2P só é identificada como sendo P2P DEPOIS que ela é estabelecida, ou seja, na chain POSTROUTING você não identificará o pedido P2P e apenas o tráfego propriamente dito que já terá sua rota definida.
O ideal é fazer como o Patrick falou. Marque tudo o que tu conhece e quer que seja mais rápido e mande por um link. O restante manda pelo outro. É uma configuração complicada, mas possível de ser feita. Estude bastante o LARTC e, se achar difícil alguma coisa, manda no forum que a gente tenta ajudar.
Re: Direcionar Trafego p2p
jesus,
Para que você possa entender meu sistema de QoS resolvi colocar aqui meus scripts, talvez assim você consiga se localizar em como fazer isso que você queres:
1) DESLIGUE SISTEMA DE CACHE NA MAQUINA QUE TERA O QoS HABILITADO. Baixe todos os direcionamentos de Squid dessa máquina e desligue o Squid.
2) PRIMEIRO ARQUIVO: /etc/rc.d/loadbalance
Esse arquivo divide minhas redes externas em tabelas separadas e refaz o sitema de roteamento padrão do linux.
Código :
#!/bin/bash
IPT="/usr/local/sbin/iptables"
IP="/sbin/ip"
#----
# Declara redes
#----
# FrameRelay
IFE1="eth0"
IPE1="200.163.208.2"
NWE1="200.163.208.0/26"
GWE1="200.163.208.1"
PRE1="3"
#
# DSL
#IFE2="eth2"
#IPE2="10.1.2.10"
#NWE2="10.1.2.0/24"
#GWE2="10.1.2.1"
#PRE2="1"
#
# DSL
IFE3="eth3"
IPE3="10.1.1.10"
NWE3="10.1.1.0/24"
GWE3="10.1.1.1"
PRE3="2"
#---
# Tabelas de roteamento
#---
L1="201"
L2="202"
L3="203"
MULTI="222"
#---
# Desabilita tabela main
#---
$IP rule add prio 50 table main
#$IP route del default table main
$IP rule add prio 60 fwmark 40 lookup $L1
#---
# ROTAS
#---
# Link 1 = L1
$IP rule add prio $L1 from $NWE1 table $L1
$IP route add default via $GWE1 dev $IFE1 proto static table $L1
$IP route append prohibit default table $L1 metric 1 proto static
#
# Link 2 = L2
#$IP rule add prio $L2 from $NWE2 table $L2
#$IP route add default via $GWE2 dev $IFE2 src $IPE2 proto static table $L2
#$IP route append prohibit default table $L2 metric 1 proto static
#
# Link 3 = L3
$IP rule add prio $L3 from $NWE3 table $L3
$IP route add default via $GWE3 dev $IFE3 proto static table $L3
$IP route append prohibit default table $L3 metric 1 proto static
#
# Rota padrao para todo o restante
$IP rule add prio $MULTI table $MULTI
$IP route add default via $GWE3 dev $IFE3 proto static table $MULTI
$IP route flush cache
/etc/rc.d/qos
3) ARQUIVO QoS: /etc/rc.d/qos
Este arquivo é chamado pelo loadbalace e faz o cadastramento das classes de QoS.
Código :
#!/bin/sh
#------
# Script de QoS Cyber Nett
#------
# Nataniel Klug
# [email][email protected][/email]
#------
TC="/sbin/tc"
IPT="/usr/local/sbin/iptables"
$IPT -t mangle -X
$IPT -t mangle -F
DLE1="2800"
UPE1="2800"
IFE1="eth0"
DLE3="700"
UPE3="250"
IFE3="eth3"
#------
# Marca os pacotes do link principal
#------
$IPT -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
$IPT -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
/etc/rc.d/qos-script
$IPT -t mangle -A PREROUTING -p icmp -j MARK --set-mark 40
$IPT -t mangle -A OUTPUT -p icmp -j MARK --set-mark 40
#------
# Apagando regras antigas de QoS
#------
# eth0
$TC qdisc del dev $IFE1 root 2> /dev/null > /dev/null
$TC qdisc del dev $IFE1 ingress 2> /dev/null > /dev/null
# eth3
$TC qdisc del dev $IFE3 root 2> /dev/null > /dev/null
$TC qdisc del dev $IFE3 ingress 2> /dev/null > /dev/null
#------
# Regras para a placa eth0
#------
# upload
$TC qdisc add dev $IFE1 root handle 1: htb default 20
ACE1="/sbin/tc class add dev $IFE1 parent"
$ACE1 1: classid 1:1 htb rate ${UPE1}kbit burst 18k
$ACE1 1:1 classid 1:10 htb rate ${UPE1}kbit burst 18k prio 1
$ACE1 1:1 classid 1:11 htb rate ${UPE1}kbit burst 18k prio 2
$ACE1 1:1 classid 1:20 htb rate $[5*$UPE1/10]kbit burst 18k prio 3
QAE1="/sbin/tc qdisc add dev $IFE1 parent"
$QAE1 1:10 handle 10: sfq perturb 10
$QAE1 1:11 handle 11: sfq perturb 10
$QAE1 1:20 handle 20: sfq perturb 10
FAE1="/sbin/tc filter add dev $IFE1 parent 1:0 protocol ip prio"
$FAE1 1 handle 35 fw classid 1:10
$FAE1 2 handle 40 fw classid 1:11
$FAE1 3 handle 45 fw classid 1:12
# download
$TC qdisc add dev $IFE1 handle ffff: ingress
$TC filter add dev $IFE1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DLE1}kbit burst 24k drop flowid :1
#------
# Regras para a placa eth3
#------
# upload
$TC qdisc add dev $IFE3 root handle 1: htb default 20
ACE3="/sbin/tc class add dev $IFE3 parent"
$ACE3 1: classid 1:1 htb rate ${UPE3}kbit burst 6k
$ACE3 1:1 classid 1:10 htb rate ${UPE3}kbit burst 6k prio 1
$ACE3 1:1 classid 1:11 htb rate ${UPE3}kbit burst 6k prio 2
$ACE3 1:1 classid 1:20 htb rate $[8*$UPE3/10]kbit burst 6k prio 3
QAE3="/sbin/tc qdisc add dev $IFE3 parent"
$QAE3 1:10 handle 10: sfq perturb 10
$QAE3 1:11 handle 11: sfq perturb 10
$QAE3 1:20 handle 20: sfq perturb 10
FAE3="/sbin/tc filter add dev $IFE3 parent 1:0 protocol ip prio"
$FAE3 1 handle 35 fw classid 1:10
$FAE3 2 handle 40 fw classid 1:11
$FAE3 3 handle 45 fw classid 1:12
# download
$TC qdisc add dev $IFE3 handle ffff: ingress
$TC filter add dev $IFE3 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${DLE3}kbit burst 12k drop flowid :1
#------
# Marcando pacotes e direcionando
#------
$IPT -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 35
$IPT -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 35
$IPT -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 35
$IPT -t mangle -I OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 35
$IPT -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p -j MARK --set-mark 45
$IPT -t mangle -A PREROUTING -p tcp -m mark --mark 45 -j CONNMARK --save-mark
4) ARQUIVOS: /etc/rc.d/qos-scripts e /etc/rc.d/qos-portas
O script gera as marcacoes de pacotes com destino as portas que estao no arquivo portas (uma a uma), alem de marcar tambes os pacotes P2P como tendo a prioridade mais baixa nas minhas classes de controle. Ele marca os P2P usando o IPP2P e iptablems CONNMARK.
Código :
#!/bin/bash
IPT="/usr/local/sbin/iptables"
for i in `cat /etc/rc.d/qos-portas`
do
$IPT -t mangle -A PREROUTING -p tcp -m tcp --dport $i -j MARK --set-mark 40
$IPT -t mangle -A PREROUTING -p udp -m udp --dport $i -j MARK --set-mark 40
$IPT -t mangle -A OUTPUT -p tcp -m tcp --dport $i -j MARK --set-mark 40
$IPT -t mangle -A OUTPUT -p udp -m udp --dport $i -j MARK --set-mark 40
done
5) Alem disso eu chamo todos os processos usando /etc/rc.d/rc.local e um desses processos é meu arquivo de firewall:
Código :
#!/bin/bash
#----
# Habilita roteamento
# Pode ser habilitado no /etc/sysctl.conf
#----
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "8192" > /proc/sys/net/ipv4/ip_conntrack_max
#
#----
# Variaveis de Sistema
#----
IPTABLES="/usr/local/sbin/iptables"
ROUTE="/sbin/route"
#
#----
# Regras gerais de tratamento de pacotes
#----
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -X
$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT
#
#----------
# Aceita todas as conexoes do loopback
#----------
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A FORWARD -i lo -j ACCEPT
#
#----------
# Ping-of-Death, Syn-Flood, Port-Scanner
# Permissao de ping para as interfaces locais
#----------
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
$IPTABLES -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
#
#----------
# Aceita conexoes estabelecidades
#----------
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
#----------
# LOG e DROP de pacotes fragmentados
#----------
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
$IPTABLES -A INPUT -f -j LOG --log-prefix "Pacote INPUT fragmentado: "
$IPTABLES -A INPUT -f -j DROP
$IPTABLES -A FORWARD -f -j LOG --log-prefix "Pacote FORWARD fragmentado: "
$IPTABLES -A FORWARD -f -j DROP
#
#----------
# Declara IP dos Servidores
#----------
NS1="200.163.208.2"
GW="200.163.208.3"
NS3="200.163.208.65"
ELJ="172.20.0.164"
EMA="172.20.0.11"
MUR="172.20.0.12"
MAIL="200.163.208.4"
WEB="200.163.208.5"
#
#----------
# Declara redes utilizadas por este cache
#----------
PTP="172.20.0.0/27"
PTPNS3="172.20.0.160/29"
V01="200.163.208.0/26"
V02="200.163.208.64/26"
V03="200.140.222.128/25"
V04="201.35.16.0/24"
I01="192.168.167.0/24"
PPPOE00="192.168.160.0/24"
PPPOE01="192.168.161.0/24"
INTERNA="172.30.0.0/24"
#
#----------
# Declara rotas para redes distantes
#----------
$ROUTE add -net $PTP gw $ELJ
$ROUTE add -net $V02 gw $ELJ
$ROUTE add -net $V03 gw $ELJ
$ROUTE add -net $V04 gw $ELJ
$ROUTE add -net $I01 gw $ELJ
$ROUTE add -net $PPPOE01 gw $ELJ
#
#----------
# Regras para funcionamento do Conectividade Social da CEF
#----------
$IPTABLES -t nat -A PREROUTING -d 200.201.166.100 -p tcp --dport 80 -j DNAT --to 200.201.166.100
$IPTABLES -t nat -A PREROUTING -d 200.201.169.69 -p tcp --dport 80 -j DNAT --to 200.201.169.69
$IPTABLES -t nat -A PREROUTING -d 200.201.173.68 -p tcp --dport 80 -j DNAT --to 200.201.173.68
$IPTABLES -t nat -A PREROUTING -d 200.201.174.202 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.202:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.203 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.203:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.204 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.204:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.205 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.205:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.206 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.206:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.207 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.207:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.208 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.208:80
$IPTABLES -t nat -A PREROUTING -d 200.201.174.209 -p tcp -m tcp --dport 80 -j DNAT --to-destination 200.201.174.209:80
#
#----------
# DNAT para servidores VoIP
#----------
/usr/local/cnett/firewall/voip
#
#----------
# Regras para o funcionamento TCP do SQUID
#----------
#$IPTABLES -t nat -A PREROUTING -s $PTPNS3 -d ! $V01 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
#$IPTABLES -t nat -A PREROUTING -s $PPPOE01 -d ! $V01 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
#$IPTABLES -t nat -A PREROUTING -s $INTERNA -d ! $V01 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
#
#----------
# Regras para o funcionamento UDP do SQUID
#----------
#$IPTABLES -t nat -A PREROUTING -s $PTPNS3 -d ! $V01 -p udp -m udp --dport 80 -j REDIRECT --to-ports 3128
#$IPTABLES -t nat -A PREROUTING -s $PPPOE01 -d ! $V01 -p udp -m udp --dport 80 -j REDIRECT --to-ports 3128
#$IPTABLES -t nat -A PREROUTING -s $INTERNA -d ! $V01 -p udp -m udp --dport 80 -j REDIRECT --to-ports 3128
#
#---------
# Mascara todas as redes invalidas e validas
# que passam por este servidor
#---------
$IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -o eth3 -j MASQUERADE
Acho que com isso tu ja tem bastante base para trabalho.
Todo tráfego que eu conheço e quero que seja mais estável sai pelo link framerelay, o resto vai embora pelo DSL. A unica coisa que nao pode ser controlada é a porta 53 (dns). Se você tentar mandar ela pelo link principal da pau e não resolve nomes. To tentando entender isso. Outra coisa, nunca tente mandar um serviço via layer7 para um link pois eles só recebem o cabeça-lho daquele serviço depois de estarem estabilizados e conectados e se tentar mudar a rota desse pacote ESTABILISHED ele não retorna pelo mesmo local e, resultado, problemas.
Re: Direcionar Trafego p2p
show de bola esse teu sistema. Um dia chego lah, rsrs.
Olha vc tem no wiki do underlinux, um tutotial sobre loadbalance, eu usei ele e funcionou perfeito aki comigo. Creio que pra min implementar esse sistema acima, ou parecido, preciso compilar o kernel etc etc, seguindo akele seu tutorial?
Obrigado pelas dicas.
Re: Direcionar Trafego p2p
jesus,
Que bom que tu usou o tutorial. Tem mais algumas coisas que coloquei nele mas ainda não tive tempo de estudar como funcionam esses Wikis... hehehehe...
Sim, se você seguir aquela versão do tutorial ela é suficiente para rodar sistemas de QoS. Esse sistema ainda está em faze de implantação, estou estudando muito vários artigos e usando listas de discussão para fazer um script funcional. Estou testando marcações usando o filtro u32.