Compartir conexión a internet en Linux (compatible con Windows XP)

Muchas veces tenemos en casa más de un PC que accede a través del nuestro a internet con la conexión compartida de windows xp, y queremos hacer lo mismo con linux para que los demás puedan seguir conectandose a internet mientras usemos linux.

Doy por supuesto que ya teneis configurado los 2 dispositivos de red, uno conectado a la red local y otro a internet (para el ejemplo supondremos que nuestro pc tiene en la red local la ip 192.168.0.1 y mascara de subred 255.255.255.0)
La mejor manera es crear un script que se cargue al iniciar el sistema y que configure las reglas de iptables, que es un firewall integrado en el kernel que también permite el enroutamiento de conexiones.

Tenemos que hacer lo siguiente:

1.- Creamos un nuevo archivo que vamos a editar:

$ sudo gedit /etc/init.d/iptablesconf

2.- Ahora copiamos y pegamos el siguiente script en el editor de texto, sólo tenemos que modificar las 5 cadenas que están en negrita, donde pone eth1 y eth0 lo revisaremos para ver si efectivamente eth1 y eth0 son nuestros dispositivos de red conectados a internet y a la red local respectivamente.

Lo siguiente es por si queremos redigir cierto puerto a un ordenador de la red (que llamaremos pc2) local para que pueda por ejemplo usar el emule o tener activo un servidor ftp, etc.. , se supone que en el ejemplo redirigiremos en puerto 7778 tcp y 7779 udp al pc con la ip 192.168.0.2

Si no estamos interesados en redirigir puertos podemos borrar/comentar esas 3 variables.

#### SCRIPT DE CONFIGURACION DE IPTABLES ####
#!/bin/bash

# Dispositivo de red de internet
EXIF=”eth1
# Dispositivo de red local
INIF=”eth0

# Puertos tcp que se desean redirigir (separados por espacios)
puertosTCP=”7778
# Puertos udp que se desean redirigir (separados por espacios)
puertosUDP=”7779
# ip a la que se le redirigen los puertos
pc2=”192.168.0.2

fail=0

[ -f /etc/default/rcS ] && . /etc/default/rcS
. /lib/lsb/init-functions

log_begin_msg “Aplicando Reglas de Firewall…”

## Borrado de reglas anteriores
iptables -F || fail=1
iptables -X || fail=1
iptables -Z || fail=1
iptables -t nat -F || fail=1

## Establecemos politica por defecto
iptables -P INPUT ACCEPT || fail=1
iptables -P OUTPUT ACCEPT || fail=1
iptables -P FORWARD DROP || fail=1
iptables -t nat -P PREROUTING ACCEPT || fail=1
iptables -t nat -P POSTROUTING ACCEPT || fail=1

# Marcar paquetes salientes con su ip de origen
iptables -t nat -A POSTROUTING -o $EXIF -j MASQUERADE || fail=1
# Reenvio de IP
echo 1 > /proc/sys/net/ipv4/ip_forward || fail=1

# Aceptar paquetes para reenviar procedentes de la red local
iptables -A FORWARD -i $INIF -o $EXIF -j ACCEPT || fail=1
# Aceptar paquetes para reenviar procedentes de internet de conexiones ya establecidas
iptables -A FORWARD -i $EXIF -o $INIF -m state –state RELATED,ESTABLISHED -j ACCEPT || fail=1

##Se redirigen los puertos configurados arriba

for puerto in $puertosTCP
do
iptables -A FORWARD -i $EXIF -o $INIF -p tcp –dport $puerto -j ACCEPT || fail=1
iptables -t nat -A PREROUTING -i $EXIF -p tcp –dport $puerto -j DNAT –to $pc2:$puerto || fail=1
done

for puerto in $puertosUDP
do
iptables -A FORWARD -i $EXIF -o $INIF -p udp –dport $puerto -j ACCEPT || fail=1
iptables -t nat -A PREROUTING -i $EXIF -p udp –dport $puerto -j DNAT –to $pc2:$puerto || fail=1
done

# Se muestran los resultados
log_end_msg $fail

if [ $fail -eq 0 ]
then
log_success_msg “Verifique que lo que se aplica con: iptables -L -n.”
else
log_warning_msg “Se ha producido un error al aplicar alguna de las reglas”
fi

#### FIN SCRIPT DE CONFIGURACION DE IPTABLES ####

3.- Guardamos los cambios y le damos permisos de ejecucion:

$ sudo chmod -v 755 /etc/init.d/iptablesconf
el modo de «iptablesconf» cambia a 0755 (rwxr-xr-x)
Lo ejecutamos:
$ sudo /etc/init.d/iptablesconf
si todo ha ido bien veremos este mensaje:
* Aplicando Reglas de Firewall… [ ok ]
* Verifique la reglas: iptables -L -n.
Ahora utilizamos el siguiente comando para que script se cargue cada vez que arranque el sistema:
$ sudo update-rc.d iptablesconf start 20 2 .
#### ATENCIÓN AL PUNTO DEL FINAL, HAY QUE PONERLO ####
Adding system startup for /etc/init.d/iptablesconf …
/etc/rc2.d/S20iptablesconf -> ../init.d/iptablesconf

4.- Ahora podemos probar si todo funciona, nos vamos a los otros PCs y configuramos la red con ips estaticas (por ej 192.168.0.2 , 192.168.0.3 , etc..) y su correspondiente mascara de subred (255.255.255.0 para el ejemplo) utilizamos como puerta de enlace el pc que comparte la conexión (192.168.0.1 en el ejemplo) y como servidores dns utilizamos los mismos que tenga configurados el pc que da acceso a internet, que podemos verlos utilizando

$ cat /etc/resolv.conf Ahora si todo ha ido bien debería funcionar internet en los otros PCs una vez configurados.

Creado por mober de www.ubuntu-es.org

Compártelo. ¡Gracias!

2 Comentarios
  1. Isaac says:

    Felicito al autor de este material; “Espero que cuando mi nivel llegue al grago de hacer un script poder valor rar el esfuerzo de este bellísimo trabajo” Gracias¡

    PERO TENGO ALGUNAS COSITAS O PROBLEMITAS EN MI CP POR LAS CAULES NO PUEDO DISFRUTAR CON TOTALIDAD ESTE MATERIAL:

    He avanzado bastante con el script : esta copiado en mi sistema, tiene permiso de ejecución pero, hay algunas cosita queno van muy bien , aquí de bajo hay algunos ejemplo de los comandos ejecutado en mi shell:

    $sudo chmod -v 755 /etc/init.d/iptablesconf

    el modo de `/etc/init.d/iptablesconf’ permanece como 0755 (rwxr-xr-x)

    * “Aplicando [ OK ]
    * “Verifique que lo que se aplica con: iptables -L -n.”
    ESTE RESULTADO NO ESTA COMO IDICA EL DOCUMENTO¡

    isaac@isaac-desktop:~$ sudo /etc/init.d/iptablesconf
    * “Aplicando iptables v1.3.6: invalid port/service `”7778”’ specified
    Try `iptables -h’ or ‘iptables –help’ for more information.
    iptables v1.3.6: invalid port/service `”7778”’ specified
    Try `iptables -h’ or ‘iptables –help’ for more information.
    iptables v1.3.6: invalid port/service `”7779”’ specified
    Try `iptables -h’ or ‘iptables –help’ for more information.
    iptables v1.3.6: invalid port/service `”7779”’ specified
    Try `iptables -h’ or ‘iptables –help’ for more information.
    [fail]
    * “Se ha producido un error al aplicar alguna de las reglas”

    COMO PUDIRON OBSERVAR AHÍ DA UN ERROR FATAL.

    ME PARECE QUE ESTE ERROR FUE PROVOCADO POR UNA PARTE OPCIONAL QUE TIEN EL SCRIPT “Lo siguiente es por si queremos redigir cierto puerto a un ordenador de la red” TAMPOCO SE CUAL ES TU ROL ,PERO, TENGO UN PEQUEÑA IDEA LA CUAL PLANEABA DEJAR ESTA PARTE DEL SCRIPT TENIENDO LA FACILIDAD DE ELIMINARLO : AHI AGREGUE LA IP DE LA PC QUE TIEN UNA APLICACION PS2 YA FUE LO QUE PUDE INTERPRETAR COMO LA FUNCIÓN DEL DICHO SEGMENTO.

    –isaac@isaac-desktop:~$ sudo update-rc.d iptablesconf start 20 2 .
    System startup links for /etc/init.d/iptablesconf already exist.

    ESTOS RESULTADOS TAMPOCO SON NORMALES CREO O SEA SEGUN EL DOCUEMNTO SON INCORRECTO, NO?

    gracias de antemano¡

  2. Roberto Cattaneo says:

    No copiar y pegar el script, ya que le cambia algunos caracteres (doble guion por guion largo) en este enlace pueden copiar y pegar tranquilos.
    http://www.ubuntu-es.org/index.php?q=node/10513&page=1

Dejar una respuesta

no se hace responsable de las opiniones de los internautas
Por favor revisa la ortografía y respeta las normas de la web.
XHTML: Puedes utilizar los siguientes tags:
<a href=""> <b> <i> <strong>

Linux Zone © 2007 - 2019