+ Responder ao Tópico



  1. #1

    Padrão Controle de downloads por usuário

    Bom dia galera do under,

    estou se batendo a dias para tentar resolver esse meu problema, vamos ver se alguém me da uma luz ai.

    Preciso criar um controle de download para os "comedores de banda" q ficam baixando arquivos ou torrent dia e noite.
    ex: cliente com plano de 1m conseguir fazer download no máximo a 600k, cliente com 2m conseguir download com 1200k e assim sucessivamente.


    add action=mark-packet chain=postrouting comment=\
    "Controle do Trafego download UDP/P2P/ > 50Mb 1mb #################" disabled=no \
    dst-address-list=1Mbps new-packet-mark=udp_Down_rede1Mb passthrough=no port=!53 protocol=udp

    add action=mark-packet chain=postrouting disabled=no dst-address-list=1Mbps new-packet-mark=udp_Down_rede1Mb p2p=\
    all-p2p passthrough=no

    add action=mark-packet chain=postrouting connection-bytes=50000000-4294967295 disabled=no dst-address-list=1Mbps \
    new-packet-mark=udp_Down_rede1Mb passthrough=no protocol=tcp
    aqui marco os pacotes UDP (para controlar torrent), p2p, e aquivos com mais de 50mb

    add kind=pcq name=udp_p2p_down_1MB pcq-burst-rate=0 pcq-burst-threshold=0 pcq-burst-time=10s pcq-classifier=dst-address pcq-dst-address-mask=32 \
    pcq-dst-address6-mask=64 pcq-limit=50 pcq-rate=600k pcq-src-address-mask=32 pcq-src-address6-mask=64 pcq-total-limit=2000

    add burst-limit=0 burst-threshold=0 burst-time=0s disabled=yes limit-at=0 max-limit=0 name=udp_p2p_Down_1MB packet-mark=udp_Down_rede1Mb parent=\
    global-out priority=8 queue=udp_p2p_down_1MB
    aqui crie uma queue type com limite de 600k para limitar por cliente de 1mb.


    o problema é quando o cliente está fazendo um download e/ou torrent e continua usando a internet, por ex um video do youtube,
    o cliente acaba recebendo os 600k q entrou no controle + 1m do controle de banda, tornando um tiro no pé essa tentativa de limitar esse downloads.

    eu poderia fazer esse controle no roteador de borda por ip, mas como forneço ip valido (dinâmico ou fixo) para todos os cliente nao saberei se tal cliente que esta conectado com tal ip usa plano de 1mb ou de 10mb e a unica maneira que se qual ip esta conectado no plano é pelo address lists no concentrador.


    a rede esta assim:
    Roteador Borda
    V
    Concentrador PPPoE
    V
    Rbs fazendo ospf + mpls

    todos os cliente se autenticam num único concentrador central.


    desde já agradeço a atença de todos.

  2. #2

    Padrão Re: Controle de downloads por usuário

    acho que esse topico pode te ajudar:
    https://under-linux.org/showthread.php?t=163038

  3. #3

    Padrão Re: Controle de downloads por usuário

    Obrigado Andrio, ótimo tópico.

    Mas o meu cenário muda um pouco, no seu tutorial quando vc aplica o controle no router1 vc sabe a faixa de ip do cliente q esta autenticado no router2.
    no meu caso, os cliente q estão autenticado no Router2 estão com ips validos e dinâmicos, e eu só consigo identificar o plano do cliente pelo address list do router2.
    então se eu fizer um controle para o ip 191.xx.xx.001 no router1, no router2 as vezes vai logar 1 cliente com plano de 1mb com esse ip e as vezes vai logar um cliente de 10mb com o mesmo.

    a forma mais fácil seria importar o address list do router2 para o router1, mas isso tem q ser dinamicamente..

    Alguma ideia ?

  4. #4

    Padrão Re: Controle de downloads por usuário

    Talvez isso?

  5. #5

    Padrão Re: Controle de downloads por usuário

    Opa Deson00, obrigado pela dica.

    mas já tinha testado o burst aqui, mas nao tive o resultado esperado.

    ex: plano de 1mb com burst para 2mb
    o cliente começa a fazer um donwload, começa com 2mb logo cai para 1mb, ate ai tudo bem, mas se ele tentar navegar fazendo o download a velocidade vai continuar 1mb, e so ter outro pico de 2mb quando terminar o download.

    o q estou tentado fazer é, limitar esse download a 1mb, mas quando o cliente for navegar ou assistir um video fazendo o download ele possa ter os 2mb do plano, assim a navegacao nao fica lenta e nao utiliza toda a banda para download.


    será q o burst faz isso e eu nao estou sabendo configurar ?


    é meio complicado .... mas a ideia é boa! eheheh

  6. #6

    Padrão Re: Controle de downloads por usuário

    Citação Postado originalmente por marcelosilvestro Ver Post
    Obrigado Andrio, ótimo tópico.

    Mas o meu cenário muda um pouco, no seu tutorial quando vc aplica o controle no router1 vc sabe a faixa de ip do cliente q esta autenticado no router2.
    no meu caso, os cliente q estão autenticado no Router2 estão com ips validos e dinâmicos, e eu só consigo identificar o plano do cliente pelo address list do router2.
    então se eu fizer um controle para o ip 191.xx.xx.001 no router1, no router2 as vezes vai logar 1 cliente com plano de 1mb com esse ip e as vezes vai logar um cliente de 10mb com o mesmo.

    a forma mais fácil seria importar o address list do router2 para o router1, mas isso tem q ser dinamicamente..

    Alguma ideia ?
    cria um address-list (faixa de IP) por plano.

  7. #7

    Padrão Re: Controle de downloads por usuário

    seria uma solução Andrio,

    mas se eu quebrar a faixa de ip por plano nao vou ter ip suficiente para todos os cliente.

  8. #8

    Padrão Re: Controle de downloads por usuário

    Consegui fazer,

    marquei os pacotes de saída no concentrador pppoe com TOS por ex:
    plano 1mb TOS 1
    plano 2mb TOS 2
    .....


    e no roteador de borda crie uma filtro pegando pacotes com TOS 1 e add em address list com plano1mb, e um time de 10seg.

    agora consigo fazer o controle dos downloads por plano no roteador de borda, pq tenho o ip e plano do cliente no address list.

    filé.

    obrigado pela atenção de todos.

    e se algum tiver alguma duvida só postar ai.

  9. #9

    Padrão Re: Controle de downloads por usuário

    Citação Postado originalmente por marcelosilvestro Ver Post
    Consegui fazer,

    marquei os pacotes de saída no concentrador pppoe com TOS por ex:
    plano 1mb TOS 1
    plano 2mb TOS 2
    .....


    e no roteador de borda crie uma filtro pegando pacotes com TOS 1 e add em address list com plano1mb, e um time de 10seg.

    agora consigo fazer o controle dos downloads por plano no roteador de borda, pq tenho o ip e plano do cliente no address list.

    filé.

    obrigado pela atenção de todos.

    e se algum tiver alguma duvida só postar ai.
    Explica melhor como foi feito ou posta sua solução.

  10. #10

    Padrão Re: Controle de downloads por usuário

    ok, vamos lá


    no concentrador pppoe somente marquei os pacotes com TOS

    /ip firewall mangleadd action=change-dscp chain=forward disabled=no new-dscp=1 passthrough=yes port=80 protocol=tcp src-address-list=1Mbps
    add action=change-dscp chain=forward disabled=no new-dscp=2 passthrough=yes port=80 protocol=tcp src-address-list=2Mbps
    add action=change-dscp chain=forward disabled=no new-dscp=3 passthrough=yes port=80 protocol=tcp src-address-list=3Mbps
    add action=change-dscp chain=forward disabled=no new-dscp=4 passthrough=yes port=80 protocol=tcp src-address-list=4Mbps
    add action=change-dscp chain=forward disabled=no new-dscp=5 passthrough=yes port=80 protocol=tcp src-address-list=5Mbps
    add action=change-dscp chain=forward disabled=no new-dscp=9 passthrough=yes port=80 protocol=tcp src-address-list=10Mbps


    no roteador de borda, adicionei um filtro para identificar os pacotes marcados com TOS e adicionar o ip no address list


    /ip firewall filteradd action=add-src-to-address-list address-list=1Mbps address-list-timeout=30s chain=forward comment="Controle de Donwloads" dscp=1
    add action=add-src-to-address-list address-list=2Mbps address-list-timeout=30s chain=forward dscp=2
    add action=add-src-to-address-list address-list=3Mbps address-list-timeout=30s chain=forward dscp=3
    add action=add-src-to-address-list address-list=4Mbps address-list-timeout=30s chain=forward dscp=4
    add action=add-src-to-address-list address-list=5Mbps address-list-timeout=30s chain=forward dscp=5
    add action=add-src-to-address-list address-list=10Mbps address-list-timeout=30s chain=forward dscp=9

    agora fica fácil fazer o controle, no address list tem o plano e ip de cada cliente, adicionei um timeout para quando o cliente trocar de ip.

    no mangle fiz assim:

    add action=mark-packet chain=postrouting comment="Controle do Trafego download UDP/P2P/ > 40Mb 1mb #################" dst-address-list=1Mbps new-packet-mark=\ udp_Down_rede1Mb passthrough=no port=!53 protocol=udp
    add action=mark-packet chain=postrouting dst-address-list=1Mbps new-packet-mark=udp_Down_rede1Mb p2p=all-p2p passthrough=no
    add action=mark-packet chain=postrouting connection-bytes=40000000-4294967295 dscp=!10 dst-address-list=1Mbps new-packet-mark=udp_Down_rede1Mb passthrough=no protocol=tcp
    add action=mark-packet chain=postrouting comment="Controle do Trafego download UDP/P2P/ > 40Mb 2mb #################" dst-address-list=2Mbps new-packet-mark=\
    udp_Down_rede2Mb passthrough=no port=!53 protocol=udp
    add action=mark-packet chain=postrouting dst-address-list=2Mbps new-packet-mark=udp_Down_rede2Mb p2p=all-p2p passthrough=no
    add action=mark-packet chain=postrouting connection-bytes=40000000-4294967295 dscp=!10 dst-address-list=2Mbps new-packet-mark=udp_Down_rede2Mb passthrough=no protocol=tcp
    add action=mark-packet chain=postrouting comment="Controle do Trafego download UDP/P2P/ > 40Mb 3mb #################" dst-address-list=3Mbps new-packet-mark=\
    udp_Down_rede3Mb passthrough=no port=!53 protocol=udp
    add action=mark-packet chain=postrouting dst-address-list=3Mbps new-packet-mark=udp_Down_rede3Mb p2p=all-p2p passthrough=no
    add action=mark-packet chain=postrouting connection-bytes=40000000-4294967295 dscp=!10 dst-address-list=3Mbps new-packet-mark=udp_Down_rede3Mb passthrough=no protocol=tcp
    add action=mark-packet chain=postrouting comment="Controle do Trafego download UDP/P2P/ > 40Mb 4mb #################" dst-address-list=4Mbps new-packet-mark=\
    udp_Down_rede4Mb passthrough=no port=!53 protocol=udp
    add action=mark-packet chain=postrouting dst-address-list=4Mbps new-packet-mark=udp_Down_rede4Mb p2p=all-p2p passthrough=no
    add action=mark-packet chain=postrouting connection-bytes=40000000-4294967295 dscp=!10 dst-address-list=4Mbps new-packet-mark=udp_Down_rede4Mb passthrough=no protocol=tcp
    add action=mark-packet chain=postrouting comment="Controle do Trafego download UDP/P2P/ > 40Mb 5mb #################" dst-address-list=5Mbps new-packet-mark=\
    udp_Down_rede5Mb passthrough=no port=!53 protocol=udp
    add action=mark-packet chain=postrouting dst-address-list=5Mbps new-packet-mark=udp_Down_rede5Mb p2p=all-p2p passthrough=no
    add action=mark-packet chain=postrouting connection-bytes=40000000-4294967295 dscp=!10 dst-address-list=5Mbps new-packet-mark=udp_Down_rede5Mb passthrough=no protocol=tcp
    add action=mark-packet chain=postrouting comment="Controle do Trafego download UDP/P2P/ > 40Mb 10mb #################" dst-address-list=10Mbps \
    new-packet-mark=udp_Down_rede10Mb passthrough=no port=!53 protocol=udp
    add action=mark-packet chain=postrouting dst-address-list=10Mbps new-packet-mark=udp_Down_rede10Mb p2p=all-p2p passthrough=no
    add action=mark-packet chain=postrouting connection-bytes=40000000-4294967295 dscp=!10 dst-address-list=10Mbps new-packet-mark=udp_Down_rede10Mb passthrough=no protocol=tcp


    e por ultimo o controle no simple queues

    /queue typeadd kind=pcq name=udp_p2p_down_1MB pcq-classifier=dst-address pcq-dst-address6-mask=64 pcq-rate=800k pcq-src-address6-mask=64
    add kind=pcq name=udp_p2p_down_2MB pcq-classifier=dst-address pcq-dst-address6-mask=64 pcq-rate=1200k pcq-src-address6-mask=64
    add kind=pcq name=udp_p2p_down_3MB pcq-classifier=dst-address pcq-dst-address6-mask=64 pcq-rate=1800k pcq-src-address6-mask=64
    add kind=pcq name=udp_p2p_down_4MB pcq-classifier=dst-address pcq-dst-address6-mask=64 pcq-rate=2400k pcq-src-address6-mask=64
    add kind=pcq name=udp_p2p_down_5MB pcq-classifier=dst-address pcq-dst-address6-mask=64 pcq-rate=3M pcq-src-address6-mask=64
    add kind=pcq name=udp_p2p_down_10MB pcq-classifier=dst-address pcq-dst-address6-mask=64 pcq-rate=6M pcq-src-address6-mask=64

    /queue simpleadd name="controleDownload 1MB" packet-marks=udp_Down_rede1Mb,udp_up_rede1Mb queue=udp_p2p_up_1MB/udp_p2p_down_1MB target=191.37.140.0/22 time=8h-22h,sun,mon,tue,wed,thu,fri,sat
    add name="controleDownload 2MB" packet-marks=udp_Down_rede2Mb,udp_up_rede2Mb queue=udp_p2p_up_2MB/udp_p2p_down_2MB target=191.37.140.0/22 time=8h-22h,sun,mon,tue,wed,thu,fri,sat
    add name="controleDownload 3MB" packet-marks=udp_Down_rede3Mb,udp_up_rede3Mb queue=udp_p2p_up_3MB/udp_p2p_down_3MB target=191.37.140.0/22 time=8h-22h,sun,mon,tue,wed,thu,fri,sat
    add name="controleDownload 4MB" packet-marks=udp_Down_rede4Mb,udp_up_rede4Mb queue=udp_p2p_up_4MB/udp_p2p_down_4MB target=191.37.140.0/22 time=8h-22h,sun,mon,tue,wed,thu,fri,sat
    add name="controleDownload 5MB" packet-marks=udp_Down_rede5Mb,udp_up_rede5Mb queue=udp_p2p_up_5MB/udp_p2p_down_5MB target=191.37.140.0/22 time=8h-22h,sun,mon,tue,wed,thu,fri,sat
    add name="controleDownload 10MB" packet-marks=udp_Down_rede10Mb,udp_up_rede10Mb queue=udp_p2p_up_10MB/udp_p2p_down_10MB target=191.37.140.0/22 time=8h-22h,sun,mon,tue,wed,thu,fri,sat

    isso ai,

  11. #11

    Padrão Re: Controle de downloads por usuário

    Citação Postado originalmente por Arthur Bernardes Ver Post
    Olá Marcelo, achei interessante você fazer isso usando DSCP, mas no final das contas você acabou pegando o IP dos seus clientes PPPoE; e nisso fiquei pensando se não era mais fácil você fazer o controle diretamente pelo IP dos clientes ou você não tem rotas para eles?
    Arthur, aqui utilizo ip valido e dinâmico para todos os cliente, então pode acontecer um cliente de 1mb estar com um IP e depois um cliente de 5mb estar com esse mesmo ip, eu poderia dividir em sub-redes mas perderia muitos ips, e com essa escassez de ipv4 já sabe.

    assim tenho um /23 q divido para todos cliente residencial, e um /24 para clientes empresariais q sao fixos.


    essa foi a unica maneira q encontrei, e esta funcionando perfeitamente.