jueves, 8 de diciembre de 2011

Utilizar un sistema operativo CentOS como router en una red local.

CentOS (Comunnity enterprise Operating System) es un sistema operativo de código libre, basado en el núcleo Red Hat, pero con código liberado. CentOS es la alternativa gratuíta a Red Hat, y por ello, suele tener bastante tirón para implementarlo como servidor en una pequeña o mediana red. CentOS puede ser usado también como servidor LAMP, servidor de correo, servidor DHCP, DNS, y un largo etcétera.


CentOS puede ser usado también como un router, usando dos tarjetas de red, una hacia la red de área local y otra al exterior(Internet)

Para empezar esta entrada, nos centraremos primero en una situación "de la vida real":

Imaginemos que tenemos una red de área local de por ejemplo tres o cuatro ordenadores, todos conectados por un switch, y queremos usar un ordenador ajeno a esos como servidor, para administrar a esos ordenadores direcciones IP y servicios de red cualesquiera. El ordenador servidor se usará como router, y también como firewall, filtrando las conexiones, rechazando algunas y aceptando otros puertos, para así tener control absoluto sobre las conexiones.

Configuración del servidor:

  • El servidor tiene para esta administración dos interfaces: eth0 y eth1
    • eth0 para local.
    • eth1 para salida a Internet.
  • La configuración del firewall de la red se administrará mediante iptables
  • El método para enrutar los paquetes será NAT.
Éste esquema se da en bastantes empresas a nivel pequeño y mediano. La diferencia es que nosotros usaremos CentOS, mientras que en una empresa es más probable usar un Windows Server (No tengo nada contra WS, pero resulta más eficiente el uso de Linux para administración de servidores. Más control)

Una vez planteado todo, lo iremos montando poco a poco.

El esquema a seguir será el siguiente:

  1. Instalaremos un servidor DHCP y configuraremos las opciones del mismo.
  2. Configurar las interfaces eth0 y eth1 para su funcionamiento.
  3. Enrutar los paquetes entre las dos conexiones (IP Forward y NAT)
  4. Establecer las políticas de filtrado (iptables)
Sugerencia: Recomiendo usar CentOS en runlevel 3 (Línea de comandos). Ganaremos rapidez en el servidor al omitir el entorno gráfico.

Nota: Todos los comandos deben ser ejecutados como Superuser (root).

1. Instalación del servidor DHCP y configuración del mismo.

En primer lugar, hay que descargar de los repositorios de CentOS el servidor DHCP. El paquete actual a fecha de hoy es dhcp-3.0.5-29.el5_7.1. Para instalarlo, en la línea de comandos, escribimos

# yum install dhcp

El ordenador buscará en los repositorios de CentOS el paquete solicitado. Una vez lo tenga, lo bajará a nuestro ordenador, lo configurará y lo intentará inicializar sin éxito, debido a que no tiene una configuración predefinida todavía.


Una vez tenemos bajado el servidor DHCP, vamos a proceder a configurarlo.

En primer lugar, tenemos que tener fijada cuál va a ser nuestra política de administración de las direcciones IP, así como del rango de direcciones disponible, máscara de subred, puerta de enlace y servidor DNS. Como será un servidor único, no usaremos política de alquiler de direcciones.

El archivo de configuración a editar se encuentra en /etc y se llama dhcpd.conf. Si lo ejecutamos con nano y vim, nos saldrá que el archivo de configuración de muestra se encuentra en /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample. Para evitar posibles fallos y autorizaciones erróneas, introduciremos nuestro propio dhcpd.conf sin copiar el archivo de muestra.

Como ejemplo, vamos a usar la subred 172.16.1.0,  máscara de subred 255.255.255.0, puerta de enlace la 172.16.1.1, DNS el 8.8.8.8. La administración de direcciones IP va de la 20 a la 30.

El archivo quedaría así:


# /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;

subnet 172.16.1.0 netmask 255.255.255.0 {

option routers 172.16.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8;

range dynamic-bootp 172.16.1.20 172.16.1.30;
}



Guardamos el archivo. Ahora tenemos configurado correctamente todas las opciones que requería nuestro servidor. Seguimos sin poder ejecutar el servicio debido a que no hemos configurado la dirección IP del interfaz a usar, pero lo arreglamos enseguida.

PD: Las dos primeras líneas (ddns-update-style y ignore client-updates) vienen a decir que no queremos actualizaciones dns e ignoraremos las peticiones de clientes queriendo renovar su dirección IP local.

(Corrección hecha por el usuario Juan Ortega. Comentario más abajo. Gracias por la ayuda)
Si tenemos un equipo al que le queremos dar una IP fija, añadimos la siguiente línea:

host (nombre máquina abreviado) {
option host-name (nombre máquina completo);
hardware ethernet (dirección mac);
fixed-address (dirección ip que le damos);
}

El nombre abreviado o completo de máquina lo pueden poner como quieran.

Nota: la dirección IP que le demos debe estar en la subred o subredes del servidor DHCP que definan.

2. Configurar las interfaces eth0 y eth1

Las interfaces eth0 y eth1, por lo general, tendrán diferente rango de direcciones IP:

  • eth0: Deberá llevar la dirección que pusimos en option-routers, ya que CentOS es nuestro servidor y puerta de enlace para la red local.
     
    • Bloque de direcciones a usar:
      • Dirección IP: 172.16.1.1
      • Máscara de subred: 255.255.255.0
      • No requiere de gateway ni DNS.
  • eth1: A gusto del consumidor. Yo utilizaré un modelo DHCP, ya que usaremos CentOS solo para enrutar la red local y servir como filtro y eth1 se conectaría a un router ADSL, pero si necesita ser implementado como red fija, especificaré donde proceda.

En CentOS, las configuraciones de las interfaces de red no se hacen por ifconfig de forma general. En su lugar, lo haremos más eficiente.

Hay dos modos:

  • Usando la Utilidad de configuración en modo texto (setup). Se ejecuta poniendo en la línea de comandos  # setup. Es más fácil de manejar.
  • Editando los archivos de configuración. Se encuentran en /etc/sysconfig/network-scripts/ y su nombre es ifcfg-ethx, donde x es el número de conexión
