Anda di halaman 1dari 26

Configuracin de la red en Debian GNU/Linux Vamos a ver cmo configurar las interfaces/tarjetas de red en sistemas Debian GNU/Linux a travs

del fichero interfaces. Normalmente, los equipos de los usuarios (hosts) se configuran de forma dinmica a travs de algn programa de interfaz grfica, y los servidores, al necesitar de IP fijas y configuraciones ms especficas, se suelen configurar de forma esttica desde la consola. Deteccin de las tarjetas de red Antes de configurar las tarjetas de red, stas deben haber sido detectadas por el kernel y haberse cargado correctamente los mdulos correspondientes para su manejo. Podemos consultar con el comando dmesg, los mensajes que el kernel mostr al arrancar el sistema, pero como slo nos interesa los relacionados con las tarjetas de red, en este caso de tipo ethernet, filtramos slo las lneas que contenga el texto eth: # dmesg | grep eth [ 1.703665] e1000 0000:00:03.0: eth0: (PCI:33MHz:32-bit) 08:00:27:93:ff:13 [ 1.703671] e1000 0000:00:03.0: eth0: Intel(R) PRO/1000 Network Connection [ 11.684947] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [ 11.686082] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 11.686101] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 22.208445] eth0: no IPv6 routers present [19228.344206] e1000: eth0 NIC Link is Down [19234.356477] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [29238.719257] ADDRCONF(NETDEV_UP): eth0: link is not ready [29238.721456] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX [29238.721839] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [29249.568108] eth0: no IPv6 routers present Como podemos observar, no hay ningn tipo de error, por lo que el kernel detecta correctamente a las tarjetas de red, en este caso, slo hay una, eth0. Podemos comprobar con el comando lsmod, que el mdulo del kernel que maneja a la tarjeta (e1000) est cargado. Este comando muestra todos los mdulos cargados por el kernel, si conocemos el nombre del mdulo podramos hacer un filtro como en el comando anterior: # lsmod Module Size Used by vboxsf 32542 1 bnep 17288 2 libata 125014 4 libahci,ahci,ata_piix,ata_generic scsi_mod 135037 4 libata,sd_mod,sr_mod,sg e1000 80417 0 usb_common 12338 1 usbcore Anexo: Los mensajes que el kernel va generando en el arranque del sistema, se guardan en el fichero /var/log/dmesg, y el comando dmesg muestra el contenido de este fichero. Algunas opciones de este comando son las siguientes: Comando dmesg --help dmesg -h dmesg -C dmesg --clear dmesg -k dmesg -f kern dmesg -f lista dmesg -l lista pg. 1 Significado Muestra una breve ayuda, con las opciones del comando y los valores posibles que pueden llevar algunas de ellas. Borrar todos los mensajes del buffer de memoria, los mensajes siguen estando en el fichero /var/log/dmesg. Restringe la salida a los mensaje slo del kernel Restringe la salida a los tipos especificados. (dmesg -f kern,daemon) Restringe la salida a los niveles especificados (dmesg -l err,warn)

Configuracin desde el escritorio GNOME Los equipos de los clientes (hosts), se configurarn de forma dinmica a travs del servicio DHCP. Esta configuracin se realizar a travs del software denominado Network Manager, el cual necesita de la instalacin de los paquetes: network-manager network-manager-gnome

Desde el script /etc/init.d/network-manager puede controlarse este proceso: # /etc/init.d/network-manager Usage: /etc/init.d/network-manager {start|stop|restart|force-reload|status} # /etc/init.d/network-manager status [ ok ] NetworkManager is running.

Hay que tener en cuenta que si deseamos hacer una configuracin de la red como en los servidores, a travs del fichero /etc/network/interfaces, se producirn problemas si no desinstalamos los dos paquetes anteriores, la configuracin de la red slo puede hacerse de una de las dos formas. Para que Network Manager pueda configurar una tarjeta de red no puede haber ninguna lnea que haga referencia a ella en el fichero /etc/network/interfaces. Si las hubiera, se deben comentar o eliminar y a continuacin reiniciar el demonio: $ /etc/init.d/network-manager restart Configuracin a bajo nivel Es posible hacer una configuracin de la red con los comandos ifconfig, route e ip, es lo que se denomina configuracin a bajo nivel, pero esta configuracin no se mantiene al reiniciar el sistema. Los comandos ifconfig y route (paquete net-tools) estn hoy en da en desuso y han sido sustituidos por el uso del comando ip (paquete iproute). Usaremos estos comandos para obtener informacin de la red y no para configurarla. Para ver la configuracin de las interfaces de red activas, ejecutamos: # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe28:42d2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2933 errors:0 dropped:0 overruns:0 frame:0 TX packets:837 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:657635 (642.2 KiB) TX bytes:126005 (123.0 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:215 errors:0 dropped:0 overruns:0 frame:0 TX packets:215 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:14304 (13.9 KiB) TX bytes:14304 (13.9 KiB)

pg. 2

Se podran ver todas las interfaces de red que tiene el sistema, tanto las activas (llevan la palabra UP) como las desactivas (no llevan la palabra UP), para lo cual, ejecutamos: # ifconfig -a eth0 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe28:42d2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:44 errors:0 dropped:0 overruns:0 frame:0 TX packets:83 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:13149 (12.8 KiB) TX bytes:10400 (10.1 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:37:d8:06 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:720 (720.0 B) TX bytes:720 (720.0 B)

lo

Podemos ver una estadstica de la informacin enviada y recibida por las interfaces activas: # ifconfig -s Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR eth0 1500 0 53 0 00 83 0 0 lo 16436 0 12 0 00 12 0 0 # ifconfig -a -s Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR eth0 1500 0 55 0 00 85 0 0 eth1 1500 0 0 0 00 0 0 0 lo 16436 0 12 0 00 12 0 0 Podemos ver los datos de una interfaz concreta: # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe28:42d2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:62 errors:0 dropped:0 overruns:0 frame:0 TX packets:85 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:16187 (15.8 KiB) TX bytes:10582 (10.3 KiB) # ifconfig eth1 eth1 Link encap:Ethernet HWaddr 08:00:27:37:d8:06 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

TX-OK TX-ERR TX-DRP TX-OVR Flg 0 BMRU 0 LRU TX-OK TX-ERR TX-DRP TX-OVR Flg 0 BMRU 0 BM 0 LRU

pg. 3

Para mostrar la tabla arp usamos el comando arp: # arp Address HWtype HWaddress Flags Mask 192.168.1.1 ether 38:72:c0:b5:1f:23 C # arp -a ? (192.168.1.1) at 38:72:c0:b5:1f:23 [ether] on eth0

Iface eth0

Para mostrar las tablas de enrutamiento usamos el comando route: # route -n Kernel IP routing table Destination Gateway 0.0.0.0 192.168.1.1 192.168.1.0 0.0.0.0

Genmask Flags Metric Ref Use Iface 0.0.0.0 UG 0 0 0 eth0 255.255.255.0 U 0 0 0 eth0

