3.1. Configuracion del kernel

Muchas distribuciones de linux vienen con discos de arranque que funcionan con el hardware para PC mas comun. Normalmente, el nucleo suministrado es altamente modulable e incluye casi cualquier driver 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 drivers en su disco que nunca va a usar. Por lo tanto, sera conveniente crear su propio kernel e incluir solo aquellos drivers que realmente necesita o desea; de esta forma ahorrara un poco de espacio en disco y reduce el tiempo que lleva compilar un nuevo kernel.

En cualquier caso, al trabajar con un sistema Linux, le debera ser familiar la construccion de un kernel. Piense en esto como si fuera un transito, una afirmacion de una de las cosas que hace al software libre mas poderoso de lo que ya es— usted tiene las fuentes. Este no es un caso de, “tengo que compilar un kernel,” mas bien es el caso de, “puedo compilar un kernel.” Los conceptos basicos de la compilacion de un Kernel 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 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 aqui es la forma en que funciona el esquema de numeracion de la version del kernel. Los kernels de Linux son numerados en el siguiente formato: 2.2.14. El primer digito indica el numero de version primario. Este digito cambia cuando hay cambios numerosos y significativos en el diseño del kernel. Por ejemplo, el kernel cambio del 1 al 2 cuando obtuvo soporte para maquinas de diferente aquitectura a la Intel x86 (la del PC). El segundo numero es el numero de versión secundario En muchos aspectos, este numero es el mas importante a tener en cuenta. La comunidad de desarrolladores de linux ha adoptado un estandar en el cual un numero de version secundario par indica que el kernel esta en produccion, o es estable, y un numero de version secundario impar indica que el kernel esta en desarrollo, o es inestable. Debe usar los kernels estables para los equipos importantes, ya que han sido testeados mas a fondo. Los kernels en desarrollo son los que debe de usar si esta interesado en experimentar con las ultimas caracteristicas de Linux., pero estos pueden tener muchos probremas que todavia no han sido corregidos. El tercer numero es simplemente un incremento por cada liberacion de una version secundaria.[1]

Al ejecutar make menuconfig, aparecera un menu de texto que le mostrara una lista de cuestiones sobre la configuracion, como por ejemplo, si desea usar la emulacion del coprocesador matematico en el kernel. Una de esas questiones pregunta si desea soporte para redes TCP/IP. Debe contestar con y para que el kernel sea capaz de trabajar con redes TCP/IP.

3.1.1. Opciones del Kernel en Linux 2.0 y superiores

Despues de completar la sección de opciones generales, se le preguntara si quiere incluir soporte para varios tipos de dispositivos, como controladoras SCSI o tarjetas de sonido. El cursor le indicara que opciones estan disponibles. Puede pulsar ? para obtener una descripcion de la opcion en la q se encuentre. Siempre tiene la opcion de si (y) para incluir dicho componente de forma estatica en el kernel, o no (n) para excluir el componente completamente. Aparte puede ver la opcion de modulo (m) para que dicho componente sea compilado como un modulo cargable. Los modulos necesitan ser cargados antes para que puedan ser usados, esto es util para drivers de componentes que no usa muy amenudo.

La siguiente lista de preguntas trata sobre el soporte de red. El juego exacto de opciones de configuracion cambia constantemente debido al continuo desarrollo. Una lista tipica de las opciones ofrecidas por la mayoria de las versiones del kernel en torno a las 2.0 y 2.1 puede ser esta:
    *
    * Network device support
    *
    Network device support (CONFIG_NETDEVICES) [Y/n/?]

Debe responder a esta cuestion 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 sera activado automaticamente. Debera responer a otras preguntas si quiere habilitar el soporte de otros tipos de drivers 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 traves de lineas serie. PPP es usado actualmente por un grupo de protocolos para enviar el trafico de la red a traves de lineas serie. Algunos de los protocolos que forman el 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 datagramas TCP/IP; ademas de este protocolo tambien puede transportar otros como el IPX.

Si responde y o m al soporte para SLIP, le seran preguntadas tres cuestiones que trataremos mas abajo. La opcion de comprimir las cabezeras permite el soporte para CSLIP, una tecnica que comprime las cabeceras TCP/IP a solo 3 pequeños bytes. Recuerde que esta opcion del kernel no activa automaticmente el CSLIP; simplemente provee las funciones necesarias al nucleo para ello. La opcion Keepalive and linefill causa que el soporte de SLIP genere periodicamente actividad en la linea para prevenir que esta sea desconectada por inactividad. La opcion Six bit SLIP encapsulation le permite ejecutar SLIP sobre lineas y circuitos que no son capaces de transmitir el grupo de 8-bit de datos correctamente. Esto es similar al uuencoding o la tecnica binhex usadas para enviar ficheros binarios por e-mail.

PLIP proporciona una forma de enviar datagramas IP a traves de una conexion por puerto paralelo. Esto es usado comunmente para comunicarse con PCs que usan DOS. En el hardware tipico de PC, PLIP puede ser mas rapido que PPP o SLIP, pero requiere mucha mas CPU para funcionar, ademas cuando la tasa de transferencia sea buena, otras tareas en la maquina podrian volverse mas lentas.