Setup es una sencilla herramienta semigráfica que mediante un menú intuitivo nos permite configurar las interfaces fácilmente.

La edición de los ficheros de configuración se puede realizar utilizando Vim o Nano, el que más rabia os dé.

El fichero de configuración será algo así para eth0:

# (Controlador del adaptador de red)


DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=(Dirección MAC del adaptador)
IPADDR=172.16.1.1
NETMASK=255.255.255.0

Para el fichero eth1, algo tal que así:


# (Controlador del adaptador de red)


DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
HWADDR=(Dirección MAC del adaptador)

Si queremos especificar un gateway en cualquiera de los dos adaptadores, se añadirá GATEWAY=(Dirección del gateway). Si queremos añadir un servidor DNS, debemos cambiar el archivo de configuración ubicado en /etc/resolv.conf, y en las líneas que proceden escribir.

nameserver (dirección DNS)


Una vez modificados los valores de los ficheros de configuración y del Setup, debemos reiniciar el servicio para que la configuración tenga efecto. Para ello, escribimos:

# service network restart

Una vez realizamos la siguiente acción, la dirección de las dos interfaces se cambiará a la que hayamos configurado en el Setup o los ifcfg. Acto seguido, procederemos a iniciar el servicio dhcp, para así inicializar la red local. Para ello, en la misma consola, escribimos:

# service dhcpd start

PD: Si falla el inicio de dhcpd, revisa los ficheros de configuración  (generalmente es que falta un punto y coma, o algo mal puesto de nombre). Si no encuentras nada, existe un fichero en /var/log/messages que nos dirá lo que nos chirría de la configuración general de dhcp o cualquiera que estemos usando. Si falla alguna cosa, revisar este archivo es lo más conveniente. se ejecuta con:


# cat /var/log/messages

3. Enrutar los paquetes entre las dos conexiones (IP Forward y NAT)

Hemos configurado las dos interfaces, pero aunque hayamos configurado, nos resulta un poco "inútil", debido a que aún nos falta realizar el enrutamiento y el seguimiento de paquetes entre interfaces. Para ello, debemos activar el IP Forward y establecer NAT para realizar un enrutamiento exitoso.

  • Activar IP Forward: Para activarlo, tenemos que editar el fichero /etc/sysctl.conf, y en la línea denominada

    net.ipv4.ip_forward = 0

    Editar el 0 por un 1. Reiniciar el servidor CentOS para que los cambios hagan efecto.

  • Establecer NAT como configuración de enrutamiento: Por sí solo, el IP Forward no sirve de nada si no ejecutamos una excepción en iptables para añadir una "ruta" interna entre ambas interfaces y así poder enrutar.

    Para ello, en la consola, escribimos:

    # iptables -F
    # iptables -t nat -F


    Estos dos primeros comandos son para limpiar las configuraciones.

    # iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -d 0/0 -j MASQUERADE
Una vez realizado ésto, CentOS podrá enrutar los paquetes que le lleguen desde eth0 a eth1 y así, dar acceso a Internet a la red local en DHCP que montamos anteriormente.

4. Establecer las políticas de filtrado (iptables).

Una vez todo está funcionando, es posible que solo queramos que estén abiertos determinados puertos, o denegar el acceso a un usuario concreto, permitir que pase información de un puerto... Para ello, CentOS y su iptables (cortafuegos) nos podrán ayudar para establecer qué dejamos o no pasar a través de la red.

Lo primero de todo, antes de establecer filtros, vamos a eliminar la configuración antigua del cortafuegos. Para eso, teclearemos los siguientes comandos:


# iptables -F (Borra todas las reglas de iptables)
# iptables -X (Igual que -F)
# iptables -Z (Pone el contador de paquetes de iptables a cero)
# iptables -t nat -F (Borra la regla de enrutamiento NAT anterior)

Una vez tecleamos todos estos comandos, procederemos a disponer nuestra propia configuración. Por ejemplo:

  • Permitiremos acceso a los puertos de Internet básicos (80 y 443, HTTP y HTTPS)
  • Permitiremos un puerto de conexión segura (22, SSH)
  • A un equipo le daremos acceso total.
Para empezar, restauraremos la última línea de cuando usamos NAT en el servidor:

# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -d 0/0 -j MASQUERADE

Para que el servidor acepte y reenvíe paquetes, debemos aceptar las políticas de uso (INPUT para enviar paquetes, FORWARD para enrutar, y POSTROUTING para enviar a la ruta)


# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -t nat -P POSTROUTING ACCEPT


Para aceptar las políticas de HTTP y HTTPS, añadiremos la siguiente línea:

# iptables -A FORWARD -s 172.16.1.0/24 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -s 172.16.1.0/24 -p tcp --dport 443 -j ACCEPT

Para aceptar el SSH, añadiremos la siguiente línea:

# iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 22 -j ACCEPT

Para rechazar los paquetes de un determinado número de puerto. 

# iptables -I INPUT -s 172.16.1.0/24 -p tcp --dport (puerto cualesquiera) -j DROP

Para el acceso total a un equipo, añadiremos la siguiente línea. Como ejemplo, pondré el 172.16.1.2

# iptables -A FORWARD -s 172.16.1.2 -j ACCEPT

Para consultar todos los cambios hechos, ejecutamos:


# iptables -L


Para guardar la configuración, ejecutamos:


# iptables-save


Nota: Para las reglas iptables, es más recomendable usar un script, para ejecutar todo a la vez y no uno a uno.

Siguiendo estos pasos, conseguiremos tener nuestra propia red local con un CentOS como router.

Fuentes:
Redes de Área local. Aplicaciones y Servicios Linux [Formación del profesorado]. Instituto de Tecnologías Educativas.
Experiencia propia.

