3.1. Configuracion del núcleo

Muchas distribuciones de GNU/Linux vienen con discos de arranque que funcionan con el hardware para PC más común. Normalmente, el núcleo suministrado es altamente modulable e incluye casi cualquier controlador que pueda necesitar. Esta es una gran idea para los discos de arranque, pero no es lo que usted probablemente quiera para un uso a largo plazo. No es un buen sistema tener almacenados controladores en su disco que nunca va a usar. Por lo tanto, será conveniente crear su propio núcleo e incluir sólo aquellos controladores que realmente necesite o desee; de esta forma ahorrará un poco de espacio en disco y reduce el tiempo que lleva compilar un núcleo nuevo.

En cualquier caso, al trabajar con un sistema GNU/Linux, le deberá ser familiar la compilación de un núcleo. Piense en esto como si fuera un tránsito, una afirmación de una de las cosas que hace al software libre más poderoso de lo que ya es— usted tiene las fuentes. Este no es un caso de, “tengo que compilar un núcleo,” más bien es el caso de, “puedo compilar un núcleo.” Los conceptos básicos de la compilacion de un núcleo Linux se explican en la Guía de Matt Welsh: "instalación y primeros pasos", que también forma parte de la serie del Proyecto de Documentación de GNU/Linux. Por tanto, en esta sección solo trataremos las opciones de configuración que afectan a la red.

Un punto importante que vamos a repetir aquí es la forma en que funciona el esquema de numeración de la versión del núcleo. Los núcleos Linux son numerados en el siguiente formato: 2.2.14. El primer dígito indica el número de versión primario. Este dígito cambia cuando hay cambios numerosos y significativos en el diseño del núcleo. Por ejemplo, el núcleo cambio del 1 al 2 cuando obtuvo soporte para máquinas de diferente arquitectura a la Intel x86 (la del PC). El segundo número es el número de versión secundario. En muchos aspectos, este número es el más importante a tener en cuenta. La comunidad de desarrolladores de Linux ha adoptado un estándar en el cual un número de versión secundario par indica que el núcleo está en producción, o es estable, y un número de versión secundario impar indica que el núcleo esta en desarrollo, o es inestable. Debe usar los núcleos estables para los equipos importantes, ya que han sido comprobados más a fondo. Los núcleos en desarrollo son los que debe de usar si está interesado en experimentar con las últimas características de Linux., pero éstos pueden tener muchos problemas que todavía no han sido corregidos. El tercer número es simplemente un incremento por cada liberación de una versión secundaria.[1]

Al ejecutar make menuconfig, aparecerá un menú de texto que le mostrará una lista de cuestiones sobre la configuración, como por ejemplo, si desea usar la emulación del coprocesador matemático en el núcleo. Una de esas cuestiones pregunta si desea soporte para redes TCP/IP. Debe contestar con y para que el núcleo sea capaz de trabajar con redes TCP/IP.

3.1.1. Opciones del Núcleo Linux 2.0 y superiores

Después de completar la sección de opciones generales, se le preguntará si quiere incluir soporte para varios tipos de dispositivos, como controladoras SCSI o tarjetas de sonido. El cursor le indicará qué opciones están disponibles. Puede pulsar ? para obtener una descripción de la opción en la que se encuentre. Siempre tiene la opción de sí (y) para incluir dicho componente de forma estática en el núcleo, o no (n) para excluir el componente completamente. Aparte puede ver la opción de módulo (m) para que dicho componente sea compilado como un módulo cargable. Los módulos necesitan ser cargados antes para que puedan ser usados, ésto es útil para controladores de componentes que no usa muy a menudo.

La siguiente lista de preguntas trata sobre el soporte de red. El juego exacto de opciones de configuración cambia constantemente debido al continuo desarrollo. Una lista típica de las opciones ofrecidas por la mayoría de las versiones del núcleo en torno a las 2.0 y 2.1 puede ser ésta:
    *
    * Network device support
    *
    Network device support (CONFIG_NETDEVICES) [Y/n/?]