La opcin -n hace que se muestren todos los datos de forma numrica y no se intente hacer traduccin de IP a nombre, con lo que funciona ms rpido que obviando la opcin. Tambin se puede utilizar la orden ip para obtener la informacin de la red. As, para ver la lista de tarjetas que hay instaladas en el sistema, con su direccin MAC y si estn activas o no, ejecutamos: # ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 08:00:27:28:42:d2 brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether 08:00:27:37:d8:06 brd ff:ff:ff:ff:ff:ff El parmetro show puede suprimirse, en la orden anterior y en las sucesivas, se asume por defecto. Para ver las direcciones IP de las tarjetas: # ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:28:42:d2 brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0 inet6 fe80::a00:27ff:fe28:42d2/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 08:00:27:37:d8:06 brd ff:ff:ff:ff:ff:ff Para ver la tabla arp: # ip neighbour show 192.168.1.1 dev eth0 lladdr 38:72:c0:b5:1f:23 REACHABLE Para ver la tabla de enrutamiento: # ip route show default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 pg. 4

El demonio de la red El demonio de la red se gestiona desde el script /etc/init.d/networking: # /etc/init.d/networking Usage: /etc/init.d/networking {start|stop|reload|restart|force-reload} Es posible reiniciar toda la configuracin de la red parando ste demonio y ponindolo en marcha: # /etc/init.d/networking stop [ ok ] Deconfiguring network interfaces...done. # /etc/init.d/networking start [ ok ] Configuring network interfaces...done. Con el comando service podemos hacer lo mismo, evitando recordar el directorio donde se encuentra el servicio, que puede variar entre distribuciones: # service networking Usage: /etc/init.d/networking {start|stop|reload|restart|force-reload} # service networking stop [ ok ] Deconfiguring network interfaces...done. # service networking start [ ok ] Configuring network interfaces...done. El nombre fsico de las tarjetas de red El sistema asigna por defecto unos nombres nicos a las tarjetas de red. Las tarjetas ethernet suelen denominarse eth0, eth1, etc., las tarjetas wifi reciben el nombre de wlan0, wlan1, etc. A estos nombres se les denomina "nombres fsicos de la tarjeta de red", y se encuentran en el fichero /etc/udev/rules.d/70-persistent-net.rules, desde el cual se pueden cambiar si quisiramos. El formato de este fichero exige que cada interfaz de red est definida en una sola lnea y que las direcciones MAC estn en minscula. Es habitual manipular el fichero anterior cuando una tarjeta de red se estropea y la sustituimos por otra. La nueva tarjeta, al tener una MAC diferente, recibe un nombre fsico distinto a la estropeada, por lo que tenemos dos opciones, o modificamos la configuracin de la red para adaptarla al nuevo nombre de la tarjeta o cambiamos el nombre fsico de la nueva tarjeta, para que se llame como la antigua. Un ejemplo de contenido del fichero /etc/udev/rules.d/70-persistent-net.rules es el siguiente: # cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:/sys/devices/pci0000:00/0000:00:08.0 (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:37:d8:06", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" # PCI device 0x8086:/sys/devices/pci0000:00/0000:00:09.0 (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:af:b5:31", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2" # PCI device 0x8086:/sys/devices/pci0000:00/0000:00:03.0 (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:28:42:d2", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" Cuando este fichero no existe, los nombres fsicos de las tarjetas se asignan al azar y puede que entre distintos arranques del sistema los nombre varen, haciendo que la tarjeta que antes era la eth0 ahora sea la eth2, por ejemplo, y acarreando los consecuentes problemas en la configuracin de la red. pg. 5

En Debian, el script /lib/udev/write_net_rules (se ejecuta al arrancar el sistema) es el que genera el fichero /etc/udev/rules.d/70persistent-net.rules siguiendo las reglas indicadas en el fichero /lib/udev/rules.d/75-persistent-net-generator.rules. Este ltimo fichero, suele llevar una regla que evita que el 70-persistent-net.rules se cree cuando Debian se virtualiza, concretamente, cuando se virtualiza con VirtualBox, esta regla es: ENV{MATCHADDR}=="08:00:27:*", ENV{MATCHADDR}=""

que como se ve, lleva el nmero que VirtualBox pone en sus tarjetas de red en la parte del fabricante de la direccin MAC. Simplemente comentando esta lnea, y reiniciando el sistema, el fichero 70-persistent-net.rules se generar. # ENV{MATCHADDR}=="08:00:27:*", /etc/network/interfaces El fichero /etc/network/interfaces se utiliza para definir los nombres lgicos de interfaces de redes, a los que se le asociar una configuracin determinada. El comando ifup es el encargado de relacionar una interfaz fsica con una interfaz lgica. El contenido de este fichero est formado por lneas de diferentes tipos: Lneas auto: sirven para especificar las interfaces fsicas que se activarn cuando se ejecute el comando ifup -a, el cual se ejecuta automticamente al arrancar el sistema, por lo que especifica las tarjetas que automticamente se activarn desde el inicio. Se pueden poner todas las lneas de este tipo que se deseen y en cada lnea pueden ir ms de una tarjeta fsica, simplemente separndolas con un espacio. auto eth0 eth2 eth3 auto eth1 ENV{MATCHADDR}=""

En las lneas anteriores la interfaz fsica eth0 se asocia con configuracin de la interfaz lgica eth0, la eth1 con la eth1, etc. Lneas allow-auto: son equivalentes a las lneas auto. Lneas allow-hotplug: son parecidas a las lneas auto. Las interfaces fsicas que aparecen en estas lneas se activan cuando se producen eventos hotplug en las intefaces de red, como la deteccin de la tarjeta por parte del kernel, la conexin del cable de red, etc. Cuando se producen estos eventos, el sistema ejecuta el comando ifup asociado a la tarjeta de red involucrada. Igualmente se asocian con una configuracin lgica del mismo nombre. allow-hotplug eth0 eth2 eth3 allow-hotplug eth1 Lneas iface: sirven para definir nombres lgicos de interfaces de red junto con su configuracin particular. Lneas mapping: sirven para definir cmo se asociar automticamente una interfaz fsica a una lgica de entre un grupo de stas. Lneas #: sirven para especificar comentarios. Lneas que acaban en \: sirven para extender la configuracin de la lnea anterior.

Ejemplo: $ cat /etc/network/intefaces auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp allow-hotplug eth1 iface eth0 inet static address 192.168.11.100 netmask 255.255.255.0 gateway 192.168.11.1

pg. 6

Las lneas iface tiene la siguiente sintaxis: iface <config_name> <address_family> <method_name> <option1> <value1> <option2> <value2> ... donde <config_name> ser un nombre lgico de interfaz de red, <address_family> normalmente ser el valor inet para especificar una configuracin IPv4, pero tambin puede ser inet6 (IPv6) o ipx (IPX), aunque no los usaremos. El valor de <method_name> indica el mtodo de configuracin de la interfaz y depende del valor de <address_family>, para el caso de la familia inet los mtodos son: loopback: usado slo para la interfaz lo (bucle local). static: usado para asignar una direccin ip fija. dhcp: usado para asignar una direccin dinmica.

