En un post anterior escribimos un tutorial para compartir la conexión a internet mediante Firestarter, ahora quisiera lograr lo mismo pero sin tener que instalar nada, solo con comandos en la consola.
Antes trataré de hacer una introducción para saber de que estamos hablando. Supongamos que tenemos contratada una conexión a internet, tenemos nuestra máquina con Ubuntu (supongo que con cualquier distribución debería funcionar) conectada directamente a internet y queremos darle el servicio a otras máquinas, con caulquier sistema operativo, que deberán conectada en red con esta, para ello necesitamos que nuestro Ubuntu realice las siguientes tareas
- Tenga configuradas dos interfaces, una conectada a internet y otra a la red interna (pueden ser dos interfaces físicas o solo una, con un alias).
- Habilitar NAT.
- Habilitar el ruteo de paquetes.
Luego en los clientes debemos configurar las interfaces de red con los siguiente datos
- Dirección IP y máscara de red.
- Dirección del gateway.
- Dirección servidor DNS.
Procedamos a configurar nuestro gateway de internet (Ubuntu).
- Configuración de las interfaces
Antes que nada, listaremos las interfaces de red en el equipo que hará de gateway.
ifconfig
Nos arrojará algo así
eth0 Link encap:Ethernet direcciónHW 00:08:54:d5:b6:15
dirección inet6: fe80::208:54ff:fed5:b615/64 Alcance:Vínculo
ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:9
colisiones:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Interrupción:18 Dirección base: 0xa000
eth1 Link encap:Ethernet direcciónHW 00:14:85:d1:56:f1
dirección inet6: fe80::214:85ff:fed1:56f1/64 Alcance:Vínculo
ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1
RX packets:213659 errors:0 dropped:0 overruns:0 frame:0
TX packets:86905 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:1000
RX bytes:97185066 (97.1 MB) TX bytes:35852528 (35.8 MB)
Interrupción:20 Dirección base: 0x8000
lo Link encap:Bucle local
inet dirección:127.0.0.1 Máscara:255.0.0.0
dirección inet6: ::1/128 Alcance:Anfitrión
ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1
RX packets:280 errors:0 dropped:0 overruns:0 frame:0
TX packets:280 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:11104 (11.1 KB) TX bytes:11104 (11.1 KB)
ppp0 Link encap:Protocolo punto a punto
inet dirección:201.234.173.139 P-t-P:201.234.173.3 Máscara:255.255.255.255
ARRIBA PUNTO A PUNTO CORRIENDO NOARP MULTICAST MTU:1492 Métrica:1
RX packets:90905 errors:0 dropped:0 overruns:0 frame:0
TX packets:86416 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:3
RX bytes:84076601 (84.0 MB) TX bytes:33574174 (33.5 MB)
En donde eth0, eth1, lo y ppp0 son las interfaces de red, en mi caso ppp0 es la que está conectada a internet y eth1 la que proveería de internet a las demás máquinas (red interna). Puede ser que este no sea el caso de todos, podría darse que eth0 sea la interfaz conectada a internet o eth1, todo dependerá con que tipo de conexión cuentes. Debo aclarar que eth0 y ppp0 es la misma interfaz física (placa de red), mientras que eth1 es otra placa de red. Como ppp0 ya está configurada solo deberemos configurar eth1 asignándole una dirección IP (de la red interna) y una máscara de red, todo eso con el siguiente comando:
sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0
Podemos ver que le hemos asignado la IP 192.168.0.1 con máscara 255.255.255.0, esa dirección deber pertenecer a la red donde estarán conectadas los clientes, de manera que estos deberán tener una dirección del tipo 192.168.0.X (2 < X < 254) con la misma máscara.
Si no contáramos con dos placas de red podemos crear un alias nuestra interfase eth0, eso lo hacemos con en siguiente comando
sudo ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0
Lo haremos con 3 comandos, siempre respetando como hemos configurado nuestras interfaces. Para nuestro caso sería:
sudo iptables -A FORWARD -i ppp0 -o eth1 -s 192.168.0.0/24 -m state –state NEW -j ACCEPT
sudo iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
Lo haremos con un simple comando
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
- Configurando los clientes
Cada cliente deberá ser configurado con una direccion IP perteneciente a la red interna de la forma 192.168.0.X, con gateway (puerta de enlace) 192.168.0.1 y con el servidor DNS que nos proporcione nuestro proovedor. Si no lo sabemos, podemos conocerlo haciendo en la maquina conectada a internet:
cat /etc/resolv.conf
Dicho comando nos arrojará algo así
# Generated by NetworkManager
nameserver 201.234.173.3
nameserver 200.55.20.52
Donde esas dos direcciones son los servidores DNS.
Todos estos comandos deben ser reaplicados cada vez que se reinicie la PC, por eso no estaría de más crear un script como el siguiente que realice todo esto de una sola vez,
#Configuramos interfaz de la red interna
sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0
#Habilitamos NAT
iptables -A FORWARD -i ppp0 -o eth1 -s 192.168.100.0/24 -m state –state NEW -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
#Habilitamos ruteo de paquetes
echo 1 > /proc/sys/net/ipv4/ip_forward
Guardamos como un archivo de texto en nuestro home con el nombre «compartir» y lo ejecutamos de la siguiente manera.
sudo sh compartir
Espero te funcione. Saludos.