Creando un router en Debian

Este manual fue actualizado mayo 2 2015 para funcionar en Jessie

Esta es una receta para crear un router en Debian. La idea es sustituir el típico router inalámbrico de casa con una máquina corriendo en Debian, mientras que la función del router inalámbrico cambiaría a la de Access Point/switch para manejar la red interna.

Es necesario que el servidor Debian tenga dos tarjetas de red. Vamos a llamarlas eth0 y eth1, siguiendo la denominación convencional. La interfaz eth0 se conecta a Internet mientras que eth1 se conecta al router inalámbrico (Access Point).

Antes de continuar, debemos ingresar a la interfaz de administración del router inalámbrico y anotar la sub-red que utiliza. Vamos a suponer que es 192.168.1.0/24.

La conexión a Internet es generalmente de tipo Banda Ancha, mediante un cable modem. En este caso, el cable módem se encarga de adquirir un número IP del proveedor a través de DHCP y el servidor Debian simplemente lo agarra como suyo. Edita /etc/network/interfaces y define eth0 como DHCP,

# The primary network interface
auto eth0
       iface eth0 inet dhcp

Conecta eth0 al módem con un cable de red ("twisted pair"), luego reinicia el módem y el computador Debian. Prueba conexiones Internet. El comando,

# ifconfig eth0

debería retornar los parámetros de red asignados.

Alternativa, la conexión a Internet es de tipo ADSL, en cuyo caso se requiere PPPoE. Sigue las instrucciones de la guía http://man-es.debianchile.org/adsl.html

Edita /etc/network/interfaces y define eth1 como una sub-red estática privada,

auto eth1
iface eth1 inet static
       address 192.168.0.1
       netmask 255.255.255.0
       network 192.168.0.0
       broadcast 192.168.0.255

Es muy importante que esta definición no contenga una pasarela (gateway). Es igualmente importante que esta sub-red sea diferente a la sub-red del router inalámbrico, esta siendo 192.168.0.0/24 mientras que la del router inalámbrico 192.168.1.0/24.

Levanta la interfaz eth1 con,

# ifup eth1

'ifconfig eth1' debería retornar los parámetros de red recién asignados.

Conecta eth1 al router inalámbrico con un cable de red ("twisted pair") al mismo puerto que antes estaba conectado a Internet.

Vamos a suponer que el router inalámbrico estaba configurado para adquirir valores de red WAN vía DHCP. Como ahora está conectado al servidor Debian, necesitamos reconfigurarlo en una red estática, con valores,

IP Address :         192.168.0.2
Subnet Mask :        255.255.255.0
Default Gateway :    192.168.0.1
Primary DNS Server : 192.168.0.1

La pasarela (gateway) debe ser el número IP del servidor Debian.

Si no es posible definir una red estática, debido a que el router inalámbrico no permite la opción de red más que con DHCP, es necesario instalar y configurar el servidor DHCP en el servidor Debian. Instala isc-dhcp-server,
# apt-get install isc-dhcp-server

Edita /etc/default/isc-dhcp-server y modifica la variable INTERFACES con,

INTERFACES="eth1"

Edita /etc/dhcp/dhcpd.conf. Descomenta el instructivo "authoritative",

authoritative;

y define una sub-red,

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.2 192.168.0.2;
  option routers 192.168.0.1;
  option ip-forwarding off;
  option broadcast-address 192.168.0.255;
  option subnet-mask 255.255.255.0;
  option domain-name-servers 192.168.0.1;
  default-lease-time 86400;
  max-lease-time 86400;
}

Esta definición va a servir un solo IP; 192.168.0.2. Observa /var/log/syslog en un terminal con,

$ tail -f /var/log/syslog

luego reinicia en otro terminal el servidor DHCP,

# /etc/init.d/isc-dhcp-server restart

Observa en /var/log/syslog como el router inalámbrico automáticamente adquiere un IP,

May 30 20:27:01 debian dhcpd: DHCPDISCOVER from 00:24:b2:28:8e:f7 via eth1
May 30 20:27:01 debian dhcpd: icmp_echorequest 192.168.0.2: Operation not permitted
May 30 20:27:02 debian dhcpd: DHCPOFFER on 192.168.0.2 to 00:24:b2:28:8e:f7 via eth1
May 30 20:27:05 debian dhcpd: DHCPREQUEST for 192.168.0.2 (192.168.0.1) from 00:24:b2:28:8e:f7 via eth1
May 30 20:27:05 debian dhcpd: DHCPACK on 192.168.0.2 to 00:24:b2:28:8e:f7 via eth1

