+ Responder ao Tópico



  1. #1

    Padrão Direcionar Trafego p2p

    boa tarde, gostaria da opniao dos colegas pra direcionar trafego de compartilhadores pra outro link.

    Meu ambiente eh o seguinte:

    1 lp ppp de 1mega
    1 adsl de 1 mega

    Usando o ipp2p consigo ateh bloquear esse traffego, mas os clientes nao querem saber. Bem a ideia seria marcar eles e mandar tudo pro adsl. Os pacotes são marcados ai verifiquei pelo iptraf que foi redirecionado pro adsl as conexoes porem os programas nao se conectam, conto com a costumeira colaboracao e experiencia dos colegas.


    Fiz o seguinte:

    ##IPP2P
    iptables -t mangle -I PREROUTING -i eth1 -p tcp -m ipp2p --ipp2p -j MARK --set-mark 2
    iptables -t mangle -I OUTPUT -p tcp -m ipp2p --ipp2p -j MARK --set mark 2

    #DESABILITA FILTRO DE PACOTES.
    echo -n "Desligando rp_filter..."
    for eee in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 0 > $eee
    done
    echo " [OK]"

    # Joga trafego p2p (pacotes marcados com 2) para a adsl
    # ------------------------------------------------------------
    ip rule add fwmark 2 table 20 prio 20
    ip route add default via 172.16.0.1 dev eth2 table 20

    # Atualiza tabela de roteamento
    # ------------------------------------------------------------
    ip route flush cache

  2. #2

    Padrão 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.

  3. #3

    Padrão 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.

  4. #4

    Padrão 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.

  5. #5

    Padrão 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.

  6. #6

    Padrão 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.