code:
<<<------------------------------ NAT: El router redirige puertos solo en este sentido. <<<------------------------------
[PC_A]----| [Router]----(inet) [PC_B]----| ^ ^ | | | Router: LAN_IP = 192.168.2.1 | WAN_IP = 1.2.3.4 PC A = 192.168.2.2 PC B = 192.168.2.3
El fallo habitual es pensar "esto lo arreglo yo con NAT", cosa
que NO funcionará:
NAT es el acrónimo de Network Address Translation:
traducción de direcciones. Esto es, adapta las peticiones
entrantes desde la interfaz WAN al plan de direccionamiento de
nuestra LAN. Por lo tanto, no afecta en absoluto a peticiones de
conexión que tengan su origen en la LAN.
Otro error muy común: "bueno, pues tocando otra cosilla del
router seguro que tira bien". Tampoco vale.
Vamos a ver como solucionar esto. Las soluciones se muestran en
orden de complejidad. Que cada uno decida cual se ajusta mejor a
sus necesidades.
2. Solución #1: usando un Proxy
El problema es que, tal y como está nuestra red, solo funcionan
las peticiones al servidor desde el exterior... entonces
accedamos desde fuera, mediante un proxy.
Lo primero es buscar uno que funcione. Ver los siguientes
enlaces:
1- Public Proxy Servers
2- Proxy4Free
3- Antiproxy.Proxy search
Y configurarlo como proxy en nuestro navegador, cliente FTP...
Esto hará que el esquema de conexión sea:
code:
[PC]----------->[Router]-------->| [Proxy] [Server]<-------[Router]<--------|
Todas las peticiones se envían al proxy, y es este el que se
conecta al extremo final. Por lo que el router ahora sí
que realizará NAT correctamente hacia nuestro servidor local.
Si nos paramos a pensar un poco, esto es muy ineficiente:
- Estamos consumiendo ancho de banda de nuestra línea ADSL para
una página que está alojada en nuestra red local.
- Además es más lento (mucho más lento), menos seguro (salvo que
usemos la versión cifrada de http,
https) y, si nuestra red es grande, un auténtico engorro
para configurarlo en cada equipo.
3. Un nivel más de abstracción: registro DNS
Las siguiente soluciones requieren que tengamos registrado un
dominio o nombre DNS. Esto cuesta dinero pero podemos hacer un
apaño mediante DDNS, registrandonos de manera gratuita en
DynDNS,No-IP,freedns,...
Se requerirá que instalemos un
software cliente en nuestro equipo que informe al servidor
DDNS de nuestra nueva IP pública cada vez que cambie.
La mayor diferencia entre un auténtico dominio registrado (midominio.com)
y uno DDNS (usuario.dyndns.org) es que , mientras que con
nuestro dominio podemos hacer consultas del tipo:
dominio -> IP (resolución típica del nombre)
IP -> dominio (reverse)
con DDNS, en principio, solo podremos hacer:
nombre -> IP.
4. Solución #2: Archivo HOSTS
Una vez hecho lo anterior, editamos el archivo :
%windir%\system32\drivers\etc\HOSTS
añadiendo la siguiente entrada:
code:
ip_local_servidor dominio
P.ej, servidor local en 192.168.2.2, dominio registrado
usuario.dyndns.org Añadimos:
code:
192.168.2.2 usuario.dyndns.org
Idem. para linux y /etc/hosts
code:
/* BIND9 main configuration file with master zone statements: named.conf */
options { directory "c:\winnt\system32\dns\etc"; recursion yes; allow-recursion {192.168.2.0/24;}; forward only; forwarders {IP_DNS_Primario; IP_DNS_secundario;}; allow-transfer {IP_DNS_Primario; IP_DNS_secundario;}; version ""; auth-nxdomain no; # conform to RFC1035 };
logging { channel my_file {file "c:\winnt\system32\dns\etc\named.run"; severity debug; print-time yes; }; category default {my_file;}; category panic {my_file;}; category packet {my_file;}; category eventlib {my_file;}; category queries {my_file;}; category lame-servers { null;}; category cname { null;}; };
view "internal" { match-clients { 192.168.2.0/24; 127.0.0.0/24; }; # Specify the root name servers zone "." IN { type hint; file "named.ca"; };
zone "midominio.dyndns.org" { type master; file "c:\winnt\system32\dns\etc\db.midominio.com.internal"; }; # Reverse IP mapping for 127.0.0.x zone "0.0.127.in-addr.arpa" { type master; file "c:\winnt\system32\dns\etc\127.0.0.rev"; }; # Reverse IP mapping for 192.168.2.x. # Poner aquí los 3 primeros números de nuestro IP en orden inverso. zone "2.168.192.in-addr.arpa" { type master; file "c:\winnt\system32\dns\etc\192.168.2.rev"; }; };
view "external" { match-clients {none;}; recursion no;
zone "midominio.dyndns.org" { type master; file "c:\winnt\system32\dns\etc\db.midominio.com.external"; allow-transfer {none;}; }; };
key "rndc-key" { algorithm hmac-md5; secret "VER_FICHERO_RNDC.CONF"; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; };
5.2.2 Vista interna: db.midominio.com.internal
- Serial es un identificador de versión, con formato
año[4]-mes[2]-dia[2]-[#numero de cambio] (dato anecdótico).
Así el cambio número 2 efectuado el 13/5/2003 tendría como
serial 2003051302.
- OJO: Cambia la IP privada por la IP local donde se aloje
nuestro servidor, y el nombre de dominio.
code:
$TTL 86400 @ IN SOA midominio.dyndns.org. admin.midominio.dyndns.org. ( 2004071100 ; Serial 604800 ; Refresh /* refresh every 1 week */ 86400 ; Retry /* retry refresh every 1 day */ 2419200 ; Expire /* expire after 4 weeks */ 604800 ) ; Negative Cache TTL ; @ IN NS midominio.dyndns.org.
midominio.dyndns.org. A 192.168.2.2
5.2.3 Vista externa: db.midominio.com.external
Esto con DDNS en realidad no es necesario, ya que hay programas
para DDNS que actualizan nuestra IP pública automáticamente en
los servidores DNS. Se incluye para el caso de que alquien
quiera usar esto con dominios registrados (€€€) tipo
midominio.com y demás.
Caso de que queramos utilizarlo (para DDNS no desde luego, útil
para dominios tipo midominio.com), NAT en el router del puerto
53 TCP/UDP hacia la IP donde se ejecute BIND.
code:
$TTL 86400 @ IN SOA midominio.dyndns.org. admin.midominio.dyndns.org. ( 2004071100 ; Serial 604800 ; Refresh /* refresh every 1 week */ 86400 ; Retry /* retry refresh every 1 day */ 2419200 ; Expire /* expire after 4 weeks */ 604800 ) ; Negative Cache TTL ; Configuración ante peticiones externas ; ... ; ...
5.2.4 Root servers: named.ca
code:
; DNS primario ; . 3600000 NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A IP_DNS_Primario ; DNS secundario ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A IP_DNS_Secundario
5.2.5 Reverse IP: 127.0.0.rev
code:
$TTL 86400 $ORIGIN 0.0.127.IN-ADDR.ARPA. @ SOA DNS-authoritative1.domain.com. DNS-admin.domain.com. ( 2004071100 ; zone serial number in ccyymmddxx format 3600 ; slave polls master for SOA/serial number 1800 ; slave re-polls unreachable master 864000 ; slave expires zone after master unreachable 3600 ; TTL for negative answers ) ;nameservers @ NS DNS-authoritative1.domain.com. @ NS DNS-authoritative2.domain.com. ; 1 PTR localhost.
5.2.5 Reverse IP: 192.168.2.rev
Suponemos que BIND se ejecuta en 192.168.2.2: ponemos 2 PTR
code:
$TTL 86400 $ORIGIN 2.168.192.IN-ADDR.ARPA. @ SOA DNS-authoritative1.domain.com. DNS-admin.domain.com. ( 2001060101 ; zone serial number in ccyymmddxx format 3600 ; slave polls master for SOA/serial number 1800 ; slave re-polls unreachable master 864000 ; slave expires zone after master unreachable 3600 ; TTL for negative answers ) ;nameservers @ NS DNS-authoritative1.domain.com. @ NS DNS-authoritative2.domain.com. ; 2 PTR
5.3 Usando BIND
Vamos a comprobar que todo funciona bien:
- Arrancamos BIND manualmente mediante:
named -g
- Configuramos en algún equipo de la red (puede ser donde se
ejecuta BIND) la IP privada del Pc donde está BIND como servidor
DNS primario y secundario.
- Ejecutamos:
nslookup midominio.dyndns.org
ping midominio.dyndns.org
¿Se resuelven a la IP privada? ¡ Enhorabuena !
Puedes arrancar BIND como servicio de sistema en Panel de
control -> Herramientas Administrativas -> Servicios -> ISC Bind
: tipo de inicio = automático.
En caso negativo... a revisar los ficheros de configuración, ojo
con los ; y cosas así.
5.4 Ventajas e inconvenientes
Las ventajas están claras, tenemos un sistema mucho más sencillo
de mantener y administrar que los anteriores ya que todo se
realiza de forma centralizada. La escalabilidad de la red
también ha mejorado sensiblemente, si un nuevo equipo se
incorpora solo hay que configurarle nuestro servidor DNS.
Las desventajas son las asociadas a cualquier servidor proxy:
- Puede suponer un cuello de botella para el tráfico de nuestra
red
- Como todo sistema centralizado, es poco robusto ante fallos:
si el servidor donde está BIND falla, toda la red se queda sin
acceso (sin poder resolver nombres al menos). Podemos mitigar
esto configurando en los equipos de la red IP_BIND como DNS
primario , y otro cualquiera como DNS secundario.
6. ¿Que solución utilizo?
Pues depende de lo que necesitemos:
- La solución #1 (proxy externo) sería recomendable para pruebas
de accesibilidad externa, pero no para nada de carácter
permanente.
- La #2 (fichero HOSTS), es adecuada para redes pequeñas (la
típica que podemos tener en nuestra casa,hasta unos 5 equipos),
en las que tampoco nos merece la pena instalar un servidor
extra.
- La #3 (bind), sería la más ajustada a redes "grandes" (un
cibercafe, aula de informática)
- Para redes mucho más grandes, soluciones mediante HW
específico dedicado (un BUEN router CISCO catalyst).
7. Últimos comentarios:
Este hilo queda abierto para resolver problemas con BIND... y
poco más. No para consultas de otros servidores, servicios,
protocolos ni nada por el estilo.
Y eso es todo. Un saludo.
Documento elaborado por MetalHead para www.adslayuda.com