Debe responder a esta cuestión con y si quiere usar cualquier tipo de dispositivo de red, ya sea Ethernet, SLIP, PPP, o el que sea. Cuando conteste a la pregunta cony, el soporte para los dispositivos Ethernet será activado automáticamente. Deberá responer a otras preguntas si quiere habilitar el soporte de otros tipos de controladores de red:

    PLIP (parallel port) support (CONFIG_PLIP) [N/y/m/?] y
    PPP (point-to-point) support (CONFIG_PPP) [N/y/m/?] y
    *
    * CCP compressors for PPP are only built as modules.
    *
    SLIP (serial line) support (CONFIG_SLIP) [N/y/m/?] m
    CSLIP compressed headers (CONFIG_SLIP_COMPRESSED) [N/y/?] (NEW) y
    Keepalive and linefill (CONFIG_SLIP_SMART) [N/y/?] (NEW) y
    Six bit SLIP encapsulation (CONFIG_SLIP_MODE_SLIP6) [N/y/?] (NEW) y

Estas cuestiones conciernen a varios protocolos de la capa de enlace que Linux soporta. PPP y SLIP le permiten transportar datagramas IP a través de líneas serie. PPP es usado actualmente por un grupo de protocolos para enviar el tráfico de la red a través de líneas serie. Algunos de los protocolos que forman PPP gestionan la manera de poderse autentificar en el servidor, mientras otros gestionan el modo en que ciertos protocolos son transportados por el enlace—PPP no esta limitado a transportar solo datagrama TCP/IP; además de este protocolo también puede transportar otros como el IPX.

Si responde y o m al soporte para SLIP, le serán preguntadas tres cuestiones que trataremos más abajo. La opción de comprimir las cabeceras permite el soporte para CSLIP, una técnica que comprime las cabeceras TCP/IP a solo 3 pequeños bytes. Recuerde que esta opción del núcleo no activa automáticmente el CSLIP; simplemente provee las funciones necesarias al núcleo para ello. La opción Keepalive and linefill causa que el soporte de SLIP genere periódicamente actividad en la línea para prevenir que ésta sea desconectada por inactividad. La opción Six bit SLIP encapsulation le permite ejecutar SLIP sobre líneas y circuitos que no son capaces de transmitir el grupo de 8-bit de datos correctamente. Esto es similar al uuencoding o la técnica binhex usada para enviar ficheros binarios por e-mail.

PLIP proporciona una forma de enviar datagramas IP a través de una conexión por puerto paralelo. Esto es usado comúnmente para comunicarse con PCs que usan DOS. En el hardware tíipico de PC, PLIP puede ser más rápido que PPP o SLIP, pero requiere mucha más CPU para funcionar, además cuando la tasa de transferencia sea buena, otras tareas en la máquina podrían volverse más lentas.

