Antiguo BlogGNU/LinuxLinux

Conceptos básicos sobre redes GNU/Linux

Interfaces de red

De los equipos que actualmente tengo en casa, he elegido uno con una placa base ASUS A7N8X Deluxe (http://es.asus.com/products/mb/socketa/a7n8x-d/overview.htm) por ser el “más completo” referente a interfaces de red. Esta placa viene con dos tarjetas de red integradas (Dual LAN) con chipset NVidia nForce2 y 3Com 3C920B-EMB.

Actualmente trabajo con un kernel precompilado para al arquitectura AMD k7.

# uname –r

2.6.8-2-k7

Para mostrar la información referente sobre todos los buses PCI y los distintos dispositivos conectados a el (tarjetas ethernet), utilizamos la utilidad lspci:

#lspci

0000:00:04.0 Ethernet controller: nVidia Corporation nForce2 Ethernet Controller (rev a1)

0000:02:01.0 Ethernet controller: 3Com Corporation 3C920B-EMB Integrated Fast Et hernet Controller [Tornado] (rev 40)

Para ver los módulos cargados en el kernel podemos utilizar lsmod:

# lsmod

Module Size Used by Not tainted

Forcedeth 17792 0

nvnet 70308 0

El comando lsmod lista los módulos cargados, presentando de cada uno nombre, tamaño, cuenta de usos y lista de módulos que lo usan (es equivalente a cat /proc/modules).

Por otro lado, el paquete modconf de Debian proporciona un shell script que puede usarse para personalizar la configuración de los módulos a través de un interfaz basado en menús (el signo + significa que los módulos están cargados). Dentro del menú kernel/drivers/net (controladores para tarjetas de red) podemos encontrar:

# modconf

kernel/drivers/net

3c59x +3c590/3c900 series (592/595/597) ‘Vortex/Boomerang/Cyclone’ support

forcedeth + nForce Ethernet support (EXPERIMENTAL)

nvnet + (No hay una descripción disponible)

El driver forcedeth es un controlador abierto para la interfaz de red del nforce2, con lo que se puede prescindir totalmente de los drivers nvnet (propietarios de nvidia para el nforce2).

El problema que presenta el driver forcedeth es que no está completo y no soporta por ejemplo mii-tool (indica la capacidad de transmisión que soporta una tarjeta). La solución sería usar los drivers propietarios que tienen amplias gamas de configuración como mii-tool. Por el contrario es mucho más cómodo usar el que viene en el kernel ( forcedeth), ya que si cambiamos de núcleo, por ejemplo, no es necesario andar reinstalándolo los controladores propietarios de nvidia.

# mii-tool –v

eth0: negotiated 100baseTx-FD, link ok

product info: vendor 00:00:00, model 0 rev 0

basic mode: autonegotiation enabled

basic status: autonegotiation complete, link ok

capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

dvertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

Existe otra utilidad (ethtool) que nos permite saber las opciones de nuestro dispositivo Ethernet, como por ejemplo si soporta WOL (Wake On Lan). A este comando se le pasa el dispositivo de red sobre el que se quiere trabajar y devuelve un resumen con la configuración del mismo.

# ethtool eth0

Settings for eth0:

Supported ports: [ TP MII ]

Supported link modes: 10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

Supports auto-negotiation: Yes

Advertised link modes: 10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

Advertised auto-negotiation: Yes

Speed: 100Mb/s

Duplex: Full

Port: MII

PHYAD: 32

Transceiver: internal

Auto-negotiation: on

Supports Wake-on: pumbg

Wake-on: d

Current message level: 0x00000007 (7)

Link detected: yes

Además, tanto mii-tool como ethtool, podemos forzar la tarjeta de red a trabajar en un modo operativo concreto (siempre y cuando esté soportado por la tarjeta) como por ejemplo elegir entre 10/100 Mb y HalfDuplex/FullDuplex.
Los módulos son cargados durante el arranque, y conforme se van reconociendo se les va asignando un nombre de interfaz. Para ver los mensajes desplegados por el kernel en el momento del arranque podemos utilizar dmesg:

# dmesg

forcedeth.c: Reverse Engineered nForce ethernet driver. Version 0.29.

eth0: forcedeth.c: subsystem: 01043:80a7 bound to 0000:00:04.0

ip1394: eth2: IEEE-1394 IPv4 over 1394 Ethernet (fw-host0)

eth0: no IPv6 routers present

Una aplicación muy interesante para poder capturar todos los mensajes que aparecen en el arranque en un archivo es bootlogd, un demonio que copia en un archivo todo lo que se envíe al dispositivo /dev/console, que por defecto el archivo donde escribirá los mensajes será /var/log/boot.

También existe un asistente (etherconf) cuya finalidad es la de configurar la red de forma automática.

Cada dispositivo de interconexión se asocia a una interfaz de red cuando es detectado en el momento del arranque (o por demanda). Para listarlas utilizamos el comando ifconfig:

# ifconfig -a

eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX

inet addr:192.168.2.100 Bcast:192.168.2.255 Mask:255.255.255.0

inet6 addr: fe80::20c:6eff:fea1:1c34/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:3330 errors:0 dropped:0 overruns:0 frame:0

TX packets:3069 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:3423112 (3.2 MiB) TX bytes:309987 (302.7 KiB)

Interrupt:185 Base address:0xe000

eth1 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX

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)