El router inalámbrico tiene dirección Internet 192.168.0.2, pasarela y servidor DNS 192.168.0.1.

Necesitamos instalar y configurar el servidor DNS. Instala bind9,

# apt-get install bind9

Edita el archivo /etc/bind/named.conf.options y modifica el instructivo forwarders con las direcciones IP de los DNS del proveedor de Internet,

        forwarders {
                100.10.0.3;
                100.10.0.7;
        };

Para obtener las direcciones IP del DNS inspecciona el archivo /etc/resolv.conf. Este fue escrito automáticamente con los valores retornados por el servidor DHCP del proveedor.

Ahora edita /etc/resolv.conf para que lea,

nameserver 127.0.0.1

Remueve los instructivos "domain" y "search" si existen y los antiguos forwarders.

Reinicia el servidor DNS,

# /etc/init.d/bind9 restart

para que los cambios tomen efecto.

Esto transforma a localhost en servidor DNS, que vía BIND9 resuelve nombres haciendo requerimientos a los DNS del proveedor. En particular, 192.168.0.1 también es un servidor DNS.

Falta un pequeño detalle. Cada vez que el "lease" del servidor DHCP del proveedor se renueva, este reenvía los valores con que /etc/resolv.conf se reescribe automáticamente. Para evitar esto y de hecho borrar la nueva configuración, remueve la atribución de escritura sobre el archivo,

chattr +i /etc/resolv.conf

Falta redirigir eth1 a eth0 para que la red interna 192.168.1.0/24 del router inalámbrico pueda salir a Internet. Aquí debemos hacer dos cosas: 1) redirigir eth1 a eth0 y 2) reescribir los números IP 192.168.1.x con el número IP público del servidor Debian. Esto se llama enmascarar. Si no se enmascara, los paquetes de red salientes de la red interna tendrian IP 192.168.1.x y serían bloqueados ("IP spoofing").

En Debian, redirigir no es una opción por omisión. Para activarlo hay que modificar el valor de /proc/sys/net/ipv4/ip_forward de 0 a 1.

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

Un,

$ cat /proc/sys/net/ipv4/ip_forward

debería retornar 1.

Falta otro pequeño detalle. Al reiniciar el computador, se reescribe /proc/sys/net/ipv4/ip_forward con el valor por omisión, que es 0, deshabilitando la redirección. Para evitar esto, edita /etc/sysctl.conf y descomenta,

net.ipv4.ip_forward=1

Ahora el valor de /proc/sys/net/ipv4/ip_forward se reescribe a 1.

En este punto puede ser ventajoso entrar a la administración del router inalámbrico, quizás con otro computador de la sub-red 192.168.1.0/24, y activar la administración remota desde la IP 192.168.0.1.

Queda un último detalle. El servidor Debian está conectado directamente a Internet y es aconsejable crearle un cortafuegos. La base de este cortafuegos es el descrito en http://man-es.debianchile.org/cortafuego.html, versión para un servidor, pero con unas pocas modificaciones necesarias, en particular, la existencia de una segunda interfaz de red (eth1), el emascaramiento de la red interna (reescribir las IP internas con la IP publica del servidor) y la posibilidad que la IP no sea fija, son tratadas explicitamente.

Primero, crea el archivo /etc/network/if-pre-up.d/firewall,

#!/bin/sh

# Author: Ricardo Yanez <ricardo.yanez@calel.org>

IPTABLES=/sbin/iptables

if [ ! -x $IPTABLES ]; then
  exit 0
fi

# loopback
LO_IP="127.0.0.0/8"

# red interna
LAN_IP_RANGE="192.168.0.0/24"