A medida que se desarrollan más controladores, la lista de preguntas en esta sección se hace mayor. Si desea contruir un kernel que se pueda usar en varias maquinas, o si su maquina tiene mas de un tipo de tarjeta de red instalada, puede activar mas de un driver:

     .
     .
    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 driver support (CONFIG_TR) [N/y/?]
    IBM Tropic chipset based adaptor support (CONFIG_IBMTR) [N/y/m/?] (NEW)
    FDDI driver 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 seccion de los sistemas de ficheros, el script de configuracion le preguntara si desea soporte para NFS (networking file system), el sistema de ficheros en red. NFS le permite exportar sistemas de ficheros a varios nodos, haciendo que los ficheros aparezcan como si estubieran en un disco duro normal y corriente conectado al nodo.

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

3.1.2. Opciones de red del kernel de Linux 2.0.0 and Higher

Linux 2.0.0 marco un cambio significativo en el trabajo en red de Linux. Muchas caracteristicas formaron parte estandar del kernel, como el soporte para IPX. Tambien fueron añadidas y hechas configurables un buen numero de opciones. Muchas de esas opciones son usadas solo en circunstancias muy especiales y no vamos a tratarlas en detalle. El Networking HOWTO tratara probablemente lo que no es tratado aqui. Vamos a listar unas cuantas opciones utiles en esta seccion, y explicaremos cuando debe usar cada una.

Basics

Para trabajar en redes TCP/IP, debe contestar a esta cuestion con y. Aun contestando con n podra compilar el kernel con soporte para IPX.

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

Gateways

Tiene que activar esta opcion si su sistema va a actuar como un gateway entre 2 redes, entre una red y un enlace SLIP, etc.. Aunque no cuesta nada activarla, asi lo esta por defecto, podria querer desactivarla para configurar el nodo como un firewall. Los Firewalls (o cortafuegos) son nodos que estan conectados a 2 o mas redes, pero que no enrutan el trafico entre ellas. Son comunmente usados para proporcionar a los usuarios acceso a internet con un riesgo minimo para la red interna. Los usuarios tienen permitido acceder al firewall y usar los servicios de internet, pero las maquinas de la copañia estan protegidas frente atakes del exterior porque las conexiones entrantes no pueden atravesar el firewall (los firewalls son tratados con mas detalle en Capítulo 9 ):

        [*] IP: forwarding/gatewaying

Virtual hosting

Estas opciones permiten configurar mas de una direccion IP para una unica interface. Esto es util si quiere hacer “virtual hosting,” (alojamiento virtual), con una sola maquina que puede ser configurada para escuchar y actuar como si esta fuera varias maquinas separadas entre si, cada una con su propia configuracion de red. Mas adelante hablaremos acerca del IP aliasing:

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

Accounting

Esta opcion le permite recolectar los datos en el caudal del trafico IP enviados o llegados a su maquina (trataremos esto con mas 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 funcion actia 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 estandars, es usado para añadir entradas a la tabla RARP del kernel:

        <*> IP: Reverse ARP

MTU

Cuando enviamos datos sobre TCP, el kernel tiene que dividir estos 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 atraves de una red local como una Ethernet, se usa un MTU tan alto como la maxima 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 fragmentacion IP .[2] El kernel es capaz de determinar automaticamente el MTU mas bajo de una ruta IP y configurar automaticamente una conexion TCP para usar este. Este comportamiento es activado por defecto. Si contesta con y a esta opcion esta caracteristica sera desabilitada.

Si desea usar un tamaños de paquete menores para enviar datos a nodos especificos (porque, por ejemplo, los datos iran a traves de un enlace SLIP), puede hacer esto usando la opcion mss del comando route, que esta descrita brevemente al final del capitulo:

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

Security feature

El protocolo IP soporta una caracteristica llamada Source Routing Source routing le permite especificar la ruta que un datagrama debe seguir mediante la grabacion por usted mismo de la ruta dentro del datagrama. Esto fue alguna vez util antes de que los protocolos de enrutamiento como RIP y OSPF se hicieran usuales. Pero hoy en dia es considerado una amenaza de seguridad debido a que puede facilitar a los listos atacantes una forma de rodear ciertos tipos de firewalls evitando la tabla de enrutamiento de un router. Normalmente deseara filtrar la procedencia de los datagramas externos enrutados, por lo que esta opcion esta normalmente activada.

        [*] IP: Drop source routed frames

Novell support

Esta opcion activa el soporte para IPX, el protoco de transmision para redes que usa Novell. Linux podria funcionar facilmente como un router IPX y su soporte es util en entornos donde tiene servidores de ficheros Novell. El sistema de ficheros NCP tambien requiere tener el soporte de IPX activado en el kernel; si desea añadir o montar sus sistemas de ficheros Novell debera activar esta opcion (hablaremos mas 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 mas 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 driver: el driver vació (dummy). la siguiente pregunta aparece hacia el comienzo de la sección de controladores de dispositivos:
        <*> Dummy net driver support

El driver vació no hace realmente gran cosa, pero es bastante útil en nodos aislados o conectados mediante PPP/SLIP. Es basicamente una interface enmascarada del loopback. En nodos que tienen PPP/SLIP pero que no otras interfaces de red, es necesario tener una interface que continuamente maneje las direcciones IP. Esto se tratara con mas detalle en Sección 5.7.7" en Capítulo 5. Recuerde que actualmente puede obtener el mismo resultado usando la caracteristica IP alias y configurando sus direcciones IP como alias en la interface loopback.

Notas

[1]

La gente suele usar kernels en desarrollo e informar de los fallos que encuentra, hacer esto es algo muy util si tiene una maquina que pueda usar como maquina de pruebas. Las Instrucciones de como informar de los fallos estan detalladas en el fichero /usr/src/linux/REPORTING-BUGS del codigo fuente del kernel Linux.

[2]

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