A medida que se desarrollan más controladores, la lista de preguntas en esta sección se hace mayor. Si desea compilar un núcleo que se pueda usar en varias máquinas, o si su máquina tiene más de un tipo de tarjeta de red instalada, puede activar más de un controlador:

     .
     .
    Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]
    3COM cards (CONFIG_NET_VENDOR_3COM) [Y/n/?]
    3c501 support (CONFIG_EL1) [N/y/m/?]
    3c503 support (CONFIG_EL2) [N/y/m/?]
    3c509/3c579 support (CONFIG_EL3) [Y/m/n/?]
    3c590/3c900 series (592/595/597/900/905) "Vortex/Boomerang" support/
        (CONFIG_VORTEX) [N/y/m/?]
    AMD LANCE and PCnet (AT1500 and NE2100) support (CONFIG_LANCE) [N/y/?]
    AMD PCInet32 (VLB and PCI) support (CONFIG_LANCE32) [N/y/?] (NEW)
    Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [N/y/?]
    WD80*3 support (CONFIG_WD80x3) [N/y/m/?] (NEW)
    SMC Ultra support (CONFIG_ULTRA) [N/y/m/?] (NEW)
    SMC Ultra32 support (CONFIG_ULTRA32) [N/y/m/?] (NEW)
    SMC 9194 support (CONFIG_SMC9194) [N/y/m/?] (NEW)
    Other ISA cards (CONFIG_NET_ISA) [N/y/?]
    Cabletron E21xx support (CONFIG_E2100) [N/y/m/?] (NEW)
    DEPCA, DE10x, DE200, DE201, DE202, DE422 support (CONFIG_DEPCA) [N/y/m/?]/
        (NEW)
    EtherWORKS 3 (DE203, DE204, DE205) support (CONFIG_EWRK3) [N/y/m/?] (NEW)
    EtherExpress 16 support (CONFIG_EEXPRESS) [N/y/m/?] (NEW)
    HP PCLAN+ (27247B and 27252A) support (CONFIG_HPLAN_PLUS) [N/y/m/?] (NEW)
    HP PCLAN (27245 and other 27xxx series) support (CONFIG_HPLAN) [N/y/m/?]/
        (NEW)
    HP 10/100VG PCLAN (ISA, EISA, PCI) support (CONFIG_HP100) [N/y/m/?] (NEW)
    NE2000/NE1000 support (CONFIG_NE2000) [N/y/m/?] (NEW)
    SK_G16 support (CONFIG_SK_G16) [N/y/?] (NEW)
    EISA, VLB, PCI and on card controllers (CONFIG_NET_EISA) [N/y/?]
    Apricot Xen-II on card ethernet (CONFIG_APRICOT) [N/y/m/?] (NEW)
    Intel EtherExpress/Pro 100B support (CONFIG_EEXPRESS_PRO100B) [N/y/m/?]/
        (NEW)
    DE425, DE434, DE435, DE450, DE500 support (CONFIG_DE4X5) [N/y/m/?] (NEW)
    DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP) [N/y/m/?] (NEW)
    Digi Intl. RightSwitch SE-X support (CONFIG_DGRS) [N/y/m/?] (NEW)
    Pocket and portable adaptors (CONFIG_NET_POCKET) [N/y/?]
    AT-LAN-TEC/RealTek pocket adaptor support (CONFIG_ATP) [N/y/?] (NEW)
    D-Link DE600 pocket adaptor support (CONFIG_DE600) [N/y/m/?] (NEW)
    D-Link DE620 pocket adaptor support (CONFIG_DE620) [N/y/m/?] (NEW)
    Token Ring controlador support (CONFIG_TR) [N/y/?]
    IBM Tropic chipset based adaptor support (CONFIG_IBMTR) [N/y/m/?] (NEW)
    FDDI controlador support (CONFIG_FDDI) [N/y/?]
    Digital DEFEA and DEFPA adapter support (CONFIG_DEFXX) [N/y/?] (NEW)
    ARCnet support (CONFIG_ARCNET) [N/y/m/?]
      Enable arc0e (ARCnet "Ether-Encap" packet format) (CONFIG_ARCNET_ETH)/
          [N/y/?] (NEW)
      Enable arc0s (ARCnet RFC1051 packet format) (CONFIG_ARCNET_1051)/
          [N/y/?] (NEW)
     .
     .

Finalmente, en la sección de los sistemas de ficheros, el script de configuración le preguntará si desea soporte para NFS (networking file system), el sistema de ficheros en red. NFS le permite exportar sistemas de ficheros en varios hosts, haciendo que los ficheros aparezcan como si estuvieran en un disco duro normal y corriente conectado al host.

    NFS file system support (CONFIG_NFS_FS) [y]
Describiremos el NFS con detalle en Capítulo 14.

3.1.2. Opciónes de red del núcleo de GNU/Linux 2.0.0 and Higher

Linux 2.0.0 marcó un cambio significativo en el trabajo en red de GNU/Linux. Muchas características formaron parte estándar del núcleo, como el soporte para IPX. También fueron añadidas y hechas configurables un buen número de opciones. Muchas de esas opciones son usadas sólo en circunstancias muy especiales y no vamos a tratarlas en detalle. El Redes COMO tratará probablemente lo que no está tratado aquí. Vamos a listar unas cuantas opciones útiles en esta sección, y explicaremos cuando debe usar cada una.

    Networking options  --->
        [*] TCP/IP networking

        [*] IP: forwarding/gatewaying

Virtual hosting

Estas opciones permiten configurar más de una dirección IP para una única interfaz. Esto es útil si quiere hacer “virtual hosting,” (alojamiento virtual), con una sola máquina que puede ser configurada para escuchar y actuar como si esta fuera varias máquinas separadas entre sí, cada una con su propia configuración de red. Más adelante hablaremos acerca del IP aliasing:

        [*] Network aliasing
    	<*> IP: aliasing support

Accounting

Esta opción le permite recolectar los datos en el caudal del tráfico IP enviados o recibidos en su máquina (trataremos esto con más detalle en Capítulo 10 ):

        [*] IP: accounting

PC hug

Esta opción evita incompatibilidades con algunas versiones de PC/TCP, una implementación comercial de TCP/IP basada en DOS para PCs. Si activa esta opción, todavía será capaz de comunicarse con máquinas UNIX normales, pero bajará el rendimiento cuando el enlace sea lento.

        --- (it is safe to leave these untouched)
        [*] IP: PC/TCP compatibility mode

Diskless booting