if [ "$IFACE" = "lo" ]; then

  $IPTABLES -F
  $IPTABLES -X
  $IPTABLES -t nat -F
  $IPTABLES -t nat -X

  $IPTABLES -P INPUT DROP
  $IPTABLES -P FORWARD DROP
  $IPTABLES -P OUTPUT ACCEPT

  ###############################################
  ############### cadena INPUT ##################
  ###############################################

  # 1) new not in syn
  $IPTABLES -A INPUT -p TCP -m state --state NEW ! --syn -j DROP

  # 2) Aceptar paquetes en estado establecido y relacionado
  $IPTABLES -A INPUT -i $IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

  # 3) loopback
  $IPTABLES -A INPUT -i $IFACE -s $LO_IP -j ACCEPT
  $IPTABLES -A INPUT -i $IFACE -s $LAN_IP_RANGE -j ACCEPT
  $IPTABLES -A INPUT -i $IFACE -j ACCEPT

  # 4) inserta reglas en este punto (ver más adelante)

  ###############################################
  ############## cadena FORWARD #################
  ###############################################

  # (Aquí van reglas si el servidor actua de router)

  ###############################################
  ############## cadena OUTPUT ##################
  ###############################################

  # new not in syn
  $IPTABLES -A OUTPUT -p TCP -m state --state NEW ! --syn -j DROP

  # establecido, relacionado
  $IPTABLES -A OUTPUT -o $IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

  # new
  $IPTABLES -A OUTPUT -o $IFACE -m state --state NEW -j ACCEPT

fi

Dale permisos de ejecución,

# chmod 755 /etc/network/if-pre-up.d/firewall

Luego crea el archivo /etc/network/if-up.d/firewall,

#!/bin/sh

# Author: Ricardo Yanez <ricardo.yanez@calel.org>

IPTABLES=/sbin/iptables

if [ ! -x $IPTABLES ]; then
  exit 0
fi

# interfaz de red externa
INET_IFACE="eth0"

# interfaz de red interna
LAN_IFACE="eth1"
LAN_IP="192.168.0.1"
LAN_IP_RANGE="192.168.0.0/24"

if [ "$IFACE" = "$INET_IFACE" ]; then

  # 5) Definir la cadena "bloquear-spoof"
  $IPTABLES -N bloquear-spoof
  $IPTABLES -A bloquear-spoof -i $IFACE -s 10.0.0.0/8 -j DROP
  $IPTABLES -A bloquear-spoof -i $IFACE -s 172.16.0.0/12 -j DROP
  $IPTABLES -A bloquear-spoof -i $IFACE -s 192.168.0.0/16 -j DROP

  # 6) Cadena "pqtes-icmp-permitidos"
  $IPTABLES -N pqtes-icmp-permitidos
#  $IPTABLES -A pqtes-icmp-permitidos -p ICMP --icmp-type 8 -m limit --limit 1/second --limit-burst 3 -j ACCEPT
  $IPTABLES -A pqtes-icmp-permitidos -p ICMP -j DROP

  # 7) Cadena "pqtes-udp-permitidos"
  $IPTABLES -N pqtes-udp-permitidos
#  $IPTABLES -A pqtes-udp-permitidos -p UDP -m state --state NEW --dport 53 -j ACCEPT
#  $IPTABLES -A pqtes-udp-permitidos -p UDP -m state --state NEW --dport 123 -j ACCEPT
  $IPTABLES -A pqtes-udp-permitidos -p UDP -m state --state NEW -j DROP

  # 8) Cadena "pqtes-tcp-permitidos"
  $IPTABLES -N pqtes-tcp-permitidos
#  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW --dport 25 -j ACCEPT
#  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW --dport 80 -j ACCEPT
#  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW --dport 443 -j ACCEPT
#  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW -m multiport --dports 110,995 -j ACCEPT
#  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW -m multiport --dports 143,993 -j ACCEPT
#  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW --dport 22 -s 100.10.2.0/24 -j ACCEPT
  $IPTABLES -A pqtes-tcp-permitidos -p TCP -m state --state NEW -j DROP

  # 9) Agregar cadenas a INPUT

  ###############################################
  ############### cadena INPUT ##################
  ###############################################

  # establecido, relacionado
  $IPTABLES -A INPUT -i $IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

  $IPTABLES -A INPUT -i $IFACE -j bloquear-spoof
  $IPTABLES -A INPUT -i $IFACE -p ICMP -j pqtes-icmp-permitidos
  $IPTABLES -A INPUT -i $IFACE -p UDP -j pqtes-udp-permitidos
  $IPTABLES -A INPUT -i $IFACE -p TCP -j pqtes-tcp-permitidos

  # 10) Optativo: Registrar paquetes que van a ser desechados
  #$IPTABLES -A INPUT -j LOG --log-level debug --log-prefix "Drop INPUT: "

  ###############################################
  ############## cadena FORWARD #################
  ###############################################

  # (Aquí van reglas si el servidor actua de router)

  ###############################################
  ############## cadena OUTPUT ##################
  ###############################################

  # establecido, relacionado
  $IPTABLES -A OUTPUT -o $IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