Las opciones finales van a depender de la familia y del mtodo. Las dos primeras lneas que debe haber en el fichero /etc/network/interfaces son: auto lo iface lo inet loopback las cuales activan la interfaz lo (bucle local), que usaremos para la realizacin de pruebas. El mtodo static, usado para asignar una ip fija a una interfaz de red, tiene las siguientes opciones: Opcin address direccin-IP netmask mscara Ejemplo address 192.168.10.15 netmask 255.255.255.0 Significado Establece la direccin IP. Establece la mscara de la direccin IP. Establece la puerta de enlace. En un equipo slo puede haber una puerta de enlace, o lo que es lo mismo, slo puede haber una regla por defecto de enrutamiento. Establece la direccin de la red a la que pertenece la direccin IP (opcional). Establece la direccin de broadcast de la red (opcional). Establece la direccin MAC de la tarjeta. Para las tarjetas ethernet se debe poner la palabra ether como tipo de la interfaz. Ejecuta comando antes de que la tarjeta se configure con el comando ifup. Si el comando falla, ifup aborta, imprime un mensaje de error y la tarjeta no se marca como configurada. Ejecuta comando durante la configuracin de la tarjeta con el comando ifup. Ejecuta comando despus de que la tarjeta se configure con el comando ifup. Si el comando falla, ifup aborta, imprime un mensaje de error y la tarjeta no se

gateway direccin-IP

gateway 192.168.10.1

network direccin-IP-de-red broadcast direccin-IP-de-broadcast

network 192.168.10.0 broadcast 192.168.10.2555

hwaddress tipo-interfaz direccin-MAC

hwaddress ether 00:01:04:1b:2C:1F

pre-up comando

pre-up echo...

up comando

up sleep 2 ; route add...

post-up comando

post-up route add...

pg. 7

marca como configurada aunque haya sido configurada. Ejecuta comando antes de que la tarjeta se desconfigure con el comando ifdown. Si el comando falla, ifdown aborta, imprime un mensaje de error y la tarjeta se marca como desconfigurada aunque no haya sido desconfigurada. Ejecuta comando durante la desconfiguracin de la tarjeta con el comando ifdown. Ejecuta comando despus de que la tarjeta se desconfigure con el comando ifdown. Si el comando falla, ifdown aborta, imprime un mensaje de error y la tarjeta no se marca como desconfigurada.

pre-down comando

pre-down route del...

down comando

down sleep 2 ; route del...

post-down comando

post-down echo...

Las opciones pre-up, up, post-up, pre-down, down y post-down tienen las siguientes caractersticas: Son opcionales. Son opciones vlidas para cualquier familia y mtodo. Pueden repetirse cuantas veces queramos. Se ejecutan cada una en su momento, y dentro del mismo tipo, en el orden de aparicin en el fichero. Se puede asegurar que siempre se ejecuta correctamente el comando aadiendo el sufijo "|| true" (true es un comando que no hace nada y tiene como cdigo de salida el valor 0, false es el comando contrario, es decir, tiene como cdigo de salida el valor 1, y tampoco hace nada).

Existe otra posibilidad de ejecutar comandos cuando una tarjeta de red se est activando o desactivando, adems de las lneas up, down, etc. del fichero /etc/network/interfaces. sta consiste en introducir scripts dentro de cualquiera de los directorios: /etc/network/if-down.d /etc/network/if-post-down.d /etc/network/if-pre-up.d /etc/network/if-up.d

que equivalen a los momentos down, post-down, pre-up y up, respectivamente. El mtodo dhcp, usado para asignar una ip dinmica a la interfaz de red, tiene las siguientes opciones con el mismo significado anterior: hwaddress pre-up, up, post-up pre-down, down, post-down Activacion/desactivacin de la tarjeta de red ifup En el fichero /etc/udev/rules.d/70-persistent-net.rules estn los nombres de las interfaces fsicas, en el fichero /etc/network/interfaces estn los nombres de las interfaces lgicas con sus correspondientes configuraciones asociadas, lo que falta es asociar una interfaz fsica con una interfaz lgica para as configurarla, y esto se hace con el comando ifup (paquete ifupdown). La sintaxis del comando ifup es la siguiente: ifup [opcin...] interfaz-fsica[=interfaz-lgica]... pg. 8

Si ejecutamos las instruccin: # ifup eth1 se activa la interfaz fsica eth1 con la configuracin de la interfaz lgica del mismo nombre, es decir, eth1. Si quisiramos activar la interfaz eth2 con la configuracin de la interfaz lgica de nombre oficina, ejecutaramos: # ifup eth2=oficina Tambin es posible levantar todas las tarjetas que se hayan especificado en las lneas auto de /etc/network/interfaces: # ifup -a o tambin: # ifup --allow=auto Todas las tarjetas de red que estn en lneas allow-hotplug, pueden levantarse ejecutando: # ifup --allow=hotplug Es posible ver la asociacin actual entre tarjetas fsicas y lgicas consultando el contenido del fichero /etc/network/run/ifstate: # cat /etc/network/run/ifstate lo=lo eth0=eth0 A veces, este fichero no es consistente, por ejemplo, si activamos una tarjeta con ifup y la desactivamos con ifconfig; en estos casos, si usamos las rdenes ifup e ifdown obtenemos errores y no se ejecutan. Esto obliga a usar la opcin --force con ifup o ifdown, con lo que la orden se ejecutar independientemente de lo que se diga en el fichero /etc/network/run/ifstate. # ifup --force eth0

ifdown La orden ifdown es la encargada de desconfigurar las interfaces de red. Su sintaxis es la siguiente: ifdown [opcin...] interfaz-fsica... Por ejemplo, para desactivar la interfaz fsica eth0 ejecutaramos: # ifdown eth0 Todas las interfaces fsicas activas pueden desconfigurarse ejecutando: # ifdown -a pg. 9

ifquery El comando ifquery permite consultar las opciones de configuracin de una interfaz fsica que est activa o de una interfaz lgica del fichero /etc/network/interfaces, la cual no es necesario que est asociada a una interfaz fsica. # ifquery eth0 address: 192.168.1.100 netmask: 255.255.255.0 gateway: 192.168.1.1 network: 192.168.1.0 broadcast: 192.168.1.255

Pasos para modificar la configuracin de la tarjeta de red Para modificar la configuracin de una tarjeta de red hay que seguir en orden los siguientes pasos: 1. 2. 3. Desactivar la interfaz fsica de red ejecutando ifdown. Se desconfigurar en base a los parmetros que haya en el fichero /etc/network/interfaces para su interfaz lgica asociada. Editar el fichero /etc/network/interfaces. Activar la tarjeta fsica de red ejecutando ifup. Se configurar en base a los parmetros que haya en el fichero /etc/network/interfaces para la interfaz lgica asociada.

DNS - /etc/resolv.conf En el fichero /etc/resolv.conf es donde pondremos los servidores de nombres (DNS) que utilizar el equipo. Esto se hace introduciendo lneas con el siguiente formado: nameserver ip-servidor-dns Cada una de estas lneas slo lleva la direccin de un nico servidor DNS, si queremos poner ms de uno, se repetiran lneas nameserver. Los servidores DNS se utilizarn en el orden en el que aparecen en el fichero. # cat /etc/resolv.conf nameserver 87.216.1.65 nameserver 87.216.1.66

