[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