[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