[FUG-BR] RES: (não sei se é off) Priorização de tráfego para dois hosts em PFSENSE

Nenhum_de_Nos matheus em eternamente.info
Terça Junho 2 21:34:18 BRT 2009


On Tue, 2 Jun 2009 06:41:45 -0400
Renato Frederick <frederick em dahype.org> wrote:

> Matheus,
> 
> Uma dúvida, que ainda não me ficou clara até hoje.
> 
> Como você mesmo falou, eu posso criar no ipfw um pipe de 1MB para SSH e 30MB para web, mesmo que o link seja de 5MB. Não tem que ter nada próximo com a realidade, a não ser que você vá colocar pesos.

bem, é criar um pipe de 1Mbps para cada cliente por ex. assim ninguém passa disso. se tiver 200 clientes, o link sendo de 100Mbps mas se todos tentarem topar a rede não chegarão nos 1Mbps de cada.

> No PF isto não é válido, eu tenho que criar uma classe com meu link total e ir divindo de forma que  a soma não ultrapsse o total. Tem alguma outra maneira de fazer isto?

limitando eu não sei. por um tempo usei pf com altq e com ipfw para limites hard. mas tem ainda como definir prioridades com priq. só diz a banda total, mas não aloca nada para cada classe. pode ter até 16 classes. o que lembro de ter lido é que priq não evita starvation. assim uma fila com mais prioridade mata uma de menos de fome.
 
> Por exemplo, se você é um ISP e tem 100 usuários comprando  500K, não indica necessariamente que você tem um link de 5MB. E por aí vai.

nesse caso eu usaria ipfw para limite superior e priq para controlar quais pacotes vão antes.

> Ou outro exemplo, se eu tenho o PF em meu gateway e eu tenho a DMZ e quero limitar um PC a fazer downloads a 100K na internet, mas não limitar a DMZ, no PF eu teria que criar uma declaração para a DMZ, presumindo que o link seja a 100MB, outra para a internet e por ai vai.

voce faz altq em cada $if, e define como quer.

cria regra:

pass in on $int_if from $clientes to $dmz queue pode_botar_pra_rasgar

pass in on $int_if from $clientes to $internet queue limite_100k

faço isso aqui tb, quando digo que a $int_if tem banda de 100Mbps (FastEthernet), e divido a parte interna em quem vem da internet (1Mbps) e quem não (99Mbps). senão até meu ssh para ele estaria dependendo dos downloads atuais.

no fim das contas, não tem um perfeito. o pf no OpenBSD é mais completo por está sempre na vanguarda. o do FreeBSD fica atualizando tempos em tempos. mas em contrapartida o FreeBSD tem ipfw junto. e pode-se usar os dois. assim eu acho o FreeBSD mais versátil. se vai ser só um roteador puro, OpenBSD é massa, bem fechado seguro etc. se tem mais coisa, FreeBSD na cabeça ;)

matheus
 