Router - /etc/sysctl.conf Una de las posibilidades que nos ofrece GNU/Linux es la de poder actuar como enrutador, es decir, recibir paquetes, decidir la ruta de estos y reenviarlos por cualquiera de las interfaces de red existentes. Para hacerlo, necesitamos modificar el parmetro del kernel denominadoip_forward. El fichero de configuracin /etc/sysctl.conf se utiliza para pasarle al kernel parmetros de configuracin en tiempo de ejecucin y que estos se conserven en sucesivos arranques del sistema. Es equivalente a cambiar valores en los archivos del directorio virtual /proc/sys, slo que con este ltimo mtodo los cambios se pierden al apagar el sistema. El nombre completo del parmetro que debemos modificar para que el equipo funcione como router se denomina net.ipv4.ip_forward, y su valor debe ser 1. Para que este cambio se mantenga al reiniciar el sistema, editamos el fichero /etc/sysctl.conf, buscamos el parmetro, y cambiamos el valor cero por el valor uno: net.ipv4.ip_forward = 1

pg. 10

Tras este cambio reiniciamos el sistema y el equipo ya funcionar como router. Pero podemos hacer el cambio en caliente y ahorrarnos el reinicio. Hay varias formas de hacer esto: Directamente poniendo el 1 en el fichero del directorio /proc/sys que se encarga de este parmetro. La forma de descubrir el fichero relacionado con un parmetro concreto del fichero /etc/sysctl.conf es siempre la misma. Todos los ficheros estn en /proc/sys, y los puntos del parmetro separan directorios hasta el ltimo que separa el nombre del fichero, de esta manera, el fichero que buscamos es el /proc/sys/net/ipv4/ip_forward. Podemos ponerlo a 1 de la siguiente forma:

echo 1 > /proc/sys/net/ipv4/ip_forward Con el comando sysctl podemos cambiar el valor de los parmetros del kernel de la siguiente manera:

# sysctl -w net.ipv4.ip_forward=1 Tambin podemos cargar todos los parmetros del fichero /etc/sysctl.conf ejecutando:

# sysctl -p Otros usos del comando sysctl son los siguiente: Para ver todos los parmetros

# sysctl -a Para ver slo los parmetros que contengan con una expresin regular:

# sysctl -a --patter net.ipv4 Para ver un parmetro concreto:

# sysctl net.ipv4.ip_forward Para cargar los parmetros del kernel que hay en un fichero:

# sysctl -p fichero

Aadir enrutamiento El enrutamiento esttico que fuese necesario introducir en el equipo lo haremos con en comando route o ip desde las configuraciones de las interfaces lgicas en el fichero /etc/network/interfaces. Sintaxis para aadir una regla de enrutamiento: con el comando route cualquiera de las siguientes: route add -net direccin-red netmask mscara-red gw direccin-puerta-enlace dev tarjeta-red route add -net direccin-red/prefijo gw direccin-puerta-enlace dev tarjeta-red con el comando ip: ip route add direccin-red/prefijo via direccin-puerta-enlace dev tarjeta-red

pg. 11

Sintaxis para borrar una regla de enrutamiento: con el comando route cualquiera de las siguientes: route del -net direccin-red netmask mscara-red gw direccin-puerta-enlace dev tarjeta-red route del -net direccin-red/prefijo gw direccin-puerta-enlace dev tarjeta-red con el comando ip: ip route del direccin-red/prefijo via direccin-puerta-enlace dev tarjeta-red Los comandos anteriores, normalmente, se colocarn en la configuracin lgica asociada con la interfaz de salida de la regla de enrutamiento y en estos casos, el parmetro dev puede suprimirse. Las comandos que crean las reglas se ejecutarn en el momento up o post-up, y los que borran las reglas, en el momento predown o down. Ejemplo: iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.255 up ip route add 11.0.0.0/8 via 192.168.1.1 down ip route del 11.0.0.0/8 via 192.168.1.1 En el ejemplo anterior el comando ip se asume dev eth0.

NAT Si queremos que un equipo GNU/Linux que hace de router, tambin realice la operacin de NAT, debemos usar el comando iptables de la siguiente forma en el momento de la activacin de la tarjeta que va a hacer NAT: post-up iptables -t nat -A POSTROUTING -o tarjeta-que-hace-nat -j MASQUERADE Cuando la tarjeta se desactive, se debe eliminar la regla anterior: pre-down iptables -t nat -D POSTROUTING -o tarjeta-que-hace-nat -j MASQUERADE (Este apartado se explica completamente en el tema del cortafuegos netfilter/iptables)

pg. 12

Chequeo de la red Chequeo de la red ping El comando ping permite verificar si una mquina remota responde, para lo que utiliza el protocolo ICMP (Internet Control Message Protocol), un protocolo similar a UDP pero ms simple, ya que no posee identificacin de puertos, y que se utiliza para mensajes de control y error. Funciona enviando paquetes ICMP ECHO_REQUEST (pings). Para comprobar si una mquina responde, ejecutamos: # ping www.google.es PING www.google.es (173.194.45.23) 56(84) bytes of data. 64 bytes from lis01s06-in-f23.1e100.net (173.194.45.23): icmp_req=1 ttl=55 time=62.5 ms 64 bytes from lis01s06-in-f23.1e100.net (173.194.45.23): icmp_req=2 ttl=55 time=63.9 ms 64 bytes from lis01s06-in-f23.1e100.net (173.194.45.23): icmp_req=3 ttl=55 time=64.6 ms 64 bytes from lis01s06-in-f23.1e100.net (173.194.45.23): icmp_req=4 ttl=55 time=62.4 ms ^C --- www.google.es ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 62.410/63.390/64.653/0.946 ms Por defecto, el comando no se detiene y hay que detenerlo pulsando <Ctrl+C>. Es posible enviar un nmero exacto de ping usando la opcin -c: # ping -c 2 173.194.45.31 PING 173.194.45.31 (173.194.45.31) 56(84) bytes of data. 64 bytes from lis01s06-in-f31.1e100.net (173.194.45.31): icmp_req=1 ttl=55 time=62.1 ms 64 bytes from lis01s06-in-f31.1e100.net (173.194.45.31): icmp_req=2 ttl=55 time=62.1 ms --- www.google.es ping statistics --2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 62.169/62.183/62.197/0.014 ms

