Menú principal

Linux como Router

Publicado por joaco79, Agosto 28, 2007, 10:32:47

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

joaco79

Hola gente, tengo una PC con un Debian, la cual esta configurada como router, todo anda perfecto, la mula, interntet, la cuestion es que este "router" sirve a varias maquinas, y varias de ellas, usan el ares, chan!!!, la cosa es que cuando pasa eso, se consumen todo el ancho de banda, y no me funca la mula, y mas aun, se hace imposible navegar, mi pregunta es si hay alguna manera, o algun comando desde linux, que me permita asignar un porcentaje de banda a cada IP, porque la verdad, ya me estoy poniendo un poquito mal con este tema.

Desde ya agradezco cualquier tipo de sugerencias o comentarios.
El que no vive para servir, no sirve para vivir.

ZeiterZ

Si no se puede evitar el uso de Ares o no se puede limitar en el propio Ares el uso de ancho de banda, lo que te queda es lo que se denomina "traffic shaping".

Eso requiere, como mínimo, la manipulación del firewall (iptables).

Aquí tienes un artículo que puede intersarte:
http://www.ecualug.org/?q=2006/08/04/forums/limitar_descargas_de_ares_y_limewire_por_squid

FREDD2

otra opcion bien drastica y amanzadora es con iptraf mirar la ip de la pc que esta usando ares y si tenes el switch o hub sacarle el cable a esa maquina XD , la otra es como te respondieron antes , saludos

joaco79

bueno mil gracias voy a ver si leo un poco mas sobre el tema  :up:
El que no vive para servir, no sirve para vivir.

PePo

Podrías mirar si te conviene implementar algo de QoS (Quality of Service).

Te dejo una guía que encontré googleando:
http://usuarios.lycos.es/ccd_illusions/QoS-3.pdf

Saludos!

Pepo

mortadelax

#5
Si no entendes un pomo de iptables, htb, etc... podes usar un script ya hecho, y solo tenes que agregar tus datos de conexion. Yo probe el htb-gen y anda joya.

http://www.praga.org.ar/wacko/DevPraga/htbgen/

Son 3 archivos que usa.

- htb-gen (es el programa propiamente dicho)
- htb-gen.conf (ahi tenes que poner cuanto de subida y bajada tenes, asi como tambien especificar la ethx a la que salis a internet. En mi caso mi placa era eth3, pero la unica forma de hacerlo andar era poner ppp0 en lugar de eth3)
-htb-gen-rates.conf (aca pones las limitaciones al trafico por ip de maquina de tu red, o directamente si tenes mas de una red, podes limitar la red entera... Los archivos estos *.conf son bien explicativos)

Luego de tener todo, falta el comando de arranque

htb-gen tc_all
o si no esta el paquete en /usr/sbin, directamente situado en la ubicacion del paquete:
./htb-gen tc_all o sh /ubicacion/htb-gen tc_all

Edit Importante: Ahora que me acuerdo tambien tuve que cambiar la ubicacion de los programas iptables, iptables-restore, iptables-save y tc. Estas definiciones estan en htb-gen.conf y el htb-gen. Yo los tengo en /usr/sbin (slackware 12)... Si aparece algun error que dice que no encuetra el comando, fijarse bien que distribucion tiene uno... Una pavadita pero puede traer complicaciones

Espero que te sirva a vos y a cualquiera que lea el post
Saludos  :up:


ZeiterZ

Interesante mortadelax.

Lo voy a probar en una o dos semanas.

Saludos.

mortadelax

Me olvide de decirte...

Yo segui todos los pasos de este tuto http://www.ecualug.org/?q=2007/aug/22/comos/como_controlar_el_ancho_de_banda_usando_htb_gen, y me anduvo... La verdad no se si es necesario seguirlo, pero es ahi donde conoci al htb-gen

Cualquier cosita pregunta... no es lo mismo pasar un tutorial cualquiera, que pasar uno habiendo probado y funcionando


lucho_elmillo

che, muy buen aporte el tuyo mortadelax, no sabia que este script esta muy piola al parecer

mortadelax

Hola a todos. Revivo este post ya que tengo una pregunta relacionada con el tema.

Resulta que tengo andando un router con slackware que da internet a 10 makinas. Como servidor dhcp uso dnsmasq. Limito la coneccion con el htb-gen ya mencionado.