> No ipfw eu faria um 'pipe X all from $pc_interno to $dmz out via XXXX' e por ai vai.
> 
> 
> 
> > -----Mensagem original-----
> > De: freebsd-bounces em fug.com.br [mailto:freebsd-bounces em fug.com.br] Em
> > nome de Nenhum_de_Nos
> > Enviada em: segunda-feira, 1 de junho de 2009 22:34
> > Para: freebsd em fug.com.br
> > Assunto: Re: [FUG-BR] (não sei se é off) Priorização de tráfego para
> > dois hosts em PFSENSE
> > 
> > On Mon, 1 Jun 2009 21:50:27 -0300
> > Wanderson Tinti <wanderson em bsd.com.br> wrote:
> > 
> > > 2009/6/1 Nenhum_de_Nos <matheus em eternamente.info>:
> > > > On Mon, 1 Jun 2009 13:37:41 -0300
> > > > Mateus Menezes <mat3us em gmail.com> wrote:
> > > >
> > > >> -----BEGIN PGP SIGNED MESSAGE-----
> > > >> Hash: SHA1
> > > >>
> > > >> Bom dia,
> > > >>
> > > >>
> > > >> Estou com o seguinte cenário:
> > > >>
> > > >> Tenho uma rede com um pfsense funcionando como gateway de internet
> > > >> (compartilhando a conexão e firewall).
> > > >> Preciso fazer que quando (e somente quando) duas máquinas
> > específicas
> > > >> entrarem na rede, estas terão prioridade de tráfego (alocar 50% da
> > banda pra
> > > >> elas).
> > > >
> > > > hfsc nao resolve ?
> > > >
> > > > tu diz que a fila tem 50% e realtime tb 50%
> > > >
> > > > se elas nao usarem, as demais podem usar. se nao quiser isso,
> > coloca que o resto tem upperlimit dos outros 50%
> > > >
> > > > matheus
> > > >
> > 
> > antes de mais nada digo que não sou expert nisso, só fiz até onde
> > precisava por aqui, com muita pesquisa e dor de cabeça. mas no que
> > puder ajuda, tranquilo.
> > 
> > > Rapaz andei fazendo uns testes com hfsc e fiquei de cabelo em pé. Não
> > > entendi essas três opções (realtime, upperlimit e linkshare), quando
> > 
> > é meio louco isso mesmo. AFAIK, realtime e linkshare são quase a mesma
> > coisa. uso o primeiro. são usados quando o link tá saturado, para
> > garantir à esta fila a banda que você quer. o link satura para ele qd
> > usa 85% do definido (a soma de realtime dó pode dar isso, ou é 80%)
> > 
> > > tudo parecia caminhar ai que eu menos entendia o que estava
> > > acontecendo. Larguei de lado e usei pf + dummynet. Na verdade queria
> > 
> > mas o dummynet + ipfw é muito massa, pois em pf não posso limitar o
> > mundo por ex à 100kbps. a soma sempre tem que ser <= banda declarada.
> > 
> > > usar openbsd com pf e hfsc, não teve jeito pulei para freeba.
> > 
> > o OpenBSD é massa. seguro e carrancudo. mas ainda prefiro o FreeBSD. só
> > não uso pq no meu hardware o FreeBSD não acha meu disco microdrive da
> > seagate com minha controladora ata. o OpenBSD usa sem problemas.
> > 
> > mas prefiro a facilidade de atualização do FreeBSD. e o 8-CURRENT tá
> > sem noção de massa :)
> > 
> > > Nenhum_de_nos por acaso você tem algo para compartilhar sobre o
> > > funcionamento do hfsc, alguma regra, exemplo para que possa testar
> > > trocar algumas figurinhas?
> > 
> > tranquilo. o que eu souber.
> > 
> > deixe-me colocar o que está aqui. é um FW simples, ainda preciso ler
> > sobre muita coisa. mas controla meu dsl ok. :)
> > 
> > tenho pcs em casa, onde posso dividir em duas classes, meu pc que roda
> > ed2k e Folding em HOME, e demais. não preciso controlar ninguém aqui (não
> > há usuários escrotos), mas quero que o fah (folding) quando mande seus
> > WU's não atole meu upload, mas tenha o max de banda para mandar logo.
> > quero o max de upload para meu ed2k, sem tb atolar a rede. qd o fah
> > tiver mandando, o ed2k perde banda pq fah não fica 24h como o ed2k.
> > 
> > pfTop: Up Queue 1-21/21, View: queue, Cache: 10000
> > 22:21:53
> > 
> > QUEUE               BW SCH  PR  PKTS BYTES DROP_P DROP_B QLEN BORR SUSP
> > P/S  B/S
> > root_tun0         300K hfsc  0     0     0      0      0    0
> > 0    0
> >  out_ack         30000 hfsc  8   299 23780      0      0    0
> > 0    0
> >  out_dns         15000 hfsc  7 23923 2149K    269  18885    0
> > 1  114
> >  out_ssh         30000 hfsc  6  9166 3281K      0      0    0
> > 0.2   11
> >  out_jogos       45000 hfsc  5  1269  103K      0      0    0
> > 0    0
> >  out_web         30000 hfsc  4 1621K  144M    236  31680    0
> > 7 2600
> >  out_smtp        15000 hfsc  3  7266  784K      0      0    0
> > 0    0
> >  out_bolo        15000 hfsc  2  735K   45M      0      0    0
> > 12  738
> >  out_p2pFah      15000 hfsc        0     0      0      0    0
> > 0    0
> >   out_fah        12000 hfsc  7 99768  126M    130 192920    0
> > 0    0
> >   out_p2p         3000 hfsc  2 6188K 2300M 986184   279M   49
> > 63  20K
> > root_vr0          100M hfsc  0     0     0      0      0    0
> > 0    0
> >  in_inet         1000K hfsc  8     0     0      0      0    0
> > 0    0
> >   in_dns         10000 hfsc  8     0     0      0      0    0
> > 0    0
> >   in_ssh          100K hfsc  7  2217  246K      0      0    0
> > 0.2   35
> >   in_jogos        150K hfsc  6     0     0      0      0    0
> > 0    0
> >   in_web          300K hfsc  5 1849K 2579M      0      0    0
> > 2 2198
> >   in_p2pFah       100K hfsc        0     0      0      0    0
> > 0    0
> >    in_fah        80000 hfsc  7 59317   22M      0      0    0
> > 0    0
> >    in_p2p        20000 hfsc  2 7384K 4013M   1312 407082    0
> > 96  61K
> >  lan               99M hfsc    26641   11M      0      0    0
> > 1  453
> > 
> > tem mais algumas classes que quero dar prioridade. a que mais apanho é
> > mandar ACK's logo. falta estudar isso :)
> > 
> > as regras para isso são:
> > 
> > # cat regras.pf
> > ext_if="tun0"
> > modem_if="fxp0"
> > int_if="vr0"
> > lan="10.1.1.0/24"
> > 
> > # Maquinas
> > 
> > p  = "10.1.1.1"
> > m  = "10.1.1.2"
> > lamneth = "10.1.1.10"
> > mo  = "10.1.1.12"
> > arroway = "10.1.1.80"
> > darkside = "10.1.1.100"
> > 
> > portas_arroway  = "5910"
> > portas_p2p      = "{ 5000:5100 5900 }"
> > portas_m	= "5000:5100"
> > portas_jogos    = "{ 2009 2106 7777 }"
> > portas_servicos = "22 25 80 443"
> > portas_ssh      = "{ 22 443 }"
> > 
> > scrub in
> > set skip on lo0
> > 
> > altq on $ext_if hfsc bandwidth 300Kb queue { out_ack, out_dns, out_ssh,
> > out_web, out_jogos, out_p2pFah, out_smtp, out_bolo }
> >    queue out_ack        bandwidth 10%   priority 8 hfsc (realtime 20%)
> >    queue out_dns        bandwidth 5%    priority 7 hfsc (realtime 5%)
> >    queue out_ssh        bandwidth 10%   priority 6 hfsc (realtime 10%)
> >    queue out_jogos      bandwidth 15%   priority 5 hfsc (realtime 15%)
> >    queue out_web        bandwidth 10%   priority 4 hfsc (realtime 10%)
> >    queue out_smtp       bandwidth 5%    priority 3 hfsc (realtime 15%)
> >    queue out_bolo       bandwidth 5%    priority 2 hfsc (default)
> >    queue out_p2pFah     bandwidth 5%    priority 1 hfsc (upperlimit
> > 160Kb) { out_fah, out_p2p }
> >      queue out_fah       bandwidth 80%    priority 7 hfsc
> >      queue out_p2p       bandwidth 20%    priority 2 hfsc
> > 
> > altq on $int_if hfsc bandwidth 100Mb queue {in_inet, lan }
> >    queue in_inet        bandwidth 1%    priority 8 hfsc (realtime 1%) {
> > in_dns, in_ssh, in_jogos, in_web, in_p2pFah }
> >      queue in_dns       bandwidth 5%    priority 8 hfsc (realtime 5%)
> >      queue in_ssh       bandwidth 10%   priority 7 hfsc (realtime 10%)
> >      queue in_jogos     bandwidth 15%   priority 6 hfsc (realtime 15%)
> >      queue in_web       bandwidth 30%   priority 5 hfsc (realtime 10%)
> >      queue in_p2pFah    bandwidth 10%   priority 1 hfsc (upperlimit
> > 80%) { in_fah, in_p2p }
> >        queue in_fah      bandwidth 80%    priority 7 hfsc
> >        queue in_p2p      bandwidth 20%    priority 2 hfsc (default)
> >    queue lan            bandwidth 99%   priority 1 hfsc (upperlimit
> > 98%)
> > 
> > table <chatos_ssh> persist
> > table <ips_fah> persist file "/root/ips_fah"
> > 
> > nat on $ext_if from $lan to any -> ($ext_if)
> > nat on $modem_if from $lan to any -> ($modem_if)
> > 
> > # m
> > rdr on $ext_if proto { tcp, udp } from any to any port $portas_m tag
> > in_p2p        -> $m
> > 
> > # lamneth
> > #rdr pass inet proto tcp                        from !<spamd-white> to
> > any port smtp    -> 127.0.0.1 port spamd
> > #rdr pass inet proto tcp from <spamd> to any port smtp -> 127.0.0.1
> > port spamd
> > rdr on $ext_if proto tcp                from any to any port 80 tag
> > in_web      -> $lamneth
> > rdr on $ext_if proto tcp                from any to any port 443 tag
> > in_ssh     -> $lamneth port 22
> > 
> > # arroway
> > rdr on $ext_if proto tcp                from any to any port 2222 tag
> > in_ssh    -> $arroway port 22
> > rdr on $ext_if proto tcp                from any to any port 10101 tag
> > in_web   -> $arroway
> > rdr on $ext_if proto { tcp, udp }       from any to any port
> > $portas_arroway tag in_p2p -> $arroway
> > 
> > # Servicos
> > #rdr on $ext_if proto tcp               from any to any port 25
> > -> $lamneth
> > rdr on $ext_if proto tcp                from any to any port 25 tag
> > in_email    -> 127.0.0.1
> > 
> > # RDP
> > rdr on $ext_if proto { tcp, udp }       from any to any port 3389 tag
> > in_rdp    -> $mainha
> > 
> > # Geral
> > 
> > block log quick from <chatos_ssh>
> > block in on $ext_if all
> > block in on $int_if all
> > antispoof for $ext_if
> > 
> > # DSL in
> > pass in log on $ext_if tagged in_ssh keep state (max-src-conn-rate 4/60
> > overload <chatos_ssh> flush global) queue (out_bolo, out_ssh)
> > pass in on $ext_if tagged in_email modulate state queue (out_bolo,
> > out_smtp)
> > pass in on $ext_if tagged in_p2p keep state queue (out_p2p)
> > pass in on $ext_if tagged in_ssh keep state queue (out_bolo, out_ssh)
> > pass in on $ext_if tagged in_web keep state queue (out_bolo, out_web)
> > pass in on $ext_if inet proto tcp       from any to any port 22
> > modulate state queue (out_bolo, out_ssh)
> > 
> > # DSL out
> > pass out quick on $ext_if proto tcp     from any to any flags A/A
> > keep state queue (out_ack)
> > pass out on $ext_if inet proto { tcp, udp } from any to any port 53
> > keep state queue (out_dns)
> > pass out on $ext_if proto tcp           from any to any port { 22,
> > 2222, 23456 }        keep state queue (out_ssh)
> > pass out on $ext_if proto tcp           from any to any port { 21, 80,
> > 443, 8080 }      keep state queue (out_web)
> > pass out on $ext_if proto tcp           from any to any port { 80, 443,
> > 8080 }  modulate state queue (out_web)
> > pass out quick on $ext_if                     from any to <ips_fah>
> > keep state queue (out_fah)
> > pass in on $ext_if proto tcp            from $arroway port 5900 to any
> > modulate state queue (out_p2p)
> > pass in on $ext_if proto udp            from $arroway port 5900 to any
> > keep state queue (out_p2p)
> > pass out on $ext_if proto { tcp, udp }  from any to any port ntp
> > keep state queue (out_ack)
> > pass out on $ext_if proto tcp           from any to any port { 25, 465,
> > 587 }   keep state queue (out_smtp)
> > pass out on $ext_if proto { tcp, udp }  from any to any port 7777
> > keep state queue (out_jogos)
> > pass out on $ext_if proto tcp           from any to any port 1683
> > keep state queue (out_bolo)
> > 
> > # LAN in
> > 
> > pass in on $int_if                      from $arroway to any
> > keep state queue (out_p2p, in_p2p)
> > pass in on $int_if proto tcp            from any to any port 1683
> > keep state queue (in_bolo)
> > pass in on $int_if proto tcp            from $arroway port 5900 to any
> > modulate state queue (in_p2p)
> > pass in on $int_if proto udp            from $arroway port 5900 to any
> > keep state queue (in_p2p)
> > pass in on $int_if proto tcp            from any to any port { 22,
> > 2222, 23456 }        keep state queue (in_ssh)
> > pass in on $int_if proto { tcp, udp }   from $lamneth to any port 53
> > keep state
> > pass in on $int_if proto tcp            from any to any port { 80, 443,
> > 8080 }  modulate state queue (in_web, out_web)
> > pass in on $int_if proto tcp            from any to any port { 25, 465,
> > 587 }   modulate state queue (out_smtp)
> > pass in on $int_if proto { tcp, udp }   from any to any port ntp
> > keep state
> > pass in on $int_if                      from $arroway to <ips_fah>
> > keep state queue (in_fah)
> > pass in on $int_if                      from $int_if:network to $int_if
> > keep state queue (lan)
> > 
> > # LAN out
> > pass out on $int_if                     from any to any
> > keep state
> > pass out on $int_if                     from $int_if to $int_if:network
> > keep state queue (lan)
> > 
> > tem coisa para melhorar (sempre), mas cada pedaço de tempo arrumo uma
> > coisa. aqui, o amule fica sempre colado nos 20k. se o fah vai mandar,
> > ele manda na casa dos 16k e o amule cai para 4k. ainda apanho um pouco
> > com outros protocolos (nem tudo funciona 100%, mas não sei se é culpa
> > minha, do hfsc ou protocolo). já fiz teste e tem fluxo que não toma
> > toda a banda alocada para ele, aí novamente não sei se é culpa do hfsc
> > ou protocolo ou minha. neste caso que tem dois ip's para reservar
> > banda, tenho tido exp boa aqui em limites, seja com PRIQ ou HFSC.
> > 
> > espero que tenha ajudado mais que complicado, qquer coisa é só falar :)
> > 
> > uma fonte que usei (muito) para ter info sobre pf+hfsc foi o site do
> > calomel https://calomel.org/ e o livro do Jacek Artymiak de pf e
> > openbsd. e muita tentativa :)
> > 
> > matheus
> > 
> > > Boa noite moçada.
> > > -------------------------
> > > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> > 
> > 
> > --
> > We will call you cygnus,
> > The God of balance you shall be
> > 
> > A: Because it messes up the order in which people normally read text.
> > Q: Why is top-posting such a bad thing?
> > 
> > http://en.wikipedia.org/wiki/Posting_style
> > -------------------------
> > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


-- 
We will call you cygnus,
The God of balance you shall be

A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?

http://en.wikipedia.org/wiki/Posting_style


Mais detalhes sobre a lista de discussão freebsd