fi

if [ "$IFACE" = "$LAN_IFACE" ]; then

  ###############################################
  ############### cadena INPUT ##################
  ###############################################

  # establecido, relacionado
  $IPTABLES -A INPUT -i $IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

  $IPTABLES -A INPUT -i $IFACE -s $LAN_IP_RANGE -j ACCEPT

  ###############################################
  ############## cadena FORWARD #################
  ###############################################

  # established, related
  $IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
  $IPTABLES -A FORWARD -i $LAN_IFACE -o $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

  $IPTABLES -A FORWARD -i $INET_IFACE -o $IFACE -m state --state NEW -j DROP
  $IPTABLES -A FORWARD -i $IFACE -o $INET_IFACE -m state --state NEW -j ACCEPT

  ###############################################
  ############## cadena OUTPUT ##################
  ###############################################

  # establecido, relacionado
  $IPTABLES -A OUTPUT -o $IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

  ###############################################
  ############## cadena NAT #####################
  ###############################################

  INET_IP=`ifconfig $INET_IFACE | egrep "inet addr" | cut -d : -f2 | cut -d\  -f1`

  $IPTABLES -t nat -F POSTROUTING
  $IPTABLES -t nat -F PREROUTING

  # enmascarar
  $IPTABLES -t nat -A POSTROUTING -s $LAN_IP_RANGE -o $INET_IFACE -j SNAT --to-source $INET_IP

fi

Ahora el router inalámbrico rutea la sud-red privada 192.168.1.0/24, cuyo IP "externo" es 192.168.0.2 y el servidor Debian conectado a Internet rutea la red 192.168.0.0/24. Nota el particular que se debe enmascarar en algún punto. Lo mejor es hacerlo cuando se levanta eth1.

La segunda parte de este script protege la redirección en la cadena FORWARD.

Dale al script permisos de ejecución,

# chmod 755 /etc/network/if-up.d/firewall

y carga el cortafuegos en el núcleo,

# export IFACE=lo ; /etc/network/if-pre-up.d/firewall ; export IFACE=eth0 ; /etc/network/if-up.d/firewall ; export IFACE=eth1 ; /etc/network/if-up.d/firewall
Si la IP pública del servidor Debian es dinámica, el proveedor puede renovar el "lease" con una nueva IP cada 24 horas o menos. Para solucionar esto debemos crear un script que se corra cada vez que se levante la red externa en eth0,
#!/bin/sh
#
# masquerade: Script to masquerade an external network connection
#             (modem or ADSL) upon bringing the interface up. Name this
#             script masquerade.sh, put it in /etc/network/if-up.d/ and
#             make it executable (755).
#             Change INET_IFACE and LAN_IP_RANGE to suit your needs.
#             You will need to have packet filtering (iptables) enabled
#             in your kernel and module iptable_nat.

#             This script is intended for Debian systems. May not work on
#             other Linux distributions.

#             Author: Ricardo Yanez <ricardo.yanez@calel.org>, Mon May 30, 2011

# Define external interface
INET_IFACE="eth0"
 
# LAN IP range
LAN_IP_RANGE="192.168.0.0/24"
 
# Get IP number
INET_IP=`ifconfig $INET_IFACE | egrep "inet addr" | cut -d : -f2 | cut -d \  -f1`
# please note the extra space in the last cut, right after \ (very important).
 
# Clear all rules in POSTROUTING chain
iptables -t nat -F POSTROUTING
 
# Masquerade
echo -n "Masquerading interface $INET_IFACE to source $INET_IP... "
iptables -t nat -A POSTROUTING -s $LAN_IP_RANGE -o $INET_IFACE \
         -j SNAT --to-source $INET_IP
echo "done."

Descarga este script (masquerade.sh_.txt) y dale permisos de ejecución,

# chmod 755 masquerade.sh

Corre el script por primera vez,

# ./masquerade.sh
Masquerading interface eth0 to source 100.50.210.134... done.

Ahora muevelo a /etc/network/if-up.d/

# mv masquerade.sh /etc/network/if-up.d/

Las cadenas se pueden observar con,

# iptables -L -v

y la tabla NAT con,

# iptables -t nat -L -v

Manejando el audio USB en Debian