traceroute El comando traceroute permite determinar la ruta tomada por un paquete para alcanzar su destino, ya sea en Internet o en la red local. # traceroute -n www.google.es traceroute to www.google.es (173.194.45.31), 30 hops max, 60 byte packets 1 192.168.1.1 1.896 ms 1.572 ms 1.385 ms 2 87.219.96.1 38.215 ms 42.062 ms 41.903 ms 3 10.255.19.254 44.205 ms 45.638 ms 47.184 ms 4 212.106.217.62 58.301 ms 62.190 ms 212.106.217.98 74.502 ms 5 212.106.217.61 66.000 ms 212.106.217.97 65.852 ms 212.106.217.61 69.138 ms 6 212.106.217.2 65.511 ms 64.692 ms 212.106.216.254 75.904 ms 7 72.14.235.18 68.609 ms 72.14.235.20 51.150 ms 212.106.217.2 49.472 ms 8 72.14.235.20 56.653 ms 216.239.49.243 66.759 ms 72.14.235.18 50.403 ms 9 216.239.49.243 65.279 ms 65.751 ms 216.239.49.249 62.839 ms 10 173.194.45.31 62.249 ms 209.85.254.70 67.098 ms 68.856 ms La opcin -n evita que el comando traceroute traduzca las IPs a sus correspondientes nombres usando DNS; as conseguimos que funcione ms rpido.

pg. 13

mtr El comando mtr (paquete mtr) combina los resultados de traceroute y ping, permitiendo diagnosticar la conexin a un equipo. Puede usarse en modo consola con la opcin -r o en modo grfico sin opciones: # mtr -r -n -c 4 www.google.es HOST: debian Loss% 1.|-- 192.168.1.1 0.0% 2.|-- 87.219.96.1 0.0% 3.|-- 10.255.19.254 0.0% 4.|-- 212.106.217.98 0.0% | `|-- 212.106.217.62 5.|-- 212.106.217.97 0.0% 6.|-- 212.106.217.2 0.0% 7.|-- 72.14.235.18 0.0% 8.|-- 216.239.49.249 0.0% 9.|-- 209.85.254.70 0.0% 10.|-- 173.194.45.24 0.0%

Snt Last Avg Best Wrst StDev 4 0.9 1.2 0.9 1.5 0.3 4 37.8 37.3 36.9 37.8 0.4 4 50.8 54.3 39.0 87.0 22.5 4 57.6 54.9 53.4 57.6 1.9 4 54.9 60.1 53.2 78.5 12.3 4 52.2 51.9 51.5 52.2 0.3 4 52.5 52.3 51.9 53.0 0.5 4 63.2 62.8 61.5 64.0 1.1 4 65.3 65.8 64.7 67.1 1.0 4 63.1 64.4 63.1 66.0 1.2

La opcin -n hace que el comando funcione ms rpido, pues no traduce las IPs a nombres, y la opcin -c indica el nmero de pings que se enviarn (igual que en la orden ping). Si ejecutamos: # mtr -n www.google.es &

nos sale la interfaz grfica:

nslookup El comando nslookup (Name System Lookup) es una herramienta que permite consultar un servidor de nombres y obtener informacin relacionada con el dominio o el host y as diagnosticar los eventuales problemas de configuracin que pudieran haber surgido en el DNS. # nslookup www.google.es Server: 87.216.1.65 Address: 87.216.1.65#53 Non-authoritative answer: Name: www.google.es Address: 173.194.45.31 Name: www.google.es Address: 173.194.45.23 Name: www.google.es Address: 173.194.45.24

pg. 14

De modo predeterminado, el comando nslookup realiza las consultas al servidor de nombres primario configurado en la mquina. Sin embargo, es posible consultar un servidor de nombres especfico: # nslookup www.google.es - 87.216.1.66 Server: 87.216.1.66 Address: 87.216.1.66#53 Non-authoritative answer: Name: www.google.es Address: 173.194.45.31 Name: www.google.es Address: 173.194.45.23 Name: www.google.es Address: 173.194.45.24

host El comando host es similar al comando nslookup, y nos va a hacer una traduccin de nombres. # host www.google.es www.google.es has address 173.194.45.31 www.google.es has address 173.194.45.24 www.google.es has address 173.194.45.23 www.google.es has IPv6 address 2a00:1450:4004:803::1017

host El comando host es similar al comando nslookup, y nos va a hacer una traduccin de nombres. # host www.google.es www.google.es has address 173.194.45.31 www.google.es has address 173.194.45.24 www.google.es has address 173.194.45.23 www.google.es has IPv6 address 2a00:1450:4004:803::1017

dig El comando dig (Domain Information Groper) permite realizar consultas a los servidores DNS, por lo que, al igual que host y nslookup, nos ser muy til para comprobar si el DNS est correctamente configurado en nuestra mquina. Permite comprobar tanto el mapeo de nombres a IPs como el mapeo inverso de IPs a nombres, pero slo sirve para Internet, ya que no mira en /etc/hosts (slo utiliza /etc/resolv.conf). Adems, nos da el tiempo que tarda en hacerse la traduccin. # dig www.google.es ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> www.google.es ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39967 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.es. IN ;; ANSWER SECTION: www.google.es. 196 www.google.es. 196 www.google.es. 196 pg. 15

IN IN IN

A A A

173.194.45.31 173.194.45.23 173.194.45.24

;; Query time: 53 msec ;; SERVER: 87.216.1.65#53(87.216.1.65) ;; WHEN: Sun Nov 10 23:29:53 2013 ;; MSG SIZE rcvd: 79 Se puede hacer la consulta a un servidor de nombres concreto: # dig @8.8.8.8 www.google.es ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @8.8.8.8 www.google.es ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2866 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.es. IN ;; ANSWER SECTION: www.google.es. 130 www.google.es. 130 www.google.es. 130

IN IN IN

A A A

173.194.34.223 173.194.34.215 173.194.34.216

;; Query time: 79 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Sun Nov 10 23:34:15 2013 ;; MSG SIZE rcvd: 79 Para hacer traduccin inversa: # dig -x 213.4.130.95 ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> -x 213.4.130.95 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20963 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;95.130.4.213.in-addr.arpa.

IN

PTR

;; ANSWER SECTION: 95.130.4.213.in-addr.arpa. 82161 IN PTR ;; Query time: 49 msec ;; SERVER: 87.216.1.65#53(87.216.1.65) ;; WHEN: Sun Nov 10 23:43:08 2013 ;; MSG SIZE rcvd: 75

www.telefonica.net.

pg. 16

gnome-nettool El programa grfico gnome-nettool (paquete gnome-nettool) incluye varias herramientas de chequeo de la red, como por ejemplo: ping, traceroute, nslookup, etc.

network-test El comando network-test (paquete ifupdown-extra) realiza un test de varios aspectos de la configuracin de la red. # network-test INFO: This system has exactly one default route INFO: Host localhost answers to ICMP pings INFO: Loopback interface is working properly INFO: The lo # Strip the ending ':' interface is up INFO: The lo interface has IP address 127.0.0.1 assigned INFO: The lo interface has tx and rx packets. INFO: The eth0 # Strip the ending ':' interface is up INFO: The eth0 interface has IP address 192.168.1.100 assigned INFO: The eth0 interface has tx and rx packets. WARN: The eth1 # Strip the ending ':' interface is down INFO: The router 192.168.1.1 is reachable INFO: This system is configured to use nameserver 87.216.1.65 INFO: Host 87.216.1.65 answers to ICMP pings INFO: Dns server 87.216.1.65 resolved correctly www.debian.org INFO: This system is configured to use nameserver 87.216.1.66 INFO: Host 87.216.1.66 answers to ICMP pings INFO: Dns server 87.216.1.66 resolved correctly www.debian.org INFO: There are 2 nameservers is configured for this system and 2 are working properly INFO: System can reach Internet host www.debian.org INFO: System can access web server at Internet host www.debian.org