Esta función activa el Protocolo de Resolución de Direcciones Inverso (RARP). RARP se utiliza en clientes sin disco y terminales X para pedir su dirección IP al arrancar. Deberá activar RARP si planea ofrecer este tipo de servicios. Un pequeño programa llamado rarp, incluido con las utilidades de red estándares, se usa para añadir entradas a la tabla RARP del núcleo:

        <*> IP: Reverse ARP

MTU

Cuando enviamos datos sobre TCP, el núcleo tiene que dividir éstos en varios bloques de datos para pasarlos al nivel IP. El tamaño de estos bloques es llamado la Unidad Maxima de Transmisión (Maximum Transmission Unit), o MTU. Para los nodos accesibles a través de una red local como una Ethernet, se usa un MTU tan alto como la máxima longitud permitida para los paquetes Ethernet —1,500 bytes. Cuando enrutamos IP sobre una WAN como Internet, es preferible usar datagramas de menor tamaño para asegurarnos de que no necesitan ser partidos de nuevo a lo largo de la ruta mediante el proceso llamado fragmentación IP .[2] El núcleo es capaz de determinar automáticamente el MTU más bajo de una ruta IP y configurar automáticamente una conexión TCP para usar éste. Este comportamiento es activado por defecto. Si contesta con y a esta opción, esta característica será deshabilitada.

Si desea usar un tamaño de paquete menor para enviar datos a nodos específicos (porque, por ejemplo, los datos irán a través de un enlace SLIP), puede hacer ésto usando la opción mss de la orden route, que está descrita brevemente al final del capítulo:

        [ ] IP: Disable Path MTU Discovery (normally enabled)

Security feature

El protocolo IP soporta una característica llamada Source Routing Source Routing le permite especificar la ruta que un datagrama debe seguir mediante la grabación por usted mismo de la ruta dentro del datagrama. Esto fue alguna vez útil antes de que los protocolos de enrutamiento como RIP y OSPF se hicieran usuales. Pero hoy día es considerado una amenaza de seguridad debido a que puede facilitar a los atacantes inteligentes una forma de rodear ciertos tipos de cortafuegos evitando la tabla de enrutamiento de un enrutador. Normalmente deseará filtrar la procedencia de los datagramas externos enrutados, por lo que esta opción está activada normalmente.

        [*] IP: Drop source routed frames

Novell support

Esta opción activa el soporte para IPX, el protoco de transmisión para redes que usa Novell. GNU/Linux podría funcionar fácilmente como un enrutador IPX y su soporte es útil en entornos donde tiene servidores de ficheros Novell. El sistema de ficheros NCP también requiere tener el soporte de IPX activado en el núcleo; si desea añadir o montar sus sistemas de ficheros Novell deberá activar esta opción (hablaremos más sobre IPX y el sistema de ficheros NCP en Capítulo 15):

        <*> The IPX protocol

Amateur radio

Estas tres opciones seleccionadas dan soporte para los tres protocolos de Radio soportados por Linux: AX.25, NetRom y Rose (No vamos a describirlos en este libro, pero puede encontrar más informacion en el AX25 HOWTO):
        <*> Amateur Radio AX.25 Level 2
        <*> Amateur Radio NET/ROM
        <*> Amateur Radio X.25 PLP (Rose)

Linux soporta otro tipo de controlador: el controlador vacío (dummy). la siguiente pregunta aparece hacia el comienzo de la sección de controladores de dispositivos:
        <*> Dummy net controller support

El controlador vacío no hace realmente gran cosa, pero es bastante útil en nodos aislados o conectados mediante PPP/SLIP. Es básicamente una interfaz enmascarada del bucle local. En nodos que tienen PPP/SLIP pero no otras interfaces de red, es necesario tener una interfaz que contínuamente gestione las direcciones IP. Ésto se tratará con más detalle en Sección 5.7.7 en Capítulo 5. Recuerde que actualmente puede obtener el mismo resultado usando la característica IP alias y configurando sus direcciones IP como alias en la interfaz de bucle local.

Notas

[1]

La gente suele usar núcleos en desarrollo e informar de los fallos que encuentra, hacer esto es algo muy útil si tiene una máquina que pueda usar como máquina de pruebas. Las instrucciones de cómo informar de los fallos están detalladas en el fichero /usr/src/linux/REPORTING-BUGS del código fuente del núcleo Linux.

[2]

Recuerde, el protocolo IP puede ser transportado sobre multitud de tipos diferentes de redes, y no todas las redes podrán soportar tamaños de paquetes tan largos como los de las Ethernet.