A veces conectamos alguna periferia USB que tiene un chip de sonido, por ejemplo una webcam o auriculares, que luego de un reinicio del computador nos arruina el sonido de la tarjeta primaria conectada a los parlantes.

El motivo de este comportamiento es la secuencia en que los módulos de sonido son cargados en el núcleo. ALSA enumera las tarjetas de acuerdo a ésta secuencia y puede suceder que el dispositivo de sonido USB cargue antes que la tarjeta de sonido primaria, transformándola de hecho en primaria según visto por ALSA.

La manera de solucionar esto es forzando la secuencia mencionada para que la tarjeta de sonido se cargue primero. Edita /etc/modprobe.d/alsa-base, agrega al final del archivo,

options snd_usb_audio index=-1

y reinicia el computador. El parámetro index=-1 fuerza al núcleo a cargar el dispositivo snd_usb_audio al final de la secuencia.

Instalando Squeeze con una memoria USB

Inserta la memoria USB. Corre,

$ df

para determinar la unidad a que está asociada,

Filesystem 1K-blocks Used Available Use% Mounted on
...
/dev/sdb1 3905104 5280 3899824 1% /media/usb_flash

Desmóntala con,

$ sudo umount /dev/sdb1

(eventualmente puede ser necesario re-formatear la memoria con 'sudo mkfs.vfat -I /dev/sdb')

Descarga la imagen de arranque,

$ cd /tmp
$ wget http://ftp.cl.debian.org/debian/dists/squeeze/main/installer-i386/current/images/hd-media/boot.img.gz

Copia la imagen a la memoria desmontada,

$ sudo zcat boot.img.gz > /dev/sdb

Descarga la imagen instalación oficial de Debian, por ejemplo,

$ wget http://cdimage.debian.org/debian-cd/6.0.1a/i386/iso-cd/debian-6.0.1a-i386-netinst.iso

o cualquier otra imagen de instalación.

Monta la memoria,

$ sudo mount /dev/sdb1 /mnt

copia la imagen de instalación,

$ sudo cp debian-6.0.1a-i386-netinst.iso /mnt/

y desmonta la memoria nuevamente.

$ sudo umount /dev/sdb1

La memoria está lista para ser usada en cualquier computador que permita arrancar por USB.

VirtualBox 4.0 para Debian

VirtualBox 4.0 puede ser descargado con APT desde el repositorio de VirtualBox [1]. El repositorio sufrió un pequeño gran cambio recientemente, lo que ha dificultado la actualización de la versión 3.2 a la 4.0. El cambio es de sección, antes non-free, ahora contrib. Modifica /etc/apt/sources.list para que lea,

deb http://download.virtualbox.org/virtualbox/debian squeeze contrib

Actualiza con 'sudo apt-get update' e instala con 'sudo apt-get install virtualbox-4.0'.

Recuerda, VirtualBox no es libre. El cambio de sección no tiene relación alguna con Debian, ni sus
directrices de software libre [2].

Soporte para USB 2.0 y otros se instalan ahora con el "Extension Pack". Descárgargalo de http://www.virtualbox.org/wiki/Downloads y luego instálalo yendo a las preferencias del programa principal, luego a "Extensions" y agregando el paquete de extensión descargado.

[1] http://www.virtualbox.org/
[2] http://www.debian.org/social_contract.es.html#guidelines

Primera réplica de Debian Security en América del Sur

América del Sur cuenta con su primera réplica de Debian Security, fue anunciado hoy. Con esto, los usuarios de América de Sur mejorarán considerablemente su accesibilidad a actualizaciones de seguridad. La nueva réplica es auspiciada por el Centro de Computación Científica y Software Libre [1] del Departamento de Informática de la Universidad Federal de Paraná, Brasil. La réplica es también parte del proyecto CDN [2] de Debian (GeoDNS).

[1] http://www.c3sl.ufpr.br/
[2] http://www.debianchile.org/node/183

Squeeze se libera este fin de semana

Fue anunciado que Squeeze 6.0 será liberado este fin de semana, días 5 o 6 de febrero 2011.

Debian Volatile descontinuado a partir de squeeze

Debian Volatile será descontinuado a partir de la publicación de Squeeze 6.0, siendo reemplazada por una nueva rama, llamada squeeze-updates, dentro de la distribución oficial. Los paquetes de actualización urgente se distribuirán a través de las réplicas oficiales, mientras que actualizaciones de seguridad se distribuirán a través de Debian Security.