ethtool El comando ethtool (paquete ethtool) se utiliza para ver y cambiar los parmetros de la tarjeta de red ethernet. Para conocer las caractersticas de un tarjeta de red (velocidad, duplex, wake-on, estado del enlace, etc.): # ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes pg. 17

Speed: 1000Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on MDI-X: Unknown Supports Wake-on: umbg Wake-on: d Current message level: 0x00000007 (7) drv probe link Link detected: yes Se puede ver que la autonegociacin est activa, lo que significa que la tarjeta negociar con el otro extremo, normalmente un switch, la velocidad y el duplex. Para cambiar parmetros de la tarjeta se debe usar la opcin -s, as por ejemplo para desactivar la autonegociacin y forzar una velocidad de 100Mbps y full duples: # ethtool -s eth0 autoneg off speed 100 duplex full Para conocer el driver de la tarjeta de red: # ethtool -i eth0 driver: e1000 version: 7.3.21-k8-NAPI firmware-version: N/A bus-info: 0000:00:03.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no Para mostrar una estadstica del trfico de la tarjeta de red: # ethtool -S eth0 NIC statistics: rx_packets: 2072 tx_packets: 278 rx_bytes: 743240 tx_bytes: 24123 rx_broadcast: 913 tx_broadcast: 21 rx_multicast: 879 tx_multicast: 65 rx_errors: 0 tx_errors: 0 tx_dropped: 0 multicast: 879 collisions: 0 ... Otro uso de ethtool es el de identificar el puerto fsico de una tarjeta ethernet en particular cuando tenemos montadas varias en el servidor, y no las tenemos etiquetadas. Podemos utilizar la opcin-p, lo que har que el LED de puerto fsico parpadee un nmero de segundos: # ethtool -p eth0 4 Este comando tiene muchas posibilidades, y es conveniente ver su pgina del manual. pg. 18

Interfaces virtuales Las interfaces de red virtuales nos sirven para tener varias direcciones IP sobre una misma tarjeta de red, y as ofrecer servicios en cada una estas direcciones. Esto puede hacerse usando una tcnica llamada "IP Aliasing". En el siguiente ejemplo se asigna a la tarjeta eth0 tres IP, dos de una misma red lgica (eth0, eth0:1) y otra de una diferente (eth0:2): auto eth0 eth0:1 eth0:2 iface eth0 inet static address 192.168.1.200 netmask 255.255.255.0 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.255 iface eth0:1 inet static address 192.168.1.201 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 iface eth0:2 inet static address 192.168.2.202 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 Cuando se trabaja con IP virtuales, hay que tener en cuenta que estas dependen siempre de la correcta configuracin de la interfaz raz, es decir, para el ejemplo anterior, eth0:1 y eth0:2 dependen de eth0. Esto nos lleva a seguir un orden adecuado en el activado/desactivado de estas interfaces, pues en caso contrario, tendremos problemas provocados por la falta de sincronizacin entre las interfaces que verdaderamente tiene el kernel activadas y las registradas como activadas en el fichero /etc/network/run/ifstate. Observemos esta desincronizacin cuando activamos nicamente la interfaz virtual eth0:1: # ifdown -a # ifup eth0:1 # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 inet6 addr: fe80::a00:27ff:fe28:42d2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:455 errors:0 dropped:0 overruns:0 frame:0 TX packets:1373 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:93364 (91.1 KiB) TX bytes:203177 (198.4 KiB) eth0:1 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 inet addr:192.168.1.201 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

# cat /etc/network/run/ifstate eth0:1=eth0:1 Como vemos, realmente la interfaz raz se activa (aunque sin IP) pero no se registra en el fichero /etc/network/run/ifstate.

pg. 19

Tambin sucede lo mismo cuando desactivamos la interfaz raz sin antes desactivar las interfaces virtuales que dependen de ella: # ifdown -a # ifup -a # ifdown eth0 # ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:24 errors:0 dropped:0 overruns:0 frame:0 TX packets:24 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1480 (1.4 KiB) TX bytes:1480 (1.4 KiB) # cat /etc/network/run/ifstate lo=lo eth0:1=eth0:1 eth0:2=eth0:2 Para evitar estos problemas debemos trabajar de la siguiente forma: Activamos/Desactivamos todo:

# ifup -a # ifdown -a Activamos slo la interfaz raz:

# ifup eth0 Desactivamos la interfaz raz sin existir virtuales:

# ifdown eth0 Desactivamos la interfaz raz existiendo virtuales:

# ifdown eth0:1 eth0:2 eth0 Activamos una interfaz lgica sin la raz activa:

# ifup eth0 eth0:1 Activamos una interfaz lgica con la raz activa:

# ifup eth0:1 Desactivamos una interfaz lgica:

# ifdown eth0:1 Recordatorio: En un equipo slo puede haber una puerta de enlace, o lo que es lo mismo, slo puede haber una regla por defecto de enrutamiento.

pg. 20

Mapeo lgico de una interfaz de red En este punto vamos a explicar cmo configurar un equipo con Debian GNU/Linux para que, durante el proceso de arranque y de forma totalmente automatizada, se escoja una determinada configuracin lgica de red de entre varias disponibles. El caso ms habitual es el de tener un porttil que se traslada a menudo de una red en el trabajo, a otra distinta, en casa. Para hacer el mapeado lgico de una interfaz de red, el fichero /etc/network/interfaces aporta la siguiente sintaxis: mapping <interface_name_glob> script <script_name> map <script_input1> map <script_input2> map ... donde: <interface_name_glob> indica el dispositivo fsico a mapear. Si van a mapearse ms de uno, podemos indicarlos juntos separndolos con espacios (mapping eth0 eth1 ...). <script_name> hace referencia a un script que se encargar de determinar qu configuracin lgica (ya creada, es lo primero que se debe hacer) usar de entre las disponibles. sta es la parte ms complicada de todo el proceso. <script_inputN> se corresponde con una lista de parmetros, separados por espacios, que el script <script_name> recibir por la entrada estndar. Desde el script podremos leerlos mediante el comando read valor1 valor2 [..] valorN, usando, si lo consideramos oportuno, una instruccin while o similar. Cada lnea map va a representar el chequeo para una determinada interfaz lgica.

Veamos ahora, con ms detalle, cmo debe ser el script que se encargar de seleccionar la interfaz lgica a asociar a la interfaz fsica: 1. El nombre de la interfaz fsica que est mapeando lo recibe como primer y nico parmetro ($1). Si se estuviera mapeando ms de una interfaz, se hara lo mismo con todas ellas, es decir, con la primera interfaz fsica ejecutara el script con la informacin de las lneas map para seleccionar una interfaz lgica (si no elige ninguna, la interfaz quedara desconfigurada), y entonces, vuelta a empezar con la siguiente interfaz fsica indicada. El script recibe por la entrada estndar los valores de las lneas map, tal cual estn escritos, y como una secuencia de lneas. Como ya se ha dicho, esta informacin puede recogerse con la instruccin read combinada con una instruccin while. Se espera que el script imprima por la salida estndar (usando el comando echo por ejemplo), el nombre de la interfaz lgica seleccionada. Obviamente, para que el script sepa cules son esos nombres, debemos parsrselo a travs de las lneas map. Finalmente, el script debe terminar con un exit 0 en el caso de que queramos que se use el valor devuelto para configurar el dispositivo o con exit 1 si queremos cancelar el proceso de configuracin para ese mapeado.