Interrupt:193 Base address:0xc000

eth2 Link encap:UNSPEC HWaddr XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX-XX

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)

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:426 errors:0 dropped:0 overruns:0 frame:0

TX packets:426 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:83100 (81.1 KiB) TX bytes:83100 (81.1 KiB)

sit0 Link encap:IPv6-in-IPv4

NOARP MTU:1480 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:0

RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

La interfaz lo corresponde a localhost o loopback, eth0 y eth1 corresponden a sendas tarjetas de red (nvidia y 3Com).

Otras interfaces son sit0 que es una interfaz especial que se crea automáticamente para dar soporte al IPv6 (es como un dispositivo para hacer tuneles IPV6 sobre una red IPV4).

# lsmod |grep ipv6

ipv6 262404 8

Por último la interfaz eth2, no se exactamente que es, pero posiblemente se haya creado automáticamente al darle soporte al núcleo para IPv6…

Hostname

El archivo /etc/hostname es usado por hostname al arrancar el sistema para asignar el nombre de host al equipo. Por el contrario el comando hostname muestra el nombre de host designado para el equipo o asigna uno nuevo pero no guarda los cambios en /etc/hostname, solo lo mantiene en memoria hasta que se reinicie la máquina.

Si queremos que /etc/hostname tenga el nombre de dominio al reiniciar la máquina simplemente tendríamos que editarlo a mano o redirecionar la salida de hostname escribiendo el nombre de dominio recientemente asignado sobre /etc/hostname.

# hostname nombre_dominio

# hostname > /etc/hostname

# echo “nombre_dominio” > /etc/hostname

Si realmente queremos aplicar los cambios de forma permanente debemos asegurarnos de que el archivo /etc/hosts contenga el actual nombre del sistema que hemos elegido.

El archivo de /etc/hosts tiene una sintaxis como sigue:

dirección_ip       nombre_completo     alias

Donde la dirección ip es la que tiene asignada la maquina, alias es el hombre del host y nombre completo es el nombre con todo y el dominio.

# cat /etc/hosts

127.0.0.1 localhost.localdomain localhost

192.168.2.100 AMD2600

Interfaces

# cat /etc/network/interfaces

auto lo

face lo inet loopback

auto eth0

iface eth0 inet static

address 192.168.2.100

netmask 255.255.255.0

network 192.168.2.0

broadcast 192.168.2.255

gateway 192.168.2.1

dns-nameservers 217.76.129.4

Lo primero que se define es la interfaz loopback para los programas que funcionan como servicios de red, y necesitan enviarse datos a si mismos. Es una interfaz ficticia que hace que todo lo que se envía por ese interfaz se vuelve a recibir en el ordenador incluso cuando el ordenador no esta conectado a la red.

A continuación se define la interfaz eth0 como estática, ya que aunque el router al que conecto dispone del servicio DHCP no lo utilizo por tema de mapeo de puertos, ya que dependiendo de que máquina encienda primero, automáticamente cogería la primera dirección ip disponible, por lo que podría tener puertos abiertos sin tener instalado el servicio (web, ftp, ssh, vnc…)
El ordenador sobre el que he realizado el trabajo se encuentra en la red 192.168.2.0 y la puerta de enlace (entrada al router) es 192.168.2.1.
La línea dns-nameserver se encuentra controlada por el paquete resolvconf, y especifican información para la administración dinámica de la información relativa a los servidores de nombres disponibles.

# dpkg –l | grep resolvconf

ii resolvconf 1.28 nameserver information handler

Resolvconf se posiciona como intermediario entre los programas que controlan las interfaces de red y suministran información de los servidores de nombre, y las aplicaciones que necesitan de dicha información.

Cuando se activa la interfaz, los argumentos de las opciones dns-* quedan disponibles para resolvconf para su inclusión en resolv.conf.

# cat /etc/resolv.conf

nameserver 217.76.128.4

nameserver 217.76.129.4

Estos apuntes fueron realizados por mí como trabajo para una de las unidades del curso Administración y Explotación de redes TCP/IP bajo Linux de la CEA (Confederación de Empresarios de Andalucía) que realicé en el año 2004/2005.  En aquellos tiempos mis conocimientos en GNU/Linux debían de ser limitados puesto que llevaba apenas dos años trabajando con este Sistema Operativo, por lo que la información aquí reflejada puede ser inexacta o imcompleta. Al igual que el resto de los contenidos incluidos en mi Blog, se permite la utilización de los contenidos bajo cualquier licencia únicamente citando el autor de la obra original.