Para usar la nueva rama del otrora Debian Volatile, la siguiente línea debe ser agregada a /etc/apt/sources.list,

deb http://ftp.cl.debian.org/debian squeeze-updates main

Esta modificación debe hacerse solo después que Squeeze pase a estable.

Debian Squeeze con un núcleo completamente libre

El firmware no libre ha sido completamente removido del núcleo de Linux que próximamente será liberado en la versión 6.0 Squeeze. Esto constituye un gran logro, pues es algo que no pudo lograrse en las liberaciones de las previas versiones Etch y Lenny, cuando Debian se vió obligado a aceptar ciertos bits no libres, contrariando en parte las directrices de software libre de Debian (DFSG).

El contrato social de Debian reconoce que algunos usuarios pueden necesitar software que no es compatible con DFSG para usar el sistema a plenitud. Por eso, han sido creadas imágenes que incluyen firmware no libre como alternativa para aquellas instalaciones que requieren habilitar hardware específico (ver Nuevas imágenes de instalación "netinst" con firmware non-free). Cuando el firmware no libre no es crítico para la instalación, este puede ser instalado posteriormente con el paquete firmware-linux-nonfree.

Aceleración 3D con ATI Radeon HD 4550

La tarjeta de video PCIE con el chip ATI Radeon HD 4550, 1 GB, funciona en Debian con aceleración 3D en Squeeze 6.0 con el dispositivo no libre de ATI fglrx (ver http://wiki.debianchile.org/fglrx). El dispositivo libre de XOrg para tarjetas ATI Radeon lamentablemente no soporta aceleración 3D en esta tarjeta. La aceleración obtenida es muy buena; alrededor de 5800 fps en una pantalla de 1920x1080 pixels,

$ glxgears & sleep 30 ; killall glxgears
29015 frames in 5.0 seconds = 5802.901 FPS
29195 frames in 5.0 seconds = 5838.977 FPS
29163 frames in 5.0 seconds = 5832.410 FPS
29208 frames in 5.0 seconds = 5841.436 FPS
29204 frames in 5.0 seconds = 5840.578 FPS

Es por ende una muy buena opción para Linux en general y Debian Squeeze 6.0 en particular.

La nueva geo-réplica de Debian (CDN)

El proyecto japonés lanzado en 2007 está ideado para proporcionar una réplica Debian de uso global. Primero determina la localidad nacional mediante una consulta DNS, luego retorna el número IP de una réplica Debian nacional o continental usando un Round-Robin balanceado. Si una réplica se encuentra sincronizando, CDN la esconde momentáneamente. También chequea la estampa de tiempo de cada réplica para determinar si está actualizada o no. CDN presenta la mejor alternativa de acuerdo a estos criterios.

El modo de uso de la réplica global es muy familiar; substituye en /etc/apt/sources.list el URL de la réplica nacional o local del componente Main por http://cdn.debian.net/debian/,

deb http://cdn.debian.net/debian/ stable main contrib non-free
deb-src http://cdn.debian.net/debian/ stable main contrib non-free

Como ya es costumbre, otras opciones que pueden reemplazar a "stable" son "lenny", "squeeze", "sid", "testing" o "unstable". Esta configuración de APT es global, funciona en cualquier país, región o continente. Es particularmente útil para computadores portátiles y para computadores en general en aquellos países donde la rotación, aparición y perdida de réplicas es frecuente o aquellos países que no tienen réplica nacional o tienen muy pocas (básicamente la mayoría de los países a excepción de los industrializados).

Una alternativa es especificar la arquitectura, substituyendo el URL por http://<arch>-geomirror.debian.net/, por ejemplo,

http://amd64-geomirror.debian.net/debian/

Esto es particularmente útil para aquellos que usan arquitecturas que pocas réplicas mantienen.

Una simple consulta DNS entrega información del Round-Robin nacional,

$ nslookup cdn.debian.net

En Chile tenemos una réplica en la lista de servidores CDN,

$ nslookup cdn.debian.net
...
Non-authoritative answer:
cdn.debian.net canonical name = deb.cdn.araki.net.
Name: deb.cdn.araki.net
Address: 200.75.30.181

Si ftp.cl.debian.org (200.75.30.181) está momentáneamente inhabilitado, el Round-Robin retorna la réplica continental más cercana, ftp.br.debian.org, y si falla pasa a la réplica oficial japonesa, ftp.jp.debian.org, la última instancia.