Con el dnsmasq todo piola. Armo las reservas con mac/ip, y son estas las ip que uso en el momento de limitar la banda.
Ahora, si viene un vivito y se cambia su ip (en lugar de poner que lo tome por dhcp), pierde toda limitacion, y "baja y sube todo lo que quiere", pues cambio su ip.  :( :( :guns:

Me gustaria que me ayuden con las iptables, para permitir que haya coneccion en las ips que yo quiera (el rango del dnsmasq que yo pongo) y DENEGAR TODO HASTA RED LOCAL, a cualquier otra ip de lan que no tenga nada que ver. Incluso me gustaria que se respete el par macaddress/ip que yo haya puesto como reserva, asi nadie tiene la posibilidad de "ocupar el lugar de nadie", y si agregan una pc, que me avisen! :jaja:

Ustedes diran...."ponete coyote linux o brazilfw y se termino el problema". No señores, la idea es armar todo casero, aprender, y que sea una distribucion linux completa (no una mini distro), asi si quiero tener apache, levantar X, o lo que fuere, lo pueda hacer.

Mil gracias... Saludos a todos. Tremenda esta comunidad  :up: :excelente:

ZeiterZ

Lo mejor sería auxiliarte con SQUID e iptables.
Squid tiene listas de control de acceso que puedes usar para crear grupos de máquinas y permitir o no el acceso.

Si sólo quieres usar iptables, hay que agregar una línea por cada máquina/dirección habilitada del estilo:

$IPTABLES -A FORWARD -i $INTIFA -o $EXTIF -s 192.168.1.52 -j ACCEPT

o para un rango de máquinas:

$IPTABLES -A FORWARD -i $INTIFA -o $EXTIF --src-range 192.168.1.52-192.168.1.112 -j ACCEPT

y luego de estas líneas, denegar a las demás con:

$IPTABLES -A FORWARD -i $INTIFB -o $EXTIF -s 192.168.1.0/24 -j REJECT

La lógica de iptables hace que se tome la primera regla que se satisface y termina de procesar.
Por esa razón se ponen primero las particularizaciones y recién después las generalizaciones.

$IPTABLES, $INTIFB y $EXTIF son variables que tienen:

$IPTABLES -> la ubicación del ejecutable  iptables. Se lo puede conocer con la orden:

which iptables

normalmente es Debian y derivados está en  /sbin/iptables
y en el script del firewall se la establece con:

IPTABLES=/sbin/iptables     ó
IPTABLES=`which iptables`


$INTIFB -> es la interfaz de red interna (red local) a la que están conectadas las máquinas

Se puede conocer cuál es la interfaz adecuada recurriendo a la orden ifconfig y mirando las direcciones de red. Se la establece como:

INTIFB=eth1

$EXTIF -> es la interfaz "externa" o la que tiene acceso a Internet

Se la puede conocer también con ifconfig. Su nombre dependerá de cómo se conecta el Linux a internet.... así que puede ser una interfaz del tipo eth2 o también  ppp0
Se la establece con:

EXTIF=ppp0

A todo esto, supongo que el script del firewall tiene todo lo necesario para funcionar y que estuvo funcionando.
Si es así, estos agregados harán el trabajo.

Saludos.

mortadelax

#11
Recontra claro ZeiterZ muchisimas gracias.
Es lo que andaba buscado: permitir a mis 10 makinas y denegar todo lo demas! excelente :palmas:

Nota. $INTIFA = INTIFB?
Otra cosa, en el iptraf veo macaddress desconocidas (capaz del router, switch o hub). Hace algo el REJECT contra ellos?

Probe y me anduvo con
iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
no con el que pusiste, sera por la distro o por versiones de iptables.

Si me pongo una ip intrusa, me limita perfectamente internet, pero puedo acceder a las carpetas compartidas. Se puede limitar esto tambien? De ultima, con que no ande internet ya esta.

Squid por ahora no, paso. Por ahi en un futuro.

Firewall?... he visto varios, esos que denegas todo y permitis ciertos servicios. No lo tengo implementado por miedo de cerrar algo y que me vengan a decir "che no me anda tal cosa".
Es asi esto? o no tanto? Digo que por ahi me venga uno que no le ande el lineaje, el ares u otra cosa.

Noten la importancia del uso del QoS: en este momento, libere toda conexion a un sospechoso vecino, y el hdp me esta subiendo a 35 kbytes/seg.

SALUDOS Gracias por la pronta respuesta ;D

ZeiterZ

Las IPs propias del servidor/router no deberían aparecer en las reglas del firewall para el tipo de filtrado que estás buscando.

$INTIFA y $INTIFB a los fines del ejemplo, son iguales.
Me olvidé de corregirlas porque las saqué de un firewall que hice para un servidor que maneja dos redes internas. Una red por INTIFA y otra por INTFB.
En tu caso, reemplazá INTIFA e INTIFB simplemente por INTIF.

Con respecto a los distintos firewalls que hay (kmyfirewall, firewall-builder, firestarter, etc.) no usé ninguno. Hasta el momento he venido armando mis propios firewalls regla por regla.

Tal vez en algún futuro pruebe alguno de ellos.

Saludos.

ZeiterZ

Si estás compartiendo con Samba, puedes filtrar las máquinas que se conectan en la configuración de Samba:   /etc/samba/smb.conf

con las cláusulas  "hosts allow"  y "hosts deny" poniendo las IPs autorizadas primero y denegando el resto

hosts allow  =  192.168.1.20 192.168.1.21 192.168.1.45
hosts deny  =   192.168.1.0/24

Si no quieres tocar la configuración de Samba y te apetece usar sólo iptables, igual agregá esta línea en la configuración de Samba, sección [global]

smb ports 139

y cierras el puerto 139 para tráfico proveniente de las máquinas no autorizadas, por ejemplo:

$IPTABLES -A INPUT -i $INTIFA -s 192.168.1.56/32 -p tcp --dport 139 -j REJECT

Saludos.

mortadelax

Gracias ZeiterZ por toda la ayuda.
La verdad esto ultimo del samba no me salio, pero no importa.

Para el proximo tropiezo con el router, vengo aca o genero un post?
O sea, son temas diferentes, pero son 'funciones' que puede hacer un router. De este post se pueden sacar un par de cositas interesantes.

Saludos