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

Nenhum_de_Nos matheus em eternamente.info
Segunda Junho 1 22:34:14 BRT 2009


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


Mais detalhes sobre a lista de discussão freebsd