[FUG-BR] PF + ALTQ

Victor Loureiro Lima victorloureirolima em gmail.com
Terça Agosto 21 18:30:08 BRT 2007


I had enough ;)

Cansei de ter menos banda na minha maquina (gateway da rede wireless
la' de casa, rodando freebsd e meu desktop tambem ;)) toda vez que
algum familiar ou visita entra na internet para ver os seus
powerpoints sobre viagens no mundo, ou curiosidades no email, por
tanto resolvi usar o altq a meu favor e incluir um controle de banda
na rede la' de casa.

A regra e' simples, quando eu estiver usando a internet (segundo eu li
no manual da pf existe essa possibilidade) eu quero ter 60% da
bandwidth apenas para mim, e os outros 40%, e quando nao houver nenhum
uso de internet no gateway (meu desktop), a banda pode ir 100% para
quem tiver usando. Nota: Nao quero que conexoes vindo da internet
caiam em nenhuma queue, ou seja, tenham processamento normal sem
limitacao de banda para eles. (considerando logicamente o limite
fisico da capacidade da banda, e o caso da duvida 2 abaixo ;))

Tendo essas premissas, existem a seguintes dúvidas:
Como a minha rede e' disposta da seguinte forma:

[ rede interna wireless de casa ] <---> [ath0]  [fxp0] <---> INTERNET
                                                       (^^^^^^^^^^^^^^ gateway)

1a. duvida: eu devo habilitar o altq na interface ath0 ou na fxp0? Meu
entendimento e' que
se habilitar para a ath0, faria mais sentido, pois apenas o trafico
wireless seria afetado.
Caso seja essa a solução, estou certo em achar que simplesmente habilitando o
altq na interface ath0 e passando um valor de 1600kb (meu link e' de
4mb, 1600 seria algo em torno de 40%), eu ja' conseguiria o resultado
esperado? Depois seria apenas uma questao de habilitar no pass in on
ath0 queue minha_queue?

2a. duvida: como fica a questão de limitar o que entra na rede? Teria
como eu jogar os pacotes de resposta (vindos da internet) que foram
originados de conexoes vindo da ath0 (usuarios internos) para uma
queue que tenha menos banda, e deixar os outros que usam o fxp0 sem
limitações de entrada/saida?!


Ai vai o meu pf.conf (muito simples, nao tem nada...):
#########################################################
# Macros: define common values, so they can be referenced and changed easily.
ext_if="fxp0"	# replace with actual external interface name i.e., dc0
int_if="ath0"	# replace with actual internal interface name i.e., dc1
internal_net="192.168.0.0/24"
external_addr="`ifconfig fxp0 | grep inet | cut -d ' ' -f2`"


# Options: tune the behavior of pf, default values are given.
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
set loginterface none
set optimization normal
set block-policy drop
set require-order yes
set fingerprints "/etc/pf.os"

# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in all

nat on $ext_if from $internal_net to ! $internal_net -> ($ext_if)

pass in log quick on $int_if keep state
pass out log quick on $int_if keep state
pass in log quick on $ext_if keep state
pass out log quick on $ext_if keep state
################################################

Abracos,
Victor F. Loureiro Lima


Mais detalhes sobre a lista de discussão freebsd