Más calidad de servicio con Packet Filter
Ya expliqué en Calidad de servicio con Packet Filter como mejorar mucho la calidad de servicio de una máquina en Internet mediante la priorización de paquetes TCP ACK
.
De esta forma podíamos subir y bajar datos a la vez a la máxima velocidad de nuestra linea tanto en la subida como en la bajada.
He intentado mejorar un poco la cosa, dando prioridad a las sesiones SSH
tanto entrantes como salientes, así como al tráfico HTTP
saliente de blackshell sobre cualquier otro tráfico. Esto es porque la semana pasada estuve descargando soft más de lo habitual y parece que la respuesta de blackshell se resentía.
La idea es añadir dos prioridades más a lo que ya tenía:
altq on $ext_if priq bandwidth 150Kb queue \ { qdef, qtcp_ack, qssh, qhttp } # colas que ya estaban queue qdef priority 1 priq(default) queue qtcp_ack priority 7 # nuevas colas queue qssh priority 6 priq(red) queue qhttp priority 3
He renombrado las colas que ya tenía para que quedara más claro, por si alguien consulta la anotación anterior sobre los ACKs.
Las prioridades en PF
para priq
van del 0 al 15, siendo 0 ninguna prioridad, 1 la mínima, y 15 la máxima.
De esta forma conseguimos que las sesiones SSH
vayan suaves sin importar el resto del tráfico, y por detrás, las respuestas a peticiones HTTP
.
He puesto a subir un fichero grande a un FTP
y a la vez a bajar otro desde otro FTP
distinto. Gracias a la priorización de ACKs conseguimos máxima velocidad en los dos sentidos.
Ahora inicio una sesión SSH
contra una máquina en Internet y se comporta casi como si los otros dos procesos no existieran. Más que suficiente para trabajar cómodamente. Quizás sería más efectivo emplear un scheduler (¿organizador?) por clases y repartir explícitamente el ancho de banda indicando mínimos, pero necesito prioridades para el tema de los ACKs.
Desde esa sesión SSH
intento descargar un fichero grande de la web de blackshell, y consigo el máximo ancho de banda que puede dar blackshell con sus modestos 150Kbps (la subida del fichero por FTP
se atasca hasta que detengo la petición HTTP
).
Así que aparentemente las prioridades funcionan :).
Debido a que blackshell no es un servidor dedicado sino que hace de enrutador/cortafuegos para mi red local, las reglas no son perfectas, pero mostrando solo lo interesante tenemos:
# prioridad a TCP ACK pass in on $ext_if proto tcp from any to $ext_if flags S/SA \ keep state queue (qdef, qtcp_ack) pass out on $ext_if proto tcp from $ext_if to any flags S/SA \ keep state queue (qdef, qtcp_ack) # ssh pass out on $ext_if proto tcp from any to any port 22 \ keep state queue qssh pass in on $ext_if proto tcp from any to $ext_if port 22 flags S/SA \ keep state queue qssh # http pass in on $ext_if proto tcp from any to $ext_if port 80 flags S/SA \ keep state queue qhttp
Así cuando use algún programa P2P, esta web no se resentirá ;).
Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.