Revisión de artículo: Octubre de 2013
Razón: Corrección del contexto. Adición de la cláusula de rechazo de paquetes. Corrección de la cláusula de IP fija gracias al comentario de un usuario.

    70 comentarios:

    1. Excelente explicacion,...muy detallado

      ResponderEliminar
      Respuestas
      1. Hasta el día de hoy es la que más visitas está teniendo. Estoy recompilando los comandos que introduje aquí porque igual tengo fallos (Vamos, casi seguro). Así que si podéis aportar indicios o algo (Tanto usted como algún otro visitante) me gustaría que me lo hicieran saber.

        Eliminar
    2. Muy bueno, a diferencia de otros tutoriales en este caso me funciono. Es importante para reenviar el trafico la sentencia #iptables -F.
      Muchas gracias.

      Aportare en cualquier momento.

      saludos

      ResponderEliminar
      Respuestas
      1. Gracias, tanto por el comentario como por que te haya servido, compañero. (Por fin alguien dice que funciona y me lo verifica)

        ¿iptables -F? ¿Pero en qué momento? Eso únicamente borra las reglas existentes en todo el iptables (excepto en tablas, que debes usar iptables -t NAT -F), y se utiliza al principio del script... Aunque no sé, igual soy yo que me estoy mostrando espeso a estas horas y no lo cojo bien jeje

        Saludos.

        Eliminar
    3. Excelente aporte! Muy bueno y me ayudo mucho, por favor deme una sugerencia, tengo una red local con mas de 20 terminales y entre ellos hay clientes con SO Windows, concentro información en el servidor CentOS, como compartir con ciertos Privilegios a los clientes en windows, (como por ejemplo: lectura y escritura en el servidor y otros solo escritura, algunos terminales solo guarden archivos en el servidor), aun estoy con samba, algo para hacer mas eficiente el servicio.

      Se Agradece.

      ResponderEliminar
      Respuestas
      1. Lo primero, gracias por tu comentario.

        Según veo:

        - Tienes un servidor Samba en el CentOS
        - 20 terminales

        Primeramente, debemos decirle al iptables que deje pasar el tráfico de Samba. Los puertos son 137, 138, 139 y 445. Ponemos la cláusula de ACCEPT en esos puertos.

        Voy a determinar que todos los terminales tienen usuario y contraseña propios.
        Te voy a poner por ejemplo, que tienes los usuarios: jefe1, empleado1 y empleado2

        Si quiero que jefe1 tenga permisos de escritura en una carpeta llamada Proyectos, la cual está presente en el smb.conf del Samba, en los atributos de smb.conf tendré que poner

        [Proyectos]
        path = /datos/proyectos (Este dice dónde está ubicado la carpeta en el servidor Samba)
        readonly = yes (Sólo lectura)
        write list = jefe1 ( Aquí, ya podemos poner los usuarios que queramos que escriban en esta path. Los usuarios que no aparezcan son los que solo tienen de lectura y no de escritura)

        Si después quiero que empleado2 los tenga, en la write list de la carpeta, al final, lo ponemos.

        Creo que es eso lo que más o menos quieres ¿No?

        Eliminar
    4. Gracias por la molestia de realizar este tipo de guia, por la noche la ejecutaré, es posible que agregues como activar y configurar correctamente DNS en la eth1, gracias

      ResponderEliminar
      Respuestas
      1. Gracias por el comentario.

        DNS es un tema que no he dado mucho... Además, debería ser un DNS en eth0 (porque si quieres que los de la red local tengan un DNS, no lo vas a poner en la dirección de extremo opuesto, que además es DHCP y requeriría una especie de DNS dinámico, sería liar las cosas)

        En un futuro no descarto realizar una pequeña guía de DNS con Bind y una jaula tipo bind-chroot, pero por el momento voy a investigar primero el cómo hacerlo.
        Además dependería del DNS que quieras hacer: Autoritativo, no autoritativo, caché forward, caché no forward. El que más sencillo sería y aplicaría sería el forward para no armar tanto follón entre dominios.

        (Si me equivoco en algo, es porque yo DNS no lo doy mucho y no controlo, lo siento)

        Eliminar
    5. Muchas gracias, hace mucho tiempo que no encuentro un post como el tuyo, ordenado y con detalles. Hace tiempo quiero implementar esto, voy a ponerme con el tema y te comento. Desde ya gracias.

      ResponderEliminar
      Respuestas
      1. Gracias compañero. Espero que te funcione, creo que al resto de gente sí que le ha funcionado, porque no han vuelto a reclamar o pedir ayuda (O quizá, decidieron buscar otra fuente alternativa para buscar porque erro demasiado).

        Sea como fuere, mucha suerte en la implementación.

        Eliminar
    6. una preguntota... yo lo estoy haciendo en virtual box tengo montados 2 S.O. en 1 el centOS 6(servidor) y en otra windows xp(ciente) en el servidor tengo las 2 interfaces una como puente para que me tome el internet del modem y otra como NAT para la red interna y así enrutar hacia el cliente.

      en mi servidor levante el servicio DHCP y puse un rango de como 5 ip's (10.0.2.1 a 10.0.2.6) la cuestion aqui es por que cuando prendo mi maquina cliente me asigana una ip que no esta en el rango (10.0.2.15) si tengo internet y todo y lo raro aquí es que si me da ping al servidor(10.0.2.3)

      espero haberme explicado gracias buen manual :D

      ResponderEliminar
      Respuestas
      1. Lo primero, gracias por el comentario.

        Si te asigna una dirección IP diferente a la del rango puede ser porque:

        1. El archivo de configuración dhcpd.conf tenga mal el rango (Que oye, a veces podemos estar seguros y luego al final resulta que si)

        2. Si el rango y todo está bien definido, inicia el cliente y servidor a la vez, y cuando esté todo marchando, reinicia el servidor DHCP a la par que cortas la conexión entre cliente y servidor. Una vez reinicie el servicio, conéctalo a ver si por algún casual funciona.

        3. A lo mejor hay alguna cláusula de servidor DHCP que está funcionando mal. Si puedes, pásame por aquí la configuración de tu dhcpd.conf y le hecho un vistazo.

        4. Por último, aunque puede parecer una tontería, verifica que tu cliente no tenga dirección estática.

        Eliminar
      2. Dhcpd.cong

        #Red CentOS
        subnet 10.0.2.0 netmask 255.255.255.0{
        range 10.0.2.3 10.0.2.20;
        }


        es lo que tengo en este archivo ya me asigna una ip del rango en mi cleinte si tengo salida pero el problema es que en mi puerta de enlace tengo 10.0.2.2 y segun yo tengo configurado 10.0.2.1 como puerta de enlace lo hice con webmin yen mi cliente como NAT si me asigna ip del rango solo me cambia la puerta de enlace y si tengo salida a internet y cuando doy de baja el dhcp en centos y en el cliente aun me sigue asignando un ip del rango y aun así tengo internet cuando

        Eliminar
      3. ¿En el dhcpd.conf sólo tienes eso o has omitido los option-routers y option demás?

        El caso que te acaece digamos que es un tanto "raro". Un servidor DHCP siempre distribuye todo al pie de la letra, y en tu caso... Es un poco extraordinario. Quizá te esté haciendo mal el puente.

        ¿Cuál es el gateway del router y cuál el del CentOS? ¿10.0.2.1 en router y 10.0.2.2 en CentOS? ¿O es al revés?

        Respondiendo a cuando tiras el servicio de DHCP y te sigue con la misma IP, cabe destacar que cuando tiras el DHCP el XP puede seguir con las direcciones porque no renueva todo el tiempo ni hace peticiones al servidor.

        Aunque esto que vaya a decir te suene un poco repetitivo, verifica bien todo y mira paso por paso. Si pasa a mayores y sigue sin aclarársete, te pediría que me pasaras las configuraciones pertinentes, hago el esquema en mis servidores virtuales y veo si es algún fallo de máquina cliente o servidor.

        PD: Tengo una duda. Esta mañana decías que el rango que diste es de la 10.0.2.1 a 10.0.2.6, y ahora dices que es de la 3 a la 20... Ahora también dices que la 10.0.2.1 es un gateway... ¿Es cosa mía o te has equivocado? Sin ofender

        Eliminar
      4. no pasa nada en la mañana cambie el rango de ips's
        y si cuando tumbo el dhcp en el centos en el xp le doy /release y /renew y aun asi me sigue asignando ip del rango de centos y yo configure el dhcp en webmin de puerat de enlac ele puse 10.0.2.1 y en los clientes me pone la misma pero con .2 y cuando cambio la interface de NAT a red Interna si me asigana ip y la puerat de enlace que deben de ser

        Eliminar
    7. La cosa cada vez se complica más, según veo...

      Así que segun leo. ¿No configuraste el DHCP mediante edición del archivo de config, si no con Webmin? Es posible que en eso, Webmin esté haciendo alguna cosa extraña (algo que frecuentemente no suele realizar porque Webmin es una herramienta muy buena, pero oye, que nunca se sabe)

      Lo de interface de NAT a Red Interna creo que me lo deberías explicar. En éso te refieres a las interfaces del Virtualbox ¿No?

      Para el caso de máquinas virtuales haciendo éste escenario, el adaptador siempre debe estar en Bridged o interno, y nunca usar NAT. NAT solamente lo debemos usar en las VM cuando no queremos hacer que si configuraciones, que si conflictos... Pero para el tema de estos escenarios, tiene que ser todo en Bridged o interno, porque si no pueden ocurrir cosas muy raras. De todas formas, no sé si Virtualbox también lo equipa, pero los virtualizadores "suelen" tener un Virtual Network Editor, que edita los adaptadores virtuales que usas. Por si acaso está haciendo algún efecto raro.

      ¿Has probado a virtualizar éste escenario con VMware? Es el que usé yo cuando desarrollé este tema, y te puedo asegurar que no me ha dado problema alguno.

      ResponderEliminar
    8. amigo me gusto tu explicación pero tengo una duda yo uso brazifw en m cyber pero por ejemplo quiero instalar un servidor de datos en centos mi duda es solo le instalo una sola tarjeta de red?

      ResponderEliminar
      Respuestas
      1. Si vas a instalar un servidor FTP (de archivos) en un CentOS que ya tengas con esta misma configuración explicada en el blog, lo puedes instalar sin añadir otra tarjeta de red. La dirección local que le hayas puesto al servidor es la misma y no hace falta ninguna más.

        He estado viendo lo de BrazilFW, pero... ¿Eso cómo es exactamente? Es que es la primera vez que oigo sobre ello. He visto que es una distribución como ya lista para hacer de router y firewall sólo poniendo la config.

        Ahora, si lo que quieres es implementar un equipo a la red local (Siendo el BrazilFW como servidor de router y firewall), puedes introducirlo en la red, pero pones una excepción en el servidor DHCP especificando que para ése equipo la dirección sea fija.

        Creo que es éso lo que querías saber... Si no es así, te pido por favor que concretes un poquillo.

        Eliminar
    9. Gracias amigo por este gran tutorial, me sirvio de mucho he visitado muchas paginas pero no me habia funcionado y como me estoy introduciendo en el hambiente linux me costo un poquito, pero encuentro muy entendible este tuto

      GRACIAS !!!!

      ResponderEliminar
    10. Excelente y funciono, bien explicado 20 puntos para ti! Com hago listas de paginas NO permitidas, ejempo porno...

      Gracias de nuevo

      ResponderEliminar
      Respuestas
      1. Para bloquear páginas porno o cualquier otra:

        1. Busca las IP de las direcciones (suelen ser tres o cuatro, con nslookup las encuentras más fácil)
        2. En el IPTABLES, por ésta regla:

        iptables -I INPUT -s (Dirección web a bloquear) -j DROP

        3. Así, cuando se hagan peticiones a ésa dirección IP, el servidor las tirará.

        Gracias por el comentario. Y al resto que comentó, también. :D

        Eliminar
    11. Amigo puedes ayudarme. Mi servidor DHCP permite tener acceso al servidor cuando se configura por medio de una ip estatica como bloque este problema? gracias

      ResponderEliminar
      Respuestas
      1. No entiendo muy bien la pregunta. Creo que te refieres a :
        ¿los clientes tienen acceso al servidor DHCP y quieres evitar el problema?
        ¿Al revés?

        Por favor, si pudieras explicarlo más claro, te lo agradecería. Es eso o estoy un poco espeso esta noche...

        Eliminar
      2. Creo se refiere que aunque solo espesifique unr ango de ips de 10 osea 192.168.1.10/20 si en el equipo cliente pones ip fija .40 aun asi conecta eso entiendo yo jeje eh seguido esta guia y todo funcionando pero no eh provado esto aver si tmb me pasa

        Eliminar
    12. se podrá hacer bonding osea de un bon0 (internet) <==centos dhcp==> eth0

      ResponderEliminar
      Respuestas
      1. Me parece que sí se podría hacer, pero en el tema de bonding interfaces no estoy muy metido...

        Eliminar
    13. Te agradesco por tu guia muy buena muy bien explicada, y te escribo aver si me puedieras ayudar tengo mi servidor centOS corriendo ya con muchas cosas mysql-asterisk-apache-dhcp-entre otras cosas ya funcionando puse otra tarjeta de red y lo configure como router como indicas por ahora permitiendo todo alas ip un tipo de dmz supongo.

      Buenoa l grano la idea es qeu tengo 2 conexiones de internet y la duda es su puedo agregar otra tarjeta ami server y poder conectar las 2 y cuando falle eth2 automaticamente cambie a eth3 y cuando vuelva eth2 vuelva a funcionar este aver si me explique y me pudieras dar una idea de esto que ya le di vueltas al asunto.

      ResponderEliminar
      Respuestas
      1. Lo primero de todo, gracias por el comentario.

        A ver, tienes dos tarjetas de red, o tres las que tengas, y quieres que cuando una ethx caiga, se cambie a la siguiente ethx... Mi pregunta es ¿Caerse el internet o que la tarjeta de red se sature?

        La verdad es que éste tema lo tengo que discurrir un poco. Recuerdo que cuando estuve en un sitio de prácticas, teníamos una especie de servidor monitorizador (Nagios ¿Te suena?), y se ponía a husmear en todas las cosas que hacían los servidores que le añadiéramos (ping, funcionamiento de servicios, disponibilidad). Mi solución más "complicada" por así decirlo podría ser que instales un Nagios y prepares un script para que cuando eth2 falle, lo ejecutes y tire eth2 y suba eth3.

        Eliminar
    14. que tal mi nombre es rogelio mendez rogeliomendezcruz@gmail.com y tengo un problema ya despues de configurar el servidor centos, al hacer una prueba en una pc que tengo conectada al switch si me da acceso a la red pero al querer salir a internet manda error y dice que el DNS no esta funcionando espero tu ayuda gracias.

      ResponderEliminar
      Respuestas
      1. Si te da red pero te falla el DNS, intenta poner otro DNS en el dhcpd.conf, a poder ser los que te suministra tu ISP. Revisa también la configuración del NAT por si ha fallado algo.

        Eliminar
    15. En primer lugar excelente guia, muy bien explicada y entendible, a mi tambien me funcionaron todos los pasos pero, cuando quiero dar salida a internet a los host de la lan, no lo consigo porque la configuracion realizada no da correctamenta la direccion de DNS, y estoy tratando de lograr que los demas equipos de la lan tengan salida a internet
      a traves de la tarjeta de lan

      ResponderEliminar
      Respuestas
      1. ¿Has probado a dar los servidores DNS de tu ISP? ¿O has intentado poner los del 8.8.8.8?
        Es raro que pueda dar el rango de direcciones pero no dé los dominios.
        Prueba a usar la utilidad nslookup para ver si consigue resolver el DNS.

        Eliminar
      2. eh vuelto a probar y mi problema era que no puse bien las reglas del iptables, lo cual hacia que la lan no pueda ver a la tarjeta con salida a internet, gracias el tutorial funciona.

        Eliminar
    16. Buen post .. una pregunta dentro de lo que es FORWARD manejamos en filter - mangle -nat en cual de las tres reglas aplicariamos

      ResponderEliminar
    17. Hola fenómeno, es un tutorial EXCELENTE, MUY bien explicado e intuitivo, pero he de indicarte un fallo, en la parte de asignar una ip fija, las líneas a escribir son:
      host (nombre máquina) {
      hardware ethernet (dirección mac);
      fixed-address (dirección ip que le damos);
      }
      Que como lo tienes escrito me dió fallos y me volvía loco intentando saber porque era jajaja ;)

      Tengo una duda, a mí no me funciona. Los clientes no tienen salida hacía fuera. Lo he hecho todo tal cual, pero lo que pasa es que mi red tiene la salida autentificada ya que tenemos un proxy. Te explico lo que yo quiero realizar:
      1- el cliente quiere acceder a internet.
      2-manda al switch y este al servidor.
      3-el servidor enruta con la otra tarjeta que es la red donde está el proxy y la salida al router.
      4-el proxy autoriza la salida de la red del cliente y ya tiene internet.
      Entonces la parte de enviarlo al proxy y este fuera pues parece que no va. ¿Podrías ayudarme? Gracias

      ResponderEliminar
      Respuestas
      1. Lo primero de todo, gracias por la corrección. Enseguida cambio la entrada con tu nueva cfg para IP fija y declaro tu autoría en dicha corrección(Sabía yo que algo de la entrada tenía que fallar... Era todo muy bonito jajaja)

        Respecto a tu problema... ¿El proxy usa puertos específicos? Es raro que falle la configuración justo en el proxy, dado que enrutas desde la eth0 al resto (a 0/0, que es el resto de redes conectadas). De todas formas, me pondré a investigar en la "gaseosa" a ver si consigo arreglar tu problema.

        Eliminar
      2. Hoooola! De nada hombre, estamos para ayudarnos entre todos jaja
        El proxy usa el puerto 3128. Yo pienso que es por el proxy por lo que me falla, he cambiado el bashrc(que en el servidor lo cambié para poder tener salida a internet) pero no ha funcionado. Llevo unos cinco días investigando pero no he conseguido solucionarlo... A ver si consigues darme una solución para probarlo.
        Muchas gracias, tanto por el tutorial como por contestar.

        Eliminar
      3. ¿Has probado a abrir el puerto 3128 por TCP Y UDP?

        Prueba con ésto:

        # iptables -A FORWARD -s (la red que uses) -p udp --dport 3128 -j ACCEPT
        # iptables -A FORWARD -s (la red que uses) -p tcp --dport 3128 -j ACCEPT

        Prueba también a pasar un Wireshark para analizar el empaquetado, pero eso si no te funcionan estas dos cláusulas.

        Si ves que sigue fallando, prueba a tirar el iptables entero, y poner las cláusulas de ACCEPT en INPUT, FORWARD y -t nat POSTROUTING y la de POSTROUTING para enrutar (Pero ninguna de los puertos). Si te falla bajando eso, prueba a ver si el proxy está bien configurado o falla alguna cosa.

        Sigo probando cosas, de momento.

        Eliminar
    18. como puedo compartir internet desde centos 6.4, tengo 2 tarjetas de red en eth0
      ip 192.168.0.3,mask 255.255.255.0, puerta 192.168.0.5, DNS 190.4.6.194, como configuraria la tarjeta eth1 y el cliente?

      ResponderEliminar
      Respuestas
      1. 1. ¿Ésa configuración de red es "hacia dentro" o "hacia afuera"?
        2. La tarjeta eth1, si es la que vas a usar para distribuir al resto de clientes, como quieras, siguiendo las instrucciones que arriba se detallan. El cliente no haría falta, porque si es DHCP da la dirección solo

        Eliminar
    19. Hola Buenas tardes, tengo un PC instalado centos 6.4, con 2 tarjetas de Red y una conexión adsl con Ip Fija y por medio PPPoE. y quiero hacer que este servidor centos, convertirlo en un router que por una interfaz ethernet se conecte al adsl, y por la otra darle Internet a otros equipos por medio de swith. alguien me podría ayudar como hacer hacer esto.

      ResponderEliminar
      Respuestas
      1. ¿Has seguido éste manual? Para tu configuración, lo único que deberías cambiar es que la eth0 haga de DHCP y que eth1 lo pongas estática con tu conexión ADSL. Y bueno, los iptables y lo que te convenga... ¿O no es eso lo que andas buscando?

        Eliminar
    20. Hola, muy buena explicacion felicidades, aprovecho para hacerte una consulta, tengo la necesidad de implementar un servidor, pero yo no controlo la salida a internet, eso lo controla otra area con un firewall, me necesidad es poner un servidor con carpetas compartidas, que este no se vea en la red, que solo permita conectarse a las carpetas compartidas por MAC, usuario y contraseña, gracias....

      ResponderEliminar
      Respuestas
      1. Si lo vas a implementar solamente en la área de red local, configura el servidor FTP solamente para dicha red y evitar que la interfaz que tenga salida a Internet pueda conectarse y ver el contenido de las carpetas compartidas. Por ejemplo, en el iptables podrías poner:

        # iptables -A INPUT -s (red de internet que tengas asignada en la interfaz) -j DROP

        Así, solo podrán acceder los ordenadores que tengas en el DHCP implementado y no los de fuera. Revisa tambien el artículo sobre FTP que tengo publicado en éste mismo blog para que veas más o menos la estructura de cómo lo podrías hacer.

        Si todo lo que he dicho anteriormente no te sirve, por favor, comuníncalo e intenta explicarlo un poco más detallado.

        Gracias por el comentario. :D

        Eliminar
    21. Excelente aporte!!! es genial encontrar a personas que al igual que tu compartan conocimiento y ayuden a debatir, discutir e incluso solucionar problemas...
      Estoy trabajando con CentOS y tengo un Servidor Proxy/Firewall que estoy montando.
      Mi esquema es q tengo 3 interfaces desde mi Servidor CentOS...
      Eth0= 192.168.1.2 (que es mi Proxy/Firewall)
      Eth1= 172.16.0.1 (para la RED LAN)
      Eth2= 10.0.0.1 (que es mi DMZ)
      Tengo ademas mi server Web, Correo y BD...
      El problema surge que no puedo acceder a mi server BD desde mi LAN y lo necesito pues el Sistema de mi institución para conectarse, como es obvio, debe conectarse a mi BD... he ido por muchos sitios y visto muchas configuraciones y no puedo... (OJO: no tengo problemas con mi server de COrreo y Web). Cuando hago un telnet al puerto que contiene la BD se ve q esta abierto...
      Probé una distribución llamada IPCOP y si me hizo el enlace con la BD, pero me hacia conflicto con el INTERNET y como yo ya tengo mi propio Firewall/Proxy no necesito usar IPCOP... Te agradeceria si me puedes ayudar u orientar.. Soy nueva en esto... Mil Graciasssssssssssssss!!!

      ResponderEliminar
      Respuestas
      1. Buenas noches.
        Lo primero, gracias por el comentario. :D
        ¿Has probado a ver si es algún tema del iptables? Es que puede ser lo más seguro, por lo que me cuentas. Necesitarías saber los puertos que usa la base de datos (En las especificaciones del sistema BBDD vendrán, o si no ejecuta un Wireshark en la red y mira qué puertos son los que hacen conexión) y luego añadir una regla de tipo INPUT y FORWARD. INPUT que lleve el tráfico a 10.0.0.0 y FORWARD para enviarlo a 10.0.0.0

        En la mayoría de los casos de éste tipo, suele ser por alguna regla. Si de tu red puedes llegar a la base de datos con un ping, pero no puedes acceder, es porque el firewall te esta haciendo drop en el puerto.

        Para tu caso, por ejemplo, si tienes como eth1 y eth2 las que quieres enlazar, podrías usar algo como:

        iptables -A FORWARD -s 10.0.0.0 -p tcp --dport (puerto) -j ACCEPT
        Añadir esa regla con todos los puertos que requiera.
        Esta regla lo que hace es aceptar el tráfico que venga de la red y aceptarlo por el puerto X a la red 10.0.0.0 (es decir, para enviarlo a cualquier dirección de ése rango)


        Y luego la de INPUT
        iptables -A INPUT -s 172.16.1.0 -p tcp --dport (puerto) -j ACCEPT
        Este comando (que puedes o no poner, pero lo recomiendo) se usa para aceptar el tráfico de ése puerto a ésa red. Así por ejemplo, si tiene que pasar tráfico de 10.0.0.0 a 172.16.0.0, lo acepte.

        Prueba y me cuentas.

        Eliminar
    22. Muy buen tutorial pero una pregunta , porque cuando reinicio la maquina no funciona a pesar de a ver guardado la configuración (iptables-save) como se puede sulucionar .

      De antemano GRACIAS .

      ResponderEliminar
      Respuestas
      1. A veces el iptables-save no guarda. Sólo a veces. Por eso, en el mismo artículo, os insto a que inicieis las cláusulas desde un script que hayáis creado antes, por si dicha instrucción no guarda. También puedes probar conel fichero "/etc/rc.d/rc.local" y copiar ahí las instrucciones de iptables para que en cada reinicio funcionen y no sea necesario el iptables-save.

        Eliminar
    23. amigo a mi me falta mucho, me gustaria saber como configuro un firewall centos en un dominio microsoft server 2008,
      sin dhcp ya q no cuenta con un firewall instalado, estare eternamente agradecido por tu ayuda.

      ResponderEliminar
      Respuestas
      1. ¿Centos es la máquina router? ¿O es el MS2008? Acláramelo un poco, por favor.

        Eliminar
    24. Felicidades... clarito y al grano. Y funciona!!

      ResponderEliminar
    25. Hola, tuto sirve hasta esto días jejeje
      Para lo del iptables-save un amigo me dijo que es mejor usar
      #service iptables save
      Lo probé y me funcionó

      Ahora tengo una pregunta...
      Quiero hacer una lista de reservaciones que no necesariamente tenga que estar guardado en el /etc/dhcp/dhcpd.conf quizás pueda estar en un archivo aparte y que esa lista tambien me sirva para dar acceso a la red únicamente a esos equipos...

      Mi problemática surge al ver que es muy facil conseguir las claves de los accessos inalámbricos y quiero dificultar la cosa un poco... Esto lo hacía con un router D-Link pero ya estaba falloso y tenía un CPU Intel Atom ocioso por ahí y lo hice router jejeje gracias

      ResponderEliminar
      Respuestas
      1. Buenas noches.

        Desde mi concepto de reservas de direcciones, deben de ir todas las reservas en el /etc/dhcp/dhcpd.conf, ya que el archivo no puede tener redirecciones a otro "base" y usar los archivos externos. De todas maneras, siempre puedes programar un script que se ejecute cada X tiempo y te guarde las fixed address en el archivo que desees (Esto lo puedes conseguir con un peque-script en C++)

        Bueno, para dificultar las claves de puntos de acceso inalámbricos puedes probar a:

        1. Cambiar las claves precompartidas a WPA-PSK, WPA-PSK2 ó WPA empresarial con servidor RADIUS.
        2. Si por algún casual te la sacan, usar direcciones estáticas y así se les hace más dificil.
        3. Si los dos puntos anteriores fallan, habilitar un filtro MAC de direcciones físicas.

        A no ser que sea un hacker muy muy MUY concienzudo y que se lo proponga como reto, no es capaz de pasar del primer punto, ya que hacerse con las precompartidas suele ser el paso más dificil y los actuales routeres (al menos los Homestation de Telefónica y derivados como el Livebox de Orange o los de Vodafone) suelen rechazar el ataque básico para WPA de "te tiro de la red, envias la clave precompartida, te la intercepto, la saco y me conecto".

        Eliminar
    26. Como puedo habilitar el filtrado MAC?

      ResponderEliminar
      Respuestas
      1. En el router que tengas (El D-Link, o cualquier otro) debe de haber alguna opción en el menú de Wireless. Consulta en el manual del fabricante cómo habilitarlo.
        Yo recomiendo siempre con el filtro mac que sea de denegación total (es decir, que solo permita las que tu quieras utilizar) ya que si es el método de exclusión pueden falsear la MAC fácilmente y volver a intentarlo.

        Eliminar
    27. Ah pero el router está fallando por eso estoy utilizando centos, hay como hacerlo en él?

      ResponderEliminar
      Respuestas
      1. Investigando un poco por las FAQ de CentOS he encontrado que se puede hacer un filtrado MAC usando el iptables. Mírate esta página (está en inglés, pero mas o menos te puede salvar lo que quieres hacer)

        http://lists.centos.org/pipermail/centos/2007-June/040643.html

        Si no consigues entenderlo, dímelo y me pongo en mi VM virtual a intentar hacerlo, pero básicamente te dice que en el PREROUTING del iptables habilites las direcciones MAC que más te convengan y el resto de direcciones las pongas en posición DROP para que no vayan

        Eliminar
    28. wuau, que laburito que te haz dado, y tambien respondes con mucha dedicacion, "es que me leí todo, hasta las preguntas y respuestas".

      hoy voy a empezar a seguir tu guia, obviamente ya he intentado un par en el que omiten muchos pasos basicos, te hago una pregunta, tengo servidor centos 6.5, migre de ubuntu server hace como un mes supongo, así q cosas como el SElinux e iptables me cuestan un poco, buen en fin, tengo una tarjeta ethernet eth0 y una inalambrica wlan0, quiero seguir esta guia, aclarando que me conecto al modem de internet por ehternet, y quiero compartir internet aca por wifi, crear una red wifi y que los que esten cerca se puedan conectar. entonces para seguir tu tutorial cambiare eth1 por wlan0 , ¿esta bien así, osea lo demas es basicacmente lo mismo?, y tambien bueno, esto lo vere cuando lo logre hechar anda, pero si no es mucha molestai, tengo un ultima pregunta sobre limitar ancho de banda, tengo un portal en mi servidor, entonces para abrir el portal , "si es que se esta en la red local", tener una limitacion en el ancho de banda y si se va a conectar a internet tener otro ancho de banda ¿es posible? .


      por el tutorial, ya te doy las graciassssss.
      fuerza y exitoo en todo

      ResponderEliminar
      Respuestas
      1. Buenas tardes.
        Si, cuando se tiene algo de dedicación por ello... Jejeje

        A ver: He estado investigando el caso tuyo. Empezaré por el punto de hacer que tu wifi sea un punto de acceso:

        Existe hostapd, que hace que tu wifi se comporte como un AP y puedas configurar el canal, encriptado y todo lo relevante. El único problema que te podría saltar es la conversion de la clave precompartida (ya que a veces usar WPA o WPA2 hace que sea un poco lío si usas un CentOS por línea de comandos). Si me puede ser interesante para desarrollar una entrada, le dedicaré algún tiempo y hare un redacto. De todas formas, si sigues teniendo dudas sobre hostapd pregunta por aquí

        Respecto a la compartición....Es igual si cambias la interfaz eth1 por wlan0. La cosa es que al final puedas enrutar los paquetes, el ipforward se quede como aceptado y el iptables no sufra ningun problema.
        SElinux no tienes por qué tocarlo, ya que lo unico que podrías cambiar como mucho es el setenforce a permissive y ya.

        De forma adicional, para el control de ancho de banda ¿Por qué no directamente usas un control de flujo basado en restricción de puertos? Controlar el ancho de banda puede ser sencillo, si, pero también puedes hacer un corte mejor si cancelas ciertos puertos o similar. De todas formas, te buscaré un programa de control de ancho de banda, porque yo no conozco ninguno (lo hago todo por denegacion y aceptacion de puertos)

        Un saludo.

        Eliminar
    29. Si te aparecen direcciones IP de la red 169.254.x.x, significa que tu CentOS no está corriendo el servicio de DHCP correctamente y Windows está utilizando el proceso APIPA de conexiones descentralizadas.Tiene pinta de que no has configurado correctamente el mismo. Verifica que la dirección que tienes asignada en el punto de acceso es estática (vamos, que wlan0 tiene una dirección estática y es la misma que has puesto en option-routers y que el dhcp distribuye bien las direcciones de red. Si quieres postea el archivo de dhcpd.conf y la configuración que le tienes asignada al wlan0 y le echo un vistazo.

      ResponderEliminar
    30. bueno, te cuento que e logrado que funcione, "aunque por lo que veo, molestandote nuevamente", y el punto de acceso me funciona, desde otro notebook me conecte a la red inalambrica del servidor, tube internet, genial si!!!, gracias a ti, pero apache no anda cuando en ifcfg-eth0 coloco el puente BRIDGE=br0, osea si comento esta linea, reinicio el sistema, me anda apache, pero obviamente no me anda el punto de acceso.

      será posible que te postee la configuracion de interfaz de wlan0 y de eth0? .

      a todo esto, es curiosos, porque aunque me funciono bien, lo hizo mucho antes de lo que yo esperaba, osea dhcp.conf lo tengo sin nada aun, pero el hostapd.conf lo tengo configurado.

      bueno cualquiera sea la respuesta gracias igual :P.

      ResponderEliminar
      Respuestas
      1. Ahora es cuando tengo muchas preguntas:

        1. ¿Te refieres a apache, el apache instalado con el httpd? ¿o cuál?
        2. Si tienes el hostapd iniciado, pero no dhcpd ¿Cómo asignas las direcciones de red a los equipos que se conectan?

        Adicionalmente, si metes el Bridge br0, lo que haces es meter ésa interfaz en una VLAN (Virtual LAN), con lo que es normal que no te funcione el Apache si el PC no está dentro de dicha VLAN.

        ¿Has probado a aceptar el tráfico del servicio httpd en IPTABLES? Es posible que te pueda fallar algo de ahí.

        Me puedes postear las configuraciones de interfaz, pero realmente no es necesario ya que el tema principal de enrutamiento e internet está conseguido. ¿Has probado a meter la wlan0 también en el bridge br0?

        Te recomiendo que ahora trastees con las diferentes configuraciones. Pero el modelo básico que te propongo es que, a no ser que sea estrictamente necesario en este entorno, no uses bridges.

        Un saludo, y gracias por los comentarios :)

        Eliminar
      2. Me alegro de que ya te funcione, y se agradece que tomes este blog como una referencia externa :) Si tienes alguna otra duda (aunque la verdad siento que he ayudado poquito y lo has resuelto casi todo a base de probar) puedes postearla.

        Un saludo. :D

        Eliminar
    31. comprendo... pero funcionara en ubuntu server???

      ResponderEliminar
      Respuestas
      1. Excepto la modificación de las interfaces eth0 y eth1, el resto del proceso es igual que en cualquier otra distribución Linux. Éste escenario también lo hice en un Ubuntu 10.04 y fue a la perfección.

        Eliminar
    32. Muchas gracias por tan tremendo tutorial, espero que sigas activo para poder responder. Soy novato en la configuración de servidores linux, y mi pregunta sonará bastante tonta, ¿en que parte de la configuración se declara la IP pública proveída por el ISP para proveer de internet a la red? Agradeceré de sobremanera que me puedas responser! Muchas gracias!

      ResponderEliminar
      Respuestas
      1. Realmente no tienes que configurarla en ningún sitio. La IP pública que te da el ISP la recibe el router.

        La conexión es:

        Red de ordenadores interconectados con un switch<->Tu PC<->Router<->Internet

        Eliminar

    Comenta si te gustó la entrada, algún error que tenga, o simplemente entra a debatir si tienes algún problema, pues recuerda que aquí todo es posible y nada es seguro (Y a lo mejor a mí se me ha podido ir la pinza y escribir algo mal)

    Por favor, sé conciso y ten buena escritura, que aquí no se cobra por letras ni palabras a usar. Los comentarios estilo HOYGAN o descalificativos no serán publicados.