Archive for April, 2010

Compartir Internet de tu Linux a otros PC

Hoy les tengo una receta que es archi-conocida, pero que es fácil de olvidar y nunca está demás tenerla en un blog cercano.

La idea es compartir el internet de tu computador (con linux) a otro (con Windows, Linux, Mac, BSD, etc.), con la técnica del NATeo, que viene del término NAT (Network Address Translation).

Bueno, he hecho un pequeño script que hará la tarea más fácil, basta con copiar el siguiente texto a un archivo (por ejemplo: nat.sh)

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

if [ "$#" -ne 2 ]
then
  echo "usage: $0 [internal iface] [external iface]";
fi

if [ "$#" -eq 2 ]
then
  ifconfig $1 192.168.21.1

  iptables -t nat -A POSTROUTING -o $2 -j MASQUERADE
  iptables -A FORWARD -i $2 -o $1 -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A FORWARD -i $1 -o $2 -j ACCEPT
fi

Luego, le das permisos de ejecución:

chmod +x nat.sh

Para ejecutarlo, en el caso de que tengas internet vía Wi-Fi (interfaz wlan0) y quieras compartirlo por cable (interfaz eth0) ejecutas lo siguiente:

./nat.sh eth0 wlan0

Otra cosa importante es que la interfaz que está conectada al otro computador (en este caso, eth0) tenga configurada una IP y máscara de subred, y que el otro computador tenga configurada una IP en el mismo segmento y el gateway sea la IP de tu interfaz eth0.

¿Muy complicado?  Ejemplo:

En el PC que tiene internet configuro la interfaz eth0:

ifconfig eth0 192.168.30.1 netmask 255.255.255.0

En el PC que va a usar el internet compartido, seteas una IP similar, estableces el gateway y configuras el resolv.conf, en este caso con el DNS server de Google:

ifconfig eth0 192.168.30.2 netmask 255.255.255.0
route add default gw 192.168.30.1
echo "nameserver 8.8.8.8" > /etc/resolv.conf

En Windows y Mac es básicamente similar, sólo que con el ratón, los datos que utilizarías son:

IP: 192.168.30.2
Máscara de Subred: 255.255.255.0
Puerta de Enlace: 192.168.30.1
Servidor DNS Primario: 8.8.8.8

Y debería funcionar… ahora puedes compartir el internet que agarras del vecino tu internet con tu familia!

Friday, April 23rd, 2010 How-To's, Linux, Macintosh, Networking, Windows 1 Comment

Disponibilidad de dominios .CL en Perl

Hace tiempo que no escribo algún artículo, al parecer Twitter es más fácil para redactar ideas a la rápida.

Hoy quería registrar un dominio en NIC Chile, y me di cuenta que está por vencer, de hecho en un mes aproximadamente debería estar libre. Pero en realidad lo mas probable es que me olvide y no alcance a registrarlo cuando quede libre y otra persona me lo “gane”.

Por ésto es que decidí hacer un pequeño script que me ayudara a chequear de forma diaria (gracias a cron) si el dominio está disponible. La idea es que me envíe un e-mail una vez el susodicho esté libre, pero esa parte aún no la hago y tampoco es la idea hacerlo junto, o sea, unix style ;).

El script en cuestión lo publico a continuación, bajo la licencia GPLv3, que puedes encontrar en http://www.gnu.org/licenses/gpl.html. Si quieres hacer uso comercial, contacta conmigo 😉

#!/usr/bin/perl
#
# Check if .CL domain is available or not.
# Author: Jaime Oyarzun K. joyarzun {at} inf dot utfsm dot cl
# Date: 20100418
# License: GPLv3
#
# usage: ./whoisCL.pl [.cl]
#
# Output:
# 0 when domain is not available
# 1 when domain is available
#
# Crashes if connection cannot be established or no argument is given.
#

use IO::Socket;

$sock = new IO::Socket::INET (
  PeerAddr => 'whois.nic.cl',
  PeerPort => 43,
  Proto => 'tcp',
) or die "Connection error!";

if ($#ARGV<0) {
  die "Requires one argument: "
};

$domain = $ARGV[0];

print $sock "$domain\n";

$exists = 1;

while ($line = <$sock>) {
  chomp($line);
  if ($line =~ m/no existe/) {
    $exists = 0;
    print "1\n";
  }
}

if ($exists) {
  print "0\n";
}

close($sock);

Espero que a alguien le sirva, quedo atento a los comentarios. Saludos!

Mito.

Saturday, April 17th, 2010 How-To's, Internet, Linux 4 Comments