2. 3. 4.

Vamos a ver un ejemplo que nos podra servir para mapear la tarjeta de red de nuestro porttil que usamos en la red del trabajo y en la red de nuestra casa. 1. Preparamos el bucle local:

auto lo iface lo inet loopback 2. Cargamos automticamente la configuracin de la interfaz fsica eth0:

auto eth0 allow-hotplug eth0 3. Creamos las interfaces lgicas:

iface casa inet static address 192.168.1.200 netmask 255.255.255.0 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.255 pg. 21

iface trabajo inet static address 172.16.0.50 netmask 255.255.0.0 gateway 172.16.0.1 network 172.16.0.0 broadcast 172.16.255.255 4. Preparamos las lneas del mapeado:

mapping eth0 script /root/bin/check-gw.bash map 192.168.1.200/24 192.168.1.1 casa map 172.16.0.50/16 172.16.0.1 trabajo Como vemos, cada lnea map lleva la informacin necesaria (ip, mscara, puerta de enlace y nombre de la interfaz lgica) para chequear la existencia de una puerta de enlace, pues esa ser la tarea del script check-gw.bash, ya que esto determinar en qu red estamos. 5. Creamos el script:

#!/bin/bash interfaz-fisica=$1 while read ip gw interfaz-logica do ip address add $ip dev $interfaz-fisica ip link set $interfaz-fisica up if ping -c 3 $gw > /dev/null; then ip address del $ip dev $interfaz-fisica ip link set $interfaz-fisica down echo $interfaz-logica exit 0 else ip address del $ip dev $interfaz-fisica ip link set $interfaz-fisica down fi done exit 1 Este script podra mejorarse haciendo uso de las direcciones MAC en vez de las direcciones IP. Crear un canal bonding El channel bonding o unin de interfaces de red consiste en simular un dispositivo de red con gran ancho de banda uniendo varias tarjetas de red independientes, de manera que las aplicaciones slo vern una interfaz de red. Con el channel bonding conseguimos varias cosas: 1. 2. 3. Mayor ancho de banda: el ancho de banda de la interfaz virtual ser la suma de los anchos de banda de las interfaces reales. Ser necesario que el ancho de banda de la interfaz de salida del switch sea mayor que el de las interfaces individuales. Balanceo de carga: tendremos balanceo de carga del trfico de red entre todas las interfaces reales (por defecto Round Robin). Tolerancia a fallos: si falla una tarjeta de red los datos irn slo por las que estn en buen estado.

pg. 22

Algunos trminos habituales en el contexto del bonding son: Canal bonding: Es la unin de dos o ms interfaces fsicas de red en una nica interfaz virtual. Interfaz de canal bonding interfaz maestra: Es la interfaz de red virtual que agrupa a las interfaces de red fsicas, y es lo que ve el sistema operativo y el exterior. Interfaz esclava: Cada una de las interfaces de red fsicas que estn conectadas al canal bonding. Interfaz esclava primaria: Interfaz esclava que se encuentra activa por defecto.

Existen varios tipos de bonding: Modo 0 Balance-RR (Balance Round Robin): transmite paquetes de manera secuencial entre todos las interfaces esclavas disponibles. o Provee: balanceo de carga y tolerancia a fallos. o Requiere: generalmente requiere poder agrupar puertos en los switchs. Las nomenclaturas de estos grupos dependen del fabricante del switch, concretamente, Cisco llama a estas agrupaciones EtherChannel. Modo 1 Active-Backup: una interfaz esclava del canal bonding est activa en todo momento, mientras que las otras permanecen en estado pasivo. Cuando la interfaz activa falla, la siguiente interfaz esclava toma la direccin MAC y se convierte en la interfaz activa. No hay balanceo de carga. Se aconseja conectar cada tarjeta a un switch distinto, con lo que conseguimos evitar los problemas del switch. o Provee: Tolerancia a fallos nicamente. o Requiere: No requiere ningn soporte especial en el switch. Modo 2 balance-xor: las transmisiones son balanceadas a travs de todas las interfaces esclavas en modo Xor ([source-MAC xor dest-MAC] mod n-slaves), es decir, el mismo esclavo es seleccionado para cada destino nico MAC. o Provee: tolerancia a fallos y balanceo de carga basado en el destino. o Requiere: generalmente poder agrupar puertos en los switchs. Modo 3 broadcast: se transmite todo por todas las interfaces. Este mtodo no balancea. o Provee: tolerancia a fallos. o Requiere: generalmente poder agrupar puertos en los switchs. Modo 4 802.3ad: Modo IEEE Dynamic Link Aggregation, permite gestionar el balanceo, la velocidad y el duplex de la interfaz, pero requiere que el mdulo del kernel y el switch lo soporten. o Provee: Balanceo de carga. o Requiere: Soporte a 802.3ad en el switchModo 5 balance-TLB (Adaptative Transmit Load-Balance): balancea la carga del trfico de salida entre los esclavos dependiendo de la velocidad de estos y de la carga total. El trfico de entreda es recibido por un esclavo, en caso de fallar otro esclavo toma su MAC y contina recibiendo trfico. o Provee: balanceo de carga distribuido y tolerancia a fallos. o Requiere: no requiere ningn soporte en el switch. Modo 6 balance-ALB (Adaptative Load-Balancing): realiza el balanceo anterior adems de un balanceo tambin en la recepcin. o Provee: balanceo de carga distribuido y tolerancia a fallos. o Requiere: no requiere nada especial en el switch, pero el mdulo del kernel debe soportar cambio de MAC en caliente (mientras la interfaz est activa).

Para implementar el channel bonding se requiere que todas las tarjetas de red instaladas en el servidor deben soportar: Misma velocidad. Misma configuracin de duplex.

Para confirmar estos datos, podemos usar el comando ethtool.

pg. 23

A nivel software se requiere que el kernel incorpore el mdulo bonding, algo que sucede en los kernels actuales: # modinfo bonding filename: /lib/modules/3.2.0-4-686-pae/kernel/drivers/net/bonding/bonding.ko alias: rtnl-link-bond author: Thomas Davis, tadavis@lbl.gov and many others description: Ethernet Channel Bonding Driver, v3.7.1 version: 3.7.1 license: GPL srcversion: 0384DF6574E0ED31BA573D8 depends: intree: Y vermagic: 3.2.0-4-686-pae SMP mod_unload modversions 686 parm: max_bonds:Max number of bonded devices (int) parm: tx_queues:Max number of transmit queues (default = 16) (int) parm: num_grat_arp:Number of peer notifications to send on failover event (alias of num_unsol_na) (int) parm: num_unsol_na:Number of peer notifications to send on failover event (alias of num_grat_arp) (int) parm: miimon:Link check interval in milliseconds (int) parm: updelay:Delay before considering link up, in milliseconds (int) parm: downdelay:Delay before considering link down, in milliseconds (int) parm: use_carrier:Use netif_carrier_ok (vs MII ioctls) in miimon; 0 for off, 1 for on (default) (int) parm: mode:Mode of operation; 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb (charp) parm: primary:Primary network device to use (charp) parm: primary_reselect:Reselect primary slave once it comes up; 0 for always (default), 1 for only if speed of primary is better, 2 for only on active slave failure (charp) parm: lacp_rate:LACPDU tx rate to request from 802.3ad partner; 0 for slow, 1 for fast (charp) parm: ad_select:803.ad aggregation selection logic; 0 for stable (default), 1 for bandwidth, 2 for count (charp) parm: min_links:Minimum number of available links before turning on carrier (int) parm: xmit_hash_policy:balance-xor and 802.3ad hashing method; 0 for layer 2 (default), 1 for layer 3+4, 2 for layer 2+3 (charp) parm: arp_interval:arp interval in milliseconds (int) parm: arp_ip_target:arp targets in n.n.n.n form (array of charp) parm: arp_validate:validate src/dst of ARP probes; 0 for none (default), 1 for active, 2 for backup, 3 for all (charp) parm: fail_over_mac:For active-backup, do not set all slaves to the same MAC; 0 for none (default), 1 for active, 2 for follow (charp) parm: all_slaves_active:Keep all frames received on an interfaceby setting active flag for all slaves; 0 for never (default), 1 for always. (int) parm: resend_igmp:Number of IGMP membership reports to send on link failure (int) Adems, es necesario instalar el paquete ifenslave-2.6: # aptitude install ifenslave-2.6 Tras los dos puntos anteriores, lo nico que se precisa es crear la interfaz del canal bonding o interfaz maestra en el fichero /etc/network/interfaces teniendo en cuenta lo siguiente: 1. 2. 3. 4. Las interfaces esclavas del canal bonding no deben tener ninguna configuracin en el fichero /etc/network/interfaces, ni se activarn con lneas auto o allow-hotplug. Elegimos un nombre para la interfaz maestra, normalmente bond0, bond1, etc. Si queremos que el canal bonding se active automticamente al arrancar el sistema aadimos la lnea: auto bond0 Definimos la interfaz maestra con una lnea iface, con sus parmetros normales para el mtodo static (address, netmask, gateway, network, broadcast, up, down, etc.) y los parmetros bonding.

pg. 24

Los parmetros bonding de iface son: bond_mode: modo de funcionamiento elegido (0, 1, etc.), aunque tambin podemos poner el nombre en minscula. bond_miimon: tiempo en milisegundos entre revisiones del sistemas de las interfaces para ver si tienen algn problema (estropeada o cable desconectado). bond_downdelay: tiempo en milisegundos para considerar cada una interfaz. bond_updelay: tiempo en milisegundos para considerar levantada una interfaz. bond_slaves: listado ordenado de las interfaces que forman el canal bonding. En el modo active-backup la primera ser la interfaz esclava primaria.

Una configuracin de canal bonding en modo active-backup con dos interfaces fsicas, se configurara de la siguiente forma: auto bond0 iface bond0 inet static address 192.168.1.20 netmask 255.255.255.0 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.255 bond_mode active-backup bond_miimon 100 bond_downdelay 300 bond_updelay 300 bond_slaves eth0 eth1 Tras levantar la interfaz podemos comprobar que el canal bonding est funcionando: # ifup bond0 # ifconfig bond0 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe28:42d2/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:409 errors:0 dropped:6 overruns:0 frame:0 TX packets:452 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:373079 (364.3 KiB) TX bytes:56761 (55.4 KiB) eth0 Link encap:Ethernet HWaddr 08:00:27:28:42:d2 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:359 errors:0 dropped:0 overruns:0 frame:0 TX packets:452 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:368233 (359.6 KiB) TX bytes:56761 (55.4 KiB) Link encap:Ethernet HWaddr 08:00:27:28:42:d2 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:50 errors:0 dropped:6 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4846 (4.7 KiB) TX bytes:0 (0.0 B)

eth1

lo

Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:20 errors:0 dropped:0 overruns:0 frame:0 TX packets:20 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1200 (1.1 KiB) TX bytes:1200 (1.1 KiB) # lsmod | grep bond bonding 73419 0 pg. 25

Podemos observar cmo slo la interfaz maestra es la que tiene la nica direccin IP del canal, y la MAC que usa el canal es la MAC de la tarjeta esclava primaria. Se pueden consultar los datos del canal bonding mirando el contenido del fichero /proc/net/bonding/bond0: # cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 300 Down Delay (ms): 300 Slave Interface: eth0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:28:42:d2 Slave queue ID: 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 08:00:27:37:d8:06 Slave queue ID: 0 Podemos ver los mensajes del sistema al iniciar la creacin del canal bonding con dmesg o tambin en /var/log/message: # dmesg | grep bond [ 12.701196] bonding: Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) [ 12.705263] bonding: bond0: Setting MII monitoring interval to 100. [ 12.705296] bonding: bond0: Setting down delay to 300. [ 12.705323] bonding: bond0: Setting up delay to 300. [ 12.716012] bonding: bond0: setting mode to active-backup (1). [ 12.726534] bonding: bond0: Adding slave eth0. [ 12.730408] bonding: bond0: enslaving eth0 as a backup interface with a down link. [ 12.736587] bonding: bond0: Adding slave eth1. [ 12.738877] bonding: bond0: enslaving eth1 as a backup interface with a down link. [ 12.745002] bonding: bond0: link status up for interface eth0, enabling it in 0 ms. [ 12.745005] bonding: bond0: link status up for interface eth1, enabling it in 300 ms. [ 12.745041] ADDRCONF(NETDEV_UP): bond0: link is not ready [ 12.748175] bonding: bond0: link status definitely up for interface eth0, 1000 Mbps full duplex. [ 12.748175] bonding: bond0: making interface eth0 the new active one. [ 12.749383] bonding: bond0: first active interface up! [ 12.749399] ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready [ 12.948139] bonding: bond0: link status definitely up for interface eth1, 1000 Mbps full duplex. [ 22.888074] bond0: no IPv6 routers present El funcionamiento por defecto del canal bonding en modo active-backup que hace que todas las tarjetas trabajen con la misma MAC (la de la esclava primaria), al parecer interfiere con los mtodos de enrutamiento interno de VirtualBox entre el anfitrin y el invitado de la mquina virtual. Esto obliga a configurar el mdulo del kernel del bonding para que la direccin MAC de la tarjeta maestra sea siempre la direccin MAC de la tarjeta esclava activa, permaneciendo cada interfaz esclava con su propia direccin MAC. Este funcionamiento causar leves retrasos, pues los equipos tendrn que actualizar sus tablas ARP cuando se produzcan fallos en el canal bonding. El parmetro a aadir en el fichero /etc/network/interfaces para conseguir esto es el siguiente: bond_fail_over_mac pg. 26 active