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

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.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

algo mas facil me sucedio a mi...

Yo tengo cablemodem en mi casa y mi hermana tiene el interent y me pasa un poco por lan. en windows XP tenia que configurar desde la PC de mi hermana para tener red/internet pero en la instalacion de ubuntu me lo dectecto automaticamente. chevere no? gracias detodos modos mober por el post.

------------------------------
ExDead: Pablo_calderon_piedra@hotmal.com para el MSN

Imagen de ZialdoKA

A mi también

A mi me sucedio lo mismo cosa qeu me alegro enormemente, instalar y que sin hacer nada pues ya estés en Internet. Maravilloso.

Si bien, no me queda claro que aun teniendo esa suerte, es recomendable hacer lo que comentas con los iptables, por mayor seguridad.

compartir internet

Joer to lo que hay que hacer!!! Yo me quité de lios y compre un router, a mi me costo bastante pero ahora te los regalan hasta con la mortadela.

Bueno, si, es cierto

Bueno, si, es cierto que hay formas más fáciles de hacerlo, como han dicho antes con firestarter por ejemplo, pero igual a alguien le interesa aprender algo de iptables y tal, yo hasta hace un par de semanas no sabía nisiquiera lo que era iptables y después de leerme mucha documentacion/howtos/manuales/tutoriales etc.. pues he aprendido a configurarlo bastante a fondo hasta el punto de hacerme el script.
Además muchos preferimos hacer las cosas de esta manera y aprender como funciona internamente el sistema que usar un asistente que te lo hace todo y mágicamente las cosas funcionan si saber como.
Saludos ;D

excelente artículo!

excelente artículo!, me ha resultado tan fácil como el firestarter

casi pero no....

no he seguido exactamente lo que dice esta guia pero viene a cuento.

tengo en casa dos ordenadores con kubuntu 5.10 instalados en los dos.
la cuestion es q kiero q uno de ellos (el mas viejo) comparta la conexion, asi k en el "servidor" he puesto estas reglas:

iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

---
donde ppp0 es la interfaz q esta conectada a internet, (uso in winmodem de mierda) y eth0 es la conexion local, q da salida al otro ordenador.

despues he puesto esto en el cliente:

route add default gw 192.168.0.1

y con eso, el cliente puede hacer ping, y puede visualizar la pagina de google y hacer busquedas. pero cuando trato de entrar en alguna pagina ahi se keda.

pense que seria por las DNS, asi k he probado a poner en los dos la misma q traia el kubuntu y nada, y tb he probado a poner en los dos las que dan en telefonica (ip dinamica) y tp, pasa lo mismo, y por ultimo pues probe una distinta en cada uno (por probar.. kien sabe) y tampoco nada de nada, ahi se keda, en google.

despues de leerme muchos post y manuales me kedo igual.
¿alguna sugerencia?

gracias.

para saber si lo que fallan

para saber si lo que fallan son las dns prueba a hacer un ping a un host y después a su ip, si el ping al host falla y a la ip recibes respuesta es porque falla la dns

$ ping www.cisco.com
$ ping 198.133.219.25

y tampoco estoy seguro pero las dns no son prueba a añadir
iptables -A FORWARD -i eth0 -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

nada aun...

hola mober,

pues parece ser q tienes razon y las dns no son, porque si que funciona hacer ping a cisco.com por ejemplo.

he probado ha poner la regla del iptables que has escrito, y nada, lo mismo, de la pagina de google no pasa, esta tan cerca...

gracias de todos modos.

Casi, casi...

Hola,

Mober muchas gracias por tu ayuda- Es realmente muy claro. El único problema que tengo es que funciona con algunas páginas y con otras no. En la PC cliente no puedo entrar a páginas como www.clarin.com o www.uol.com.ar. La máquina que accede a internet usa Mandriva 2006 y la cliente Windows ME. Desactivé Squid.

¿Alguna idea?

squid.conf

Alguien tendrá por casualidad el squid configurado para una lan, donde el proxy está en la 192.168.0.1, y usa un proxy transparente, limitando el ancho de banda para X maquinas?
No puedo dar en la tecla.
Alguno me podrá pasar su squid.conf por favor?
Desde ya, mil gracias!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.