%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                       Legal Notice                            %
%                                                               %
% This document is copyright (C) Olaf Kirch, okir@monad.swb.de  %
%                                                               %
% For copying conditions, please refer to the file COPYING.     %
%                                                               %
% The author is not liable for any damages, direct or indirect, %
% resulting from the use of information provided in this        %
% document.                                                     %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% When viewing this document with vi on an 80-columns screen,   %
% do a ':se nonumber' first.                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Revisado en 21-Febrero-1999 por:
%   Juan Jose Amor <jjamor@ls.fi.upm.es>
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%               S T A R T   O F   C H A P T E R                 %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Configuraci\'on del Protocolo TCP/IP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface}
En este cap\'{\i}tulo recorreremos todos los pasos necesarios para
configurar el protocolo TCP/IP en su m\'{a}quina. Empezando en la
asignaci\'{o}n de direcciones IP, iremos describiendo la
configuraci\'{o}n de las interfaces TCP/IP e introduciremos unas
cuantas herramientas que resultan bastante \'{u}tiles a la hora de
resolver problemas surgidos durante la instalaci\'{o}n de la red.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{macros rc@\file{rc} macros}
\index{Sequencia de Arranque}
\index{inicializando la red}
\index{red!arranque}
\index{rc.inet@\file{rc.inet}}
\index{rc.inet@\file{rc.inet}}

La mayor\'{\i}a de las tareas descritas en este cap\'{\i}tulo,
generalmente,  s\'{o}lo habr\'{a} de ejecutarlas una \'{u}nica vez. 
Una vez hecho esto, s\'{o}lo tendr\'{a} que tocar alguno de los
ficheros de configuraci\'{o}n cuando a\~{n}ada un nuevo sistema a su
red, o si decide reconfigurar el sistema completamente. Algunos de los
comando usados para configurar el protocolo TCP/IP, sin embargo,
deben ser ejecutados cada vez que se arranca el sistema. La forma
usual de llevar esto a cabo es a trav\'{e}s de los scripts \file{/etc/rc}.

Generalmente, las partes espec\'{\i}ficas de la red est\'{a}n
contenidas en una macro llamada \file{rc.net} o
\file{rc.inet}. A veces tambi\'{e}n son llamadas \file{rc.inet1} o
\file{rc.inet2}, siendo la primera la encargada de inicializar la
parte del n\'{u}cleo que se ocupa de las comunicaciones, mientras que la
segunda es la que se encarga de arrancar los servicios b\'{a}sicos y
las aplicaciones. En todo lo que sigue, asumir\'{e} que es \'{e}sta la
estructura presente en el sistema.

M\'{a}s abajo describir\'{e} las acciones llevadas a cabo por
\file{rc.inet1}, mientras que las aplicaciones son cubiertas por los
cap\'{\i}tulos posteriores. Al finalizar este cap\'{\i}tulo, deber\'{\i}a
usted haber establecido la secuencia de comandos que configuran
correctamente el protocolo TCP/IP en su ordenador. Substituya los
comandos de ejemplo en \file{rc.inet1} por los suyos propios;
aseg\'{u}rese de que \file{rc.inet1} es ejecutada en el arranque y
rearranque su m\'{a}quina. Los scripts \file{rc} que acompa\~nen a su
distribuci\'{o}n de \linux{} favorita deber\'{\i}an ser un buen
ejemplo.


\section{Configuraci\'on del Sistema de Ficheros \file{proc}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.procfs}
\index{montando!sistema de ficheros proc@El sistema de ficheros \file{proc}}
\index{proc sistema de ficheros@\file{proc} sistema de ficheros}

Algunas de las herramientas de configuraci\'{o}n de Net-2 utilizan el
sistema de ficheros \file{proc} para comunicarse con el n\'{u}cleo. Se
trata de una interface que permite el acceso a la informaci\'{o}n del
kernel en funcionamiento a trav\'{e}s de un sistema de ficheros. Una
vez ha sido montado, se pueden listar los ficheros y ver su contenido
como en cualquier otro sistema de ficheros. Normalmente aparecen
ficheros como \file{loadavg}, que contiene la carga media del
sistema, o \file{meminfo}, que contiene informaci\'{o}n sobre la
memoria f\'{\i}sica y virtual.

\index{/proc/net@\file{/proc/net}}
El c\'{o}digo de redes a\~{n}ade a esto el directorio \file{net}.
Este directorio contiene una serie de ficheros con informaci\'{o}n
sobre las tablas ARP del n\'{u}cleo, el estado de las conexiones TCP y
las tablas de encaminamiento. La mayor\'{\i}a de las herramientas de
administraci\'{o}n de redes utilizan estos ficheros para acceder a la
informaci\'{o}n que precisan.

\index{fstab@\file{fstab}} El sistema de ficheros \file{proc}
(tambi\'{e}n llamado \file{procfs}) es montado generalmente en
\file{/proc} durante el arranque. El mejor m\'{e}todo consiste en
a\~{n}adir la siguiente l\'{\i}nea al fichero \file{/etc/fstab}:

\begin{tscreen}
\begin{verbatim}
# Lugar de montaje de procfs:
none            /proc           proc    defaults
\end{verbatim}
\end{tscreen}

\noindent
y ejecutar ``\term{mount /proc}'' desde uno de los macros \file{/etc/rc}.

El \file{procfs} viene configurado actualmente en la mayor\'{\i}a de
los n\'{u}cleos por defecto. Si no tiene el \file{procfs} en su
n\'{u}cleo, al intentar montarlo obtendr\'{a} el mensaje
``\term{mount: fs type procfs not supported by kernel}''. De ser
as\'{\i} tiene que recompilar el n\'{u}cleo asegur\'andose de
configurarlo incluyendo el soporte para \file{procfs}.


\section{Instalaci\'{o}n de los Ejecutables}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.binaries}
\index{instalaci\'{o}n!ejecutables de comunicaciones en red}

Si est\'{a} utilizando alguna de las distribuciones de \linux{},
probablemente incluir\'a las aplicaciones y utilidades de red
fundamentales as\'{\i} como un conjunto coherente de ficheros de
configuraci\'{o}n de ejemplo. El \'{u}nico caso en el que tendr\'{\i}a
que conseguir e instalar las nuevas utilidades es en el caso de instalar
una nueva versi\'{o}n del n\'{u}cleo. De forma ocasional, esto supone
cambios en la capa de comunicaciones del n\'{u}cleo. Eso
significar\'{\i}a tener que actualizar tambi\'{e}n las herramientas de
configuraci\'{o}n. Esto se traduce en, al menos, la necesidad de
recompilar, aunque a veces es posible conseguir un conjunto de
ejecutables actualizados en ficheros llamados
\file{net-\var{XXX}.tar.gz}, donde  \var{XXX}\/ es la versi\'{o}n de
que se trate. En el caso de \linux{}~1.0 es la n\'{u}mero 0.32b, y la
versi\'{o}n del n\'{u}cleo en el momento en que se escribi\'{o} este
libro (1.1.12 y posterior) requiere 0.32d.

Si quiere compilar e instalar las aplicaciones est\'andar de
comunicaciones TCP/IP, puede obtener los ficheros fuente de la
mayor\'{\i}a de los servidores FTP de \linux{}. Se trata de versiones
modificadas de las fuentes de Net-BSD y otros. Otras aplicaciones,
como \prog{Xmosaic}, \prog{xarchie}, o Gopher y los clientes IRC deben
obtenerse por separado. La mayor\'{\i}a compila sin necesidad de
modificaciones si se siguen las instrucciones particulares. 


\index{obtenci\'{o}n de c\'{o}digo fuente}
\index{FTP, ubicaci\'{o}n de c\'{o}digo de \linux{}}
\index{Net-2e}
\index{Net-3}
\index{Net-BSD}
El servidor FTP oficial de Net-3 es \host{sunacm.swan.ac.uk}, que es
replicado en \host{sunsite.unc.edu} bajo \file{system/Network/sunacm}.
El \'{u}ltimo parche y los ejecutables de Net-2e est\'{a}n disponibles en
\host{ftp.aris.com}.  El c\'{o}digo derivado de BSD, de Matthias
Urlichs, se encuentra en \host{ftp.ira.uka.de}, en el directorio
\file{/pub/system/linux/netbsd}.


\section{Otro Ejemplo}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.brewery}
\index{Cervecera Virtual}
\index{Cervecera, Virtual}

Para lo que queda de este libro, voy a utilizar un ejemplo menos
complejo que el de la Universidad Groucho Marx, y que puede acercarse
m\'{a}s a las tareas que realmente tendr\'{a} que realizar. La
Cervecera Virtual, es una peque\~{n}a compa\~{n}ia que produce, como
su nombre indica, cerveza virtual. Para gestionar su negocio
m\'{a}s eficientemente, los cerveceros virtuales quieren conectar sus
ordenadores, que casualmente son PCs bajo \linux{} 1.0, en red.

En el mismo piso, justo al otro lado del edificio se, encuentra la
Vinatera Virtual, que trabaja de cerca con la cervecera. La vinatera
tiene una red Ethernet propia. Naturalmente, ambas compa\~{n}\'{\i}as
quieren unir sus redes una vez que \'{e}stas se encuentren
operacionales.  Como un primer paso, quieren establecer una
pasarela que
pase los datagramas de una subred a otra. Para m\'{a}s tarde, tienen
planeado establecer un enlace UUCP con el exterior, a trav\'{e}s del
cual intercambiar\'{a}n noticias y correo electr\'{o}nico. A largo
plazo, quieren establecer una conexi\'{o}n ocasional usando SLIP con
la Internet. 


\section{Establecimiento del Nombre de la M\'{a}quina}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.hostname}
\index{hostname!establecimiento}
\index{configuraci\'{o}n!hostname}
\index{establecimiento!hostname}
\index{nombre de la m\'{a}quina!establecimiento}
\index{configuraci\'{o}n!nombre de la m\'{a}quina}
\index{establecimiento!nombre de la m\'{a}quina}

La mayor\'{\i}a de las aplicaciones de red, si no todas, asumen que el
nombre dado a la m\'{a}quina local tiene un valor razonable. Este
proceso tiene lugar durante el arranque cuando se ejecuta el comando
\prog{hostname}. Para llamar \var{nodo1} a un ordenador ejecutar\'{\i}a


\begin{tscreen}
 \# hostname \var{nodo1}
\end{tscreen}

Es una pr\'{a}ctica com\'{u}n usar el nombre sin cualificarlo con el
dominio de red. As\'{\i} pues, supongamos que las m\'{a}quinas de la Cervecera
Virtual se llamaran \host{vale.vbrew.com}, \mbox{\host{vlager.vbrew.com}},
etc.  \'Estos son los nombres oficiales, los nombres {\it completamente
cualificados de dominio} (FQDN\footnote{N. del T.: Del ingl\'{e}s fully
  qualified domain name}). Los nombres locales ser\'{\i}an por tanto
\'{u}nicamente el primer componente del nombre, como por ejemplo
\host{vale}. Sin embargo, dado que el nombre local se usa
frecuentemente para buscar la direcci\'{o}n IP correspondiente,
debe asegurarse de que la tabla que contiene esa informaci\'{o}n sea
capaz de encontrarla. Esto generalmente equivale a a\~{n}adir el
nombre local al fichero \file{/etc/hosts} (ver m\'{a}s abajo).


\index{dominio, nombre de!NIS vs. DNS}
\index{dominio, nombre de@\prog{domainname}}
\index{configuraci\'{o}n!dominio, nombre de}
Algunas personas sugieren la utilizaci\'{o}n del comando
\prog{domainname} para fijar el valor del dominio para el
n\'{u}cleo. As\'{\i}, para obtener el FQDN combinar\'{\i}amos la salida
de \prog{hostname} y
\prog{domainname}. Sin embargo esto es, en el mejor de los casos, una verdad
a medias. \prog{domainname} se usa por lo general para establecer el
domino NIS al que pertenece la m\'{a}quina que puede ser completamente
diferente al del servidor de nombres (DNS). Hablaremos de NIS en el
cap\'{\i}tulo~\ref{nis}.


\section{Asignaci\'{o}n de una direcci\'{o}n IP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.addresses}
\index{assignaci\'{o}n de la direcci\'{o}n IP}
\index{IP!direcci\'{o}n!assignaci\'{o}n}
\index{direcci\'{o}n!eligiendo (IP)}
\index{elecci\'{o}n!direcci\'{o}n IP}

Si configura su software de red para operar su m\'{a}quina de forma
aislada (por ejemplo con el objeto de utilizar el software de noticias
de red INN) puede saltarse esta secci\'{o}n pues s\'{o}lo necesita la
direcci\'{o}n de la interface de lazo.

Las cosas son algo m\'{a}s complicadas en redes reales como las
Ethernets. Si quiere conectar su ordenador a una red, tiene que
pedir a los administradores de la misma que le asignen una
direcci\'{o}n IP para esa red. Cuando es usted mismo el que
est\'{a} estableciendo la red, tendr\'{a} que ser usted quien asigne las
direcciones IP seg\'{u}n se describe a continuaci\'{o}n.

Las m\'{a}quinas de una red local deben generalmente compartir
direcciones de una subred l\'{o}gica. Por ello lo primero es asignar
una direcci\'{o}n IP para la red. Si tiene varias redes
f\'{\i}sicas, deber\'{a} asignar n\'umeros de red completamente
diferentes a cada una o dividir el rango de
direcciones IP disponibles en varias subredes. 

Si su red no esta conectada con Internet, es libre de elegir
cualquier direcci\'{o}n (v\'alida). S\'{o}lo tiene que
asegurarse de elegir una de entre los tipos A, B, o C, o, de otro modo,
no ir\'{a}n bien las cosas. Sin embargo, si planea conectarse
a la Internet en un futuro cercano, tiene usted que obtener una
direcci\'{o}n IP oficial \emph{ya}. La mejor forma es pedir ayuda
a su proveedor de servicios de Internet. Si quiere pedir una
direcci\'{o}n oficial en previsi\'{o}n de que se conecte a la Internet
alg\'{u}n d\'{\i}a, pida un formulario de solicitud de direcci\'{o}n de
red a \email{hostmaster@internic.net}.


\index{creaci\'{o}n!subredes}
\index{subred (DNS)}
\index{interface!m\'{a}scara de red}
\index{IP!m\'{a}scara de red}
Para operar varias redes Ethernet (o de otro tipo una vez que el
controlador correspondiente est\'{e} disponible), debe dividir su red en
subredes. Es importante notar que esto es \'{u}nicamente necesario si
tiene m\'{a}s de una direcci\'{o}n de ``difusi\'{o}n''(\emph{broadcast})
en la red; las conexiones punto-a-punto no cuentan. As\'{\i}, por ejemplo,
si tiene una red Ethernet y uno o m\'as enlaces SLIP con el exterior no
hace falta que divida su red. La raz\'{o}n se explica en el
cap\'{\i}tulo~\ref{slip}.


% If you do have to use subnetting, assign a number to each network you
% manage. If you have a ``backbone'' whose sole purpose is to connect the
% various subnets, remember to assign it a subnet number, too.  Then
% allocate a fraction of the IP~address' host part sufficient to hold the
% subnet numbers, plus a little room for future expansion.  Make sure the
% remaining host part bits are still sufficient to accomodate the maximum
% number of hosts you will have on any of the subnets.\footnote{
%  Of course, you may also have more complicated schemes that use different
%  netmasks for different subnets.
% }
% 
% 
% Then start assigning numbers to the hosts on each of the subnets.
% A gateway between broadcast networks needs one IP~address
% per network it is on.

A modo de ejemplo, el administrador de la red de la cervecera
solicita al NIC una direcci\'{o}n de red de tipo B, si\'{e}ndole
asignada la n\'{u}mero \host{191.72.0.0}.  Para acomodar dos redes
ethernet, decide usar ocho bits de la parte de la direcci\'{o}n
correspondiente a los ordenadores como direcci\'{o}n de subred. Eso
deja otros ocho bits para las m\'{a}quinas lo que equivale a 254 por
cada subred. La red de la cervecera se convierte as\'{\i} en la subred
1 y la de la vinatera en la subred 2. Las direcciones de red ser\'{a}n
por tanto \host{191.72.1.0} y \host{191.72.2.0}. La m\'{a}scara de red
ser\'{a} \host{255.255.255.0}.

A \host{vlager}, que act\'{u}a de pasarela entre las redes, se le
asigna el n\'{u}mero de m\'{a}quina 1 en ambas redes, lo que significa
que tiene las direcciones IP, \host{191.72.1.1} y
\host{191.72.2.1}, respectivamente.  La figura~\ref{interface.fig.subnet}
muestra las dos subredes y la m\'{a}quina que act\'{u}a de enlace.


\iftex
 \begin{figure}[tbp]
 \ifps
  \begin{center}
   \mbox{\epsffile{figures/subnet2.epsf}}
  \end{center}
 \else
  \begin{center}
   \input{subnet2.eepic}
  \end{center}
 \fi
 \caption{
  \label{interface.fig.subnet}
  Cervecera Virtual y Vinatera Virtual~-- las dos subredes.
 }
 \end{figure}
\else
\fi

Es importante notar que en este ejemplo estamos usando una red de clase
B para simplificar; una red de tipo C ser\'{\i}a m\'{a}s realista. Con
el nuevo c\'{o}digo de red, la divisi\'{o}n en subredes no est\'{a}
limitada a nivel de byte, de forma que incluso una red de clase C
puede dividirse en varias subredes. Por ejemplo, podr\'{\i}a usar 2
bits del byte de los nodos para designar la subred lo que
permite implementar cuatro subredes de 64 m\'{a}quinas cada
una.\footnote{La \'{u}ltima direcci\'{o}n en realidad se reserva como
  direcci\'{o}n de difusi\'{o}n, aquella a la que se env\'{\i}an mensajes
  destinados a todas las m\'{a}quinas de la red correspondiente, lo
  cual en realidad deja s\'{o}lo 63 por subred.}



\section{Preparaci\'on de los ficheros \file{hosts} y \file{networks}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.simple-resolv}
\index{configuraci\'{o}n!resoluci\'{o}n del nombre de una m\'{a}quina}
\index{fichero de nombre de m\'{a}quinas@fichero \file{hosts}}
\index{networks@fichero \file{networks}}
\index{nombre de m\'{a}quina!resoluci\'{o}n}
\index{red!nombres}
\index{hosts@\file{hosts}}

Una vez ha dividido su red en subredes, debe habilitar un mecanismo
simple de resoluci\'{o}n de nombres usando el fichero
\file{/etc/hosts}. Si no va a usar los sistemas DNS o NIS para la
resoluci\'{o}n de nombres, debe poner todos los nombres de las
diferentes m\'{a}quinas en el fichero \file{hosts}.


Incluso si planea utilizar los servicios DNS y NIS en condiciones
normales de operaci\'{o}n, es conveniente tener un reducido n\'{u}mero
de m\'{a}quinas en \file{/etc/hosts}. Por un lado, hay situaciones en
las que es necesario resolver algunos nombres incluso cuando no hay
servicios de red ejecut\'{a}ndose. Este es el caso del arranque. Se
trata, no s\'{o}lo de una cuesti\'{o}n de conveniencia, sino que
permite el uso de nombres simb\'{o}licos para las m\'{a}quinas citadas
en las macros \file{rc.inet}. De esta forma, para cambiar las direcciones
IP, s\'{o}lo tiene que copiar el fichero \file{hosts} modificado a
todas las m\'{a}quinas y rearrancar, en vez de tener que modificar un
gran n\'{u}mero de macros \file{rc} por separado. Generalmente,
tambi\'{e}n debe incluir los nombres y direcciones locales en
\file{hosts}, a\~{n}adiendo los de las m\'{a}quinas que enlacen varias
redes y los servidores NIS si existen.\footnote{
 S\'{o}lo necesita incluir las direcciones de los servidores NIS si
 utiliza el servidor NYS de Peter Eriksonn. Otras implementaciones de
 servidores NIS son capaces de localizar los servidores cuando
 est\'{a}n siendo ejecutados, utilizando \prog{ypbind}.
}

Tambi\'{e}n, en la fase inicial de pruebas, deber\'{\i}a asegurarse de
que el subsistema de resoluci\'{o}n utiliza la informaci\'{o}n del
fichero \file{hosts} \'{u}nicamente. Su software DNS o NIS puede
incluir ficheros de configuraci\'{o}n a modo de ejemplo que pueden
producir resultados extra\~{n}os si son usados. Para forzar a que
todas las aplicaciones utilicen \file{/etc/hosts} de forma exclusiva
cuando buscan una direcci\'{o}n IP, debe editar el fichero
\file{/etc/host.conf}. Desactive con comentarios cualquier l\'{\i}nea
que comience por \keyword{order} a\~{n}adiendo una almohadilla
(\#) e incluya la siguiente l\'{\i}nea


\begin{tscreen}
 order hosts
\end{tscreen}


La configuraci\'{o}n de la librer\'{\i}a de resoluci\'{o}n se describe
en detalle en el cap\'{\i}tulo~\ref{resolv}.

El fichero \file{hosts} contiene un registro por linea, consistente en
una direcci\'{o}n IP, un nombre de m\'{a}quina y de forma opcional,
una lista de alias para esa m\'{a}quina. Los campos se separan por
tabuladores o espacios y el campo con la direcci\'{o}n debe empezar en
la primera columna. Cualquier cosa a continuaci\'{o}n de una
almohadilla (\#) es interpretado como un comentario y es
consecuentemente ignorado.

Los nombres de las m\'{a}quinas pueden ser con cualificaci\'{o}n
completa, o relativos al dominio actual. Para la m\'{a}quina
\host{vale}, el registro generalmente incluir\'{\i}a el nombre con
cualificaci\'{o}n completa, \host{vale.vbrew.com}, y \host{vale} en el
fichero \file{hosts}, de forma que pueda ser referido usando el nombre
oficial y el nombre local que es m\'{a}s corto.

\'{E}ste es un ejemplo del aspecto que el fichero \file{hosts} de la
Cervecera Virtual podr\'{\i}a tener. Hay dos nombres especiales
\host{vlager-if1} y \host{vlager-if2}, correspondientes a las
direcciones de ambas interfaces de la m\'{a}quina existentes en \host{vlager}.


\begin{tscreen}
\begin{verbatim}
#
# Fichero Hosts de la Cervecera Virtual/Vinatera Virtual
#
# IP            local       fully qualified domain name
#
127.0.0.1       localhost
#
191.72.1.1      vlager      vlager.vbrew.com
191.72.1.1      vlager-if1
191.72.1.2      vstout      vstout.vbrew.com
191.72.1.3      vale        vale.vbrew.com
#
191.72.2.1      vlager-if2
191.72.2.2      vbeaujolais  vbeaujolais.vbrew.com
191.72.2.3      vbardolino   vbardolino.vbrew.com
191.72.2.4      vchianti     vchianti.vbrew.com
\end{verbatim}
\end{tscreen}

Del mismo modo que con las direcciones IP, a veces tambi\'{e}n
puede interesarle usar nombres simb\'{o}licos para los n\'{u}meros de
red. Con este objeto, el fichero \file{hosts} tiene un
compa\~{n}ero llamado \file{/etc/networks}, que asocia nombres de red
con los n\'{u}meros correspondientes y viceversa. En la Cervecera
Virtual, podr\'{\i}mos instalar un fichero \file{networks} como
\'{e}ste:\footnote{
 Es importante notar que los nombres en \file{networks} no deben
 coincidir con nombres de m\'{a}quinas en \file{hosts}, o algunos
 programas pueden producir resultados extra\~{n}os. 
}


\begin{tscreen}
\begin{verbatim}
# /etc/networks para la Cervecera Virtual
brew-net      191.72.1.0
wine-net      191.72.2.0
\end{verbatim}
\end{tscreen}




\section{Configuraci\'{o}n de la Interface para IP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% How to tell your interface what its IP address is.            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface}
\index{IP!configuraci\'{o}n de interface} % fuzz factor
\index{interface!configuraci\'{o}n}
\index{configuraci\'{o}n!interfaces de red}
\index{ifconfig@\prog{ifconfig}}
\index{route@\prog{route}}

\index{rc.inet@\file{rc.inet}}
\index{rc.inet@\file{rc.inet}}
Una vez ha configurado su hardware seg\'{u}n se ha explicado en el
cap\'{\i}tulo anterior, debe asegurarse de que el software de red del
n\'{u}cleo conoce esos dispositivos. Hay una serie de comandos que se
usan con objeto de configurar las interfaces de red e inicializar la
tabla de encaminamiento. Esas tareas son ejecutadas generalmente por la macro
\file{rc.inet1} cada vez que el sistema es arrancado. Las herramientas
b\'{a}sicas son \prog{ifconfig} (donde ``if'' significa interface), y
\prog{route}.


\prog{ifconfig} se usa para dar dar acceso al n\'{u}cleo a una
interface. Esto incluye la asignaci\'{o}n de una direcci\'{o}n IP~y
otros par\'{a}metros, as\'{\i} como la activaci\'{o}n de la interface. Por
activaci\'{o}n nos referimos a permitir que el
n\'{u}cleo env\'{\i}a y recibe datagramas IP~a trav\'{e}s de la
interface. El modo m\'{a}s sencillo de invocar esta herramienta es

\begin{tscreen}
 ifconfig \var{interface direccion-ip}
\end{tscreen}


\noindent
que asigna \var{direccion-ip}\/ a \var{interface} y la activa.
Los otros parametros toman valores asignados por defecto. Por ejemplo,
la m\'{a}scara de subred toma el valor correspondiente al tipo de red
al que pertenece la direcci\'{o}n IP. As\'{\i}, tendr\'{\i}amos
\host{255.255.0.0} para una direcci\'{o}n de clase~B.  \prog{ifconfig} es
descrito en detalle al final del cap\'{\i}tulo.


\prog{route} permite a\~{n}adir o quitar rutas de la tabla de
encaminamiento del n\'{u}cleo. Se puede invocar como 


\begin{tscreen}
 route [add|del] \var{destino}
\end{tscreen}


\noindent
donde los argumentos \option{add} y
\option{del} determinan, respectivamente si se debe a\~{n}adir o
borrar la ruta hacia \var{destino}.


\subsection{La Interface de Bucle o Loopback}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface.loopback}
\index{configuraci\'{o}n!interface de lazo}
\index{configuraci\'{o}n!interface de bucle}
\index{configuraci\'{o}n!loopback}
\index{loopback!interface}
\index{interface!loopback}
\index{lo (interface de lazo)@\file{lo} (interface de lazo)}

La primera interface en ser activada es la interface de lazo o loopback:


\begin{tscreen}
 \# ifconfig lo 127.0.0.1
\end{tscreen}


\index{m\'{a}quina local@\host{localhost}}
Ocasionalmente, tambi\'{e}n ver\'{a} que el nombre comod\'{\i}n
\host{localhost} es usado en vez de la direcci\'{o}n de
IP. \prog{ifconfig} buscar\'{a} el nombre en el fichero \file{hosts}
que debe contener un registro declarando {\it localhost} como nombre
v\'{a}lido para la direcci\'{o}n \host{127.0.0.1}:


\begin{tscreen}
\begin{verbatim}
# Registro ejemplo de localhost en /etc/hosts
localhost     127.0.0.1
\end{verbatim}
\end{tscreen}


\index{comprobaci\'{o}n!interface de red}
Para ver la configuraci\'{o}n de una interface, basta ejecutar el
programa \prog{ifconfig} usando el nombre de la interface como argumento:

\begin{tscreen}
\begin{verbatim}
$ ifconfig lo
lo        Link encap Local Loopback  
          inet addr 127.0.0.1  Bcast [NONE SET]  Mask 255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU 2000  Metric 1
          RX packets 0 errors 0 dropped 0 overrun 0
          TX packets 0 errors 0 dropped 0 overrun 0
\end{verbatim}
\end{tscreen}


Como podr\'{a} observar, la m\'{a}scara asignada a la interface de
lazo es \host{255.0.0.0}, debido a que \host{127.0.0.1} es una
direcci\'{o}n de clase~A. La interface no tiene establecida ninguna
direcci\'{o}n de difusi\'{o}n, ya
que \'esta no suele ser demasiado \'{u}til para lazos. Sin embargo, si
va a ejecutar el demonio \prog{rwhod} en su m\'{a}quina,
tendr\'{a} seguramente que fijar la direcci\'{o}n de difu\'{o}n del
dispositivo de lazo para que \prog{rwho} funcione correctamente. El
modo de fijar dicha direcci\'{o}n se explica en la secci\'{o}n
``\ref{iface.ifconfig}'', m\'{a}s abajo.


Ahora, ya casi puede empezar a jugar con su ``mini-red''. S\'{o}lo
resta a\~{n}adir una entrada en la tabla de encaminamiento que
comunique al IP que puede usar esa interface como ruta hacia
\host{127.0.0.1}. Para llevar esto a cabo, basta escribir:


\begin{tscreen}
 \# route add 127.0.0.1
\end{tscreen}


Tambi\'{e}n aqu\'{\i} puede usar \host{localhost} en lugar de la
direcci\'{o}n IP.


\index{comprobaci\'{o}n de la configuraci\'{o}n de red}
\index{comprobaci\'{o}n!configuraci\'{o}n de red}
\index{comprobaci\'{o}n!accesibilidad}
\index{acceso a una m\'{a}quina}
\index{Tiempo de ida y vuelta (IP)}
\index{ping@\prog{ping}}
Lo siguiente es comprobar que todo funciona como es debido, por
ejemplo usando \prog{ping}.  \prog{ping} es el equivalente a un sonar
en una red\footnote{
 ?`Alguno recuerda ``Echoes'' de Pink Floyd?
} y se usa para verificar que una direcci\'{o}n dada es
accesible y para medir el retraso entre el env\'{\i}o de un datagrama y
su recepci\'{o}n de vuelta. Este tiempo es conocido como tiempo de ida
y vuelta. 


\begin{tscreen}
\begin{verbatim}
# ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=32 time=1 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=32 time=0 ms
^C

--- localhost ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0/0/1 ms
\end{verbatim}
\end{tscreen}

Cuando se ejecuta \prog{ping} seg\'{u}n se muestra aqu\'{\i}, la
emisi\'{o}n de paquetes contin\'{u}a a menos que sea interrumpida por
el usuario. El \verb|^C| marca el momento en el que se apret\'{o} Ctrl-C.

Este ejemplo muestra que los paquetes dirigidos a la m\'{a}quina
\host{127.0.0.1} est\'{a}n siendo entregados correctamente y la
respuesta a \prog{ping} es recibida de forma casi
instant\'{a}nea. Esto significa que ha establecido con \'{e}xito su
primera interface de red. 


\index{Mensaje de error de red inaccesible@``Network Unreachable''
  mensaje de error} \index{red!inaccesible}

Si la salida de \prog{ping} no se parece a la de m\'{a}s arriba, tiene
usted problemas. Compruebe la posibilidad de que alg\'{u}n
fichero no haya sido instalado correctamente. Compruebe que los
ejecutables \prog{ifconfig} y \prog{route} son compatibles con la
versi\'{o}n del n\'{u}cleo que usa y sobre todo que \'{e}ste ha sido
compilado con la opci\'{o}n de red activada (esto se puede ver
comprobando que existe el directorio \file{/proc/net}). Si el mensaje
de error es ``Network unreachable''(red inaccesible), seguramente
ejecut\'{o} el comando \prog{route} incorrectamente. Aseg\'{u}rese de
que es la misma direcci\'{o}n que la que us\'{o} con \prog{ifconfig}.


\index{rc.inet@\file{rc.inet}}
Los pasos descritos arriba son suficientes para poder ejecutar
aplicaciones de red en una m\'{a}quina aislada. Una vez esas lineas
son a\~{n}adidas a \prog{rc.inet1} y despu\'{e}s de asegurarse de que
las dos macros \prog{rc.inet} son ejecutadas desde \prog{/etc/rc},
puede proceder a rearrancar su m\'{a}quina y probar las diferentes
aplicaciones de red. Por ejemplo ``\prog{telnet localhost}''
deber\'{\i}a establecer una conexi\'{o}n \prog{telnet} con su
m\'{a}quina, pidi\'endole el nombre de usuario y la contrase\~{n}a.

Sin embargo, la interface de lazo es \'{u}til, no s\'{o}lo como
ejemplo en libros de redes, o como m\'{e}todo de pruebas durante el
desarrollo: tambi\'en la utilizan algunas aplicaciones como modo normal
de operaci\'{o}n.\footnote{
  Por ejemplo, todas las aplicaciones basadas en RPC utilizan la
  interface de lazo para registrarse en el demonio
  \prog{portmapper}(mapa de puertos) durante el arranque.
} Por ello, debe usted configurarla siempre, independientemente de que
su m\'{a}quina est\'{e} conectada a una red o no.


\subsection{Interfaces Ethernet}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface.ethernet}
\index{configuraci\'{o}n!Ethernet}
\index{Ethernet!configuraci\'{o}n}
\index{interface!Ethernet}
\index{IP!m\'{a}scara de red}
\index{interface!m\'{a}scara de red}
\index{eth0 (interface Ethernet)@\file{eth0} (interface Ethernet)}
\index{direcci\'{o}n!broadcast}
\index{IP!direcci\'{o}n de difusi\'{o}n}
\index{IP!direcci\'{o}n de broadcast}

La configuraci\'{o}n de una interface Ethernet es m\'{a}s o menos
igual que la de la interface de lazo. S\'{o}lo requiere algunos
par\'{a}metros m\'{a}s cuando est\'{a} usando varias subredes.


En la Cervecera Virtual, hemos dividido la red IP, originalmente de
clase~B, en subredes de clase~C. Para que la interface reconozca esto,
el comando usando \prog{ifconfig} ser\'{\i}a:


\begin{tscreen}
 \# ifconfig eth0 vstout netmask 255.255.255.0
\end{tscreen}


Esto asigna a la interface \file{eth0} la direcci\'{o}n IP de la
m\'{a}quina \host{vstout}(\host{191.72.1.2}). Si hubi\'{e}semos
omitido la m\'{a}scara de red, \prog{ifconfig} habr\'{\i}a deducido la
m\'{a}scara de la clase de la red IP, tomando por tanto
\host{255.255.0.0}. Una comprobaci\'{o}n r\'{a}pida nos da:


\begin{tscreen}
\begin{verbatim}
# ifconfig eth0
eth0      Link encap 10Mps Ethernet HWaddr  00:00:C0:90:B3:42
          inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
          UP BROADCAST RUNNING  MTU 1500  Metric 1
          RX packets 0 errors 0 dropped 0 overrun 0
          TX packets 0 errors 0 dropped 0 overrun 0
\end{verbatim}
\end{tscreen}


Puede ver que \prog{ifconfig} ha fijado la direcci\'{o}n de
difusi\'{o}n autom\'aticamente (el campo \term{Bcast} de arriba) a su valor
usual, que es el de la red con todos los bits de la m\'{a}quina
activados. Adem\'{a}s se fija la unidad de transferencia de mensajes
(tama\~{n}o m\'{a}ximo que el n\'{u}cleo va a generar para esa
interface) a un m\'{a}ximo de 1500 bytes. Todos estos valores pueden
ser especificados mediante opciones especiales que se explican m\'{a}s
tarde.

De forma semejante al caso de la interface de lazo, debe tambi\'{e}n
ahora establecer una entrada en la tabla de encaminamiento que informe
al n\'{u}cleo de que la red es accesible mediante \file{eth0}.  Para
la Cervecera Virtual, ejecutar\'{\i}a


\begin{tscreen}
 \# route add -net 191.72.1.0
\end{tscreen}


Inicialmente podr\'{\i}a parecer algo m\'{a}gico, pues no est\'{a}
claro c\'omo \prog{route} detecta cu\'al es la interface que debe
usar. Sin embargo el truco es sencillo: el n\'{u}cleo comprueba todas
las interfaces que han sido configuradas hasta el momento y compara la
direcci\'{o}n de destino (\host{191.72.1.0} en este caso) con la parte
de red de las direcciones de las interfaces (o, lo que es lo mismo,
ejecuta un ``Y'' l\'{o}gico de la direcci\'{o}n de la interface y la
m\'{a}scara de red). La \'{u}nica interface que cumple esto es \file{eth0}.

Veamos, ?`qu\'e significa la opci\'{o}n \option{-net}? Esta opci\'{o}n es
necesaria porque el programa \prog{route} es capaz de trabajar con
rutas a redes o a m\'{a}quinas concretas (como vimos arriba en el caso
de \host{localhost}). Cuando la direcci\'{o}n es dada en notaci\'{o}n
de cuaterna, intenta adivinar si se trata de una red o una m\'{a}quina
fij\'{a}ndose en los bits de m\'{a}quina de la direcci\'{o}n. Si esa
parte es nula, \prog{route} asume que se trata de una red, y de otro
modo lo toma como direcci\'{o}n de una m\'{a}quina. Por tanto,
\prog{route} supondr\'{\i}a que \host{191.72.1.0} es la direcci\'{o}n
de una m\'{a}quina en vez de una red, debido a que no sabe que hemos
dividido el espacio de direcciones en subredes. Por tanto hemos de
dec\'{\i}rselo de forma expl\'{\i}cita utilizando el indicador \option{-net}.

Por supuesto, escribir el comando \prog{route} es tedioso y
susceptible de muchos errores de escritura. Un m\'{e}todo m\'{a}s
conveniente es usar los nombres definidos en \file{/etc/networks} como vimos
m\'{a}s arriba. Esto hace el comando m\'{a}s inteligible; de este modo
incluso podemos evitar escribir el indicador \option{-net}, porque
\prog{route} sabe que \host{191.72.1.0} representa una red.


\begin{tscreen}
 \# route add brew-net
\end{tscreen}


\index{comprobaci\'{o}n de la configuraci\'{o}n de red}
\index{comprobaci\'{o}n!configuraci\'{o}n de red}
\index{comprobaci\'{o}n!accesibilidad}
Una vez finalizados los pasos b\'{a}sicos de configuraci\'{o}n,
debemos asegurarnos de que la interface Ethernet esta funcionando
correctamente. Elija una m\'{a}quina de su red, por ejemplo
\host{vlager}, y escriba


\begin{tscreen}
\begin{verbatim}
# ping vlager
PING vlager: 64 byte packets
64 bytes from 191.72.1.1: icmp_seq=0. time=11. ms
64 bytes from 191.72.1.1: icmp_seq=1. time=7. ms
64 bytes from 191.72.1.1: icmp_seq=2. time=12. ms
64 bytes from 191.72.1.1: icmp_seq=3. time=3. ms
^C

----vstout.vbrew.com PING Statistics----
4 packets transmitted, 4 packets received, 0% packet loss
round-trip (ms)  min/avg/max = 3/8/12
\end{verbatim}
\end{tscreen}


Si el resultado no es similar a \'este, algo va mal, obviamente. Una tasa
de p\'{e}rdida de paquetes\footnote{N. del T.: Del ingl\'{e}s packet loss rate}
inusualmente alta, sugiere un problema de hardware, como terminaciones
en mal estado o incluso la ausencia de las mismas, etc. Si no recibe
ning\'{u}n paquete, debe comprobar la configuraci\'{o}n de la
interface mediante \prog{netstat}. Las estad\'{\i}sticas de paquetes
producidas por \prog{ifconfig} le indican si alg\'{u}n paquete ha sido
enviado mediante esa interface. Si tiene acceso a una m\'{a}quina
remota, tambi\'{e}n deber\'{\i}a dirigirse a esa m\'{a}quina y comprobar las
estad\'{\i}sticas de la interface. De este modo puede determinar
exactamente en qu\'e momento se han descartado los paquetes. Adem\'{a}s,
debe consultar la informaci\'{o}n de encaminamiento con \prog{route}
para ver si ambas m\'{a}quinas han registrado \'esta
correctamente en sus tablas. 
\prog{route} imprime la tabla de encaminamiento del n\'{u}cleo
completa si se ejecuta sin argumentos (la opci\'{o}n \option{-n} hace
que utilice la notaci\'{o}n de cuaternas en vez de los nombres de las
m\'{a}quinas): 

\index{IP!tabla de encaminamiento}
\index{consulta!tabla de encaminamiento IP}
\index{comprobaci\'{o}n!tabla de encaminamiento de IP}
\index{ruta@\prog{route}}

\begin{tscreen}
\begin{verbatim}
# route -n
Kernel routing table
Destination     Gateway         Genmask         Flags Metric Ref Use    Iface
127.0.0.1       *               255.255.255.255 UH    1      0      112 lo
191.72.1.0      *               255.255.255.0   U     1      0       10 eth0
\end{verbatim}
\end{tscreen}

El significado de cada uno de los campos se detalla m\'{a}s adelante en
la secci\'{o}n ``\ref{iface.netstat}''. La columna \term{Flags} contiene
una lista de los indicadores activos en cada interface. \term{U}
indica que la interface est\'{a} activa y \term{H} indica que la
direcci\'{o}n de destino es una m\'{a}quina. Si encuentra que el indicador
\term{H} se ha activado para una
ruta que pretend\'{\i}a usar para una red, entonces debe usar la
opci\'{o}n \option{-net} con el comando \prog{route}. Para comprobar
si alguna ruta est\'a siendo usada o no, debe mirar si el campo
\term{Use} en la pen\'{u}ltima columna se incrementa entre dos
ejecuciones sucesivas de \prog{ping}.



\subsection{Encaminamiento a trav\'{e}s de una Pasarela}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface.gateway}
\index{encaminamiento!pasarela IP}
\index{IP!encaminamiento}
\index{IP!pasarela}
\index{IP!subred}
\index{pasarela!IP}

En la secci\'{o}n anterior, cubr\'{\i} s\'{o}lo el caso en el que la
m\'{a}quina s\'{o}lo tiene una \'{u}nica Ethernet. Frecuentemente, es
posible encontrar redes conectadas unas a otras a trav\'{e}s de
pasarelas o m\'{a}quinas de enlace. Estas pasarelas pueden simplemente
unir dos o m\'{a}s Ethernets, pero pueden tambien servir de enlace con
el exterior, con la Internet. Para usar una pasarela, es necesario
a\~{n}adir informaci\'{o}n adicional a la capa de red.

Por ejemplo, las Ethernets de la Cervecera Virtual y de la Vinatera
Virtual est\'{a}n unidas a trav\'{e}s de una pasarela, \host{vlager}.
Suponiendo que la m\'{a}quina \host{vlager} ha sido configurada ya,
s\'{o}lo tenemos que a\~{n}adir otro registro a la tabla de
encaminamiento de la m\'{a}quina \host{vstout} que le comunique al
n\'{u}cleo que puede acceder a todos las m\'{a}quinas de la red de la
Vinatera a trav\'{e}s de \host{vlager}. La orden apropiada
usando \prog{route} se muestra a continuaci\'{o}n; la palabra clave
\option{gw} indica que el argumento siguiente es una pasarela:


\begin{tscreen}
\# route add wine-net gw vlager
\end{tscreen}

Por supuesto, cualquier host en la red de la Vinatera al que quiera
dirigirse debe tener un registro an\'{a}logo referido a la red de la
Cervecera, o de otro modo s\'{o}lo podr\'{\i}a enviar datos de
\host{vstout} a \host{vbardolino}, pero la respuesta del segundo
ir\'{\i}a a parar al {\it cubo de la basura}.

Este ejemplo describe \'{u}nicamente una pasarela que conmuta paquetes
entre dos redes Ethernet aisladas. Supongamos ahora que \host{vlager}
tambi\'{e}n tiene una conexi\'{o}n a la Internet (digamos que a
trav\'{e}s de un enlace SLIP). Nos gustar\'{\i}a que los datagramas
destinados a cualquier direcci\'{o}n fuera de la red de la Cervecera
fueran entregados a \host{vlager}. Esto se puede conseguir
convirti\'{e}ndolo en la pasarela por defecto para \host{vstout}:


\begin{tscreen}
\# route add default gw vlager
\end{tscreen}


\index{IP!ruta por defecto}
\index{ruta, por defecto}
El nombre de red \host{default} es una abreviatura que representa la
red \host{0.0.0.0}, o ruta por defecto. No es necesario a\~{n}adir
este nombre a \file{/etc/networks}, porque esta informaci\'{o}n
est\'{a} contenida en el c\'odigo de \prog{route}.

Una tasa alta de p\'{e}rdida de paquetes usando \prog{ping} hacia una
m\'{a}quina situada detr\'{a}s de una o m\'{a}s pasarelas, puede
deberse a que la red est\'{a} muy congestionada. La p\'{e}rdida de
paquetes no se debe tanto a deficiencias t\'{e}cnicas como a exceso
temporal de carga en las m\'{a}quinas que act\'uan de enlace, provocando
retrasos o incluso el descarte de datagramas entrantes. 

% \index{routing!metric}
% \index{IP!metric}
% \index{metric}
% Beside the \option{gw} argument, you may also specify a metric value
% to \prog{route} using the \option{metric} keyword:
% 
% 
% \begin{tscreen}
% \# route add wine-net gw vlager metric 2
% \end{tscreen}
% 
% 
% This causes the kernel to assume a metric value of 2 for the route to
% the Winery's network. We just mention this for the sake of completeness,
% because on one hand, \linux{} doesn't yet evaluate the metric
% information at all, and on the other hand, you would use this option
% only very rarely, anyway.



\subsection{Configuraci\'{o}n de una Pasarela}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface.gateway-conf}
\index{configuraci\'{o}b!pasarela IP}
\index{pasarela!configuraci\'{o}n}
\index{IP!pasarela}
\index{IP!encaminamiento}
\index{IP!subred}

Configurar una m\'{a}quina para conmutar paquetes entre dos Ethernets
es bastante sencillo. Suponga que nos encontramos en \host{vlager},
que contiene dos tarjetas Ethernet, respectivamente conectadas a cada una de
las dos redes. Todo lo que necesitar\'{a} hacer es configurar ambas
interfaces de forma separada, d\'{a}ndole a cada una su direcci\'{o}n
IP correspondiente, y eso es todo.

Es bastante \'{u}til incluir la informaci\'{o}n de ambas interfaces en
el fichero \file{hosts} del modo indicado a continuaci\'on, de forma que
tengamos nombres para referirnos a ellas tambi\'{e}n:


\begin{tscreen}
\begin{verbatim}
191.72.1.1      vlager      vlager.vbrew.com
191.72.1.1      vlager-if1
191.72.2.1      vlager-if2
\end{verbatim}
\end{tscreen}


La secuencia de comandos necesaria para establecer ambas interfaces
ser\'{a} por tanto:

\begin{tscreen}
\begin{verbatim}
# ifconfig eth0 vlager-if1
# ifconfig eth1 vlager-if2
# route add brew-net
# route add wine-net
\end{verbatim}
\end{tscreen}



\subsection{La Interface PLIP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface.plip}
\index{configuraci\'{o}n!PLIP}
\index{interface!PLIP}
\index{enlace punto-a-punto}
\index{IP en Linea Paralela|see {PLIP}}
\index{PLIP}
\index{plip1 (interface PLIP)@\file{plip1} (interface PLIP)}

Si usa un enlace PLIP para conectar dos m\'{a}quinas, las cosas son un
poco diferentes de lo visto para una Ethernet. En caso de PLIP se
trata de un enlace conocido como \emph{punto-a-punto}, porque s\'{o}lo
requiere dos m\'{a}quinas (``puntos''), en contraposici\'{o}n a las
redes de difusi\'{o}n.

A modo de ejemplo, consideremos un ordenador port\'atil de un empleado
en la Cervecera Virtual que se conecta a \host{vlager} mediante PLIP.
El port\'atil se llama \host{vlite}, y tiene un \'{u}nico puerto
paralelo. Durante el arranque, este puerto ser\'{a} registrado como
\file{plip1}. Para activar el enlace, ha de configurar la interface
\file{plip1} mediante los siguientes comandos:


\begin{tscreen}
\begin{verbatim}
# ifconfig plip1 vlite pointopoint vlager
# route add default gw vlager
\end{verbatim}
\end{tscreen}

El primer comando configura la interface, dici\'{e}ndole al n\'{u}cleo
que se trata de un enlace punto-a-punto, donde la parte remota tiene
la direcci\'{o}n \host{vlager}. El segundo instala la ruta por defecto
que usa a \host{vlager} como pasarela.  En \host{vlager}, se necesita
ejecutar \prog{ifconfig} con argumentos similares para activar el
enlace (en este caso no es necesario usar \prog{route}):


\begin{tscreen}
\begin{verbatim}
# ifconfig plip1 vlager pointopoint vlite
\end{verbatim}
\end{tscreen}

Es interesante notar que la interface \file{plip1} en \host{vlager} no
necesita tener una direcci\'{o}n IP~diferente, sino que puede usar
la misma direcci\'{o}n \host{191.72.1.1}.\footnote{
 Simplemente por precauci\'{o}n, deber\'{\i}a configurar de todos modos
 sus enlaces PLIP o SLIP una vez que ha completado la
 configuraci\'{o}n de la tabla de encaminamiento de las Ethernets. Con
 algunos n\'{u}cleos m\'{a}s antiguos, la tabla de encaminamiento para
 la red puede acabar apuntando a su enlace punto-a-punto.
}

Una vez hemos configurado el encaminamiento desde el port\'atil a la red
de la Cervecera, s\'{o}lo resta arbitrar un modo para que cualquier
m\'{a}quina en esa red pueda acceder a \host{vlite}. Un modo
particularmente enrevesado ser\'{\i}a a\~{n}adir una ruta a
las tablas de encaminamiento de cada una de las m\'{a}quinas de la red
para usar \host{vlager} como pasarela hacia \host{vlite}:


\begin{tscreen}
\begin{verbatim}
# route add vlite gw vlager
\end{verbatim}
\end{tscreen}


\index{encaminamiento!din\'{a}mico}
\index{Protocolo de Informaci\'{o}n de Encaminamiento}
\index{gated@\prog{gated}}
\index{ARP!proxy}
\index{ARP!sustituto}
\index{proxy ARP}
\index{sustituto, ARP}
Una opci\'{o}n mejor cuando tenemos que trabajar con rutas temporales
es usar encaminamiento din\'{a}mico. Una forma de conseguirlo es
usando \prog{gated}, un demonio de encaminamiento, que deber\'{a}
instalar en cada una de las m\'{a}quinas de la red de modo que
distribuya la informaci\'{o}n de encaminamiento de forma
din\'{a}mica. La forma m\'{a}s sencilla, sin embargo, consiste en usar 
ARP sustituto ( \emph{proxy} ARP ). Con ARP
sustituto, \host{vlager} responde a cualquier pregunta ARP dirigida a
\host{vlite} enviando su propia direcci\'{o}n Ethernet. El efecto
conseguido es que todos los paquetes dirigidos a \host{vlite} terminan
yendo a \host{vlager}, que se encarga de reenvi\'arselos al
port\'atil. Volveremos a hablar de ARP sustituto en la
secci\'{o}n ``\ref{iface.verify.arp}'', m\'{a}s adelante.

Las versiones futuras de Net-3 contendr\'{a}n una herramienta llamada
\prog{plipconfig} capaz de fijar el n\'{u}mero de IRQ del puerto de la
impresora. M\'{a}s tarde se sustituir\'{a} por un comando
\prog{ifconfig} m\'{a}s general.



\subsection{Las Interfaces SLIP y PPP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.interface.slip}
\index{sl0 (interface SLIP)@\file{sl0} (interface SLIP)}
\index{sl0 (interface PPP)@\file{sl0} (interface PPP)}
\index{enlace punto-a-punto}
\index{configuraci\'{o}n!SLIP}
\index{configuraci\'{o}n!PPP}
\index{interface!SLIP}
\index{interface!PPP}
\index{SLIP}
\index{PPP}

A pesar de que los enlaces SLIP y PPP son simples enlaces
punto-a-punto igual que las conexiones PLIP, hay mucho m\'{a}s que
decir de ellas. Generalmente, el establecimiento de un enlace SLIP
incluye una llamada a un lugar de conexi\'{o}n remoto y el
establecimiento del modo SLIP en la l\'{\i}nea de comunicaciones serie. El
uso de PPP es similar. Las herramientas necesarias para establecer un
enlace SLIP o PPP se describen en los cap\'{\i}tulos ~\ref{slip}
y~\ref{ppp}. 


\subsection{La Interface Comod\'{\i}n}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\namedlabel{iface.interface.dummy}{La Interface Comod\'{\i}n}
\index{interface comod\'{\i}n}
\index{interface!comod\'{\i}n}
\index{m\'{a}quina aislada}
\index{m\'{a}quina!aislada}
\index{configuraci\'{o}n!SLIP}
\index{configuraci\'{o}n!PPP}

La interface comod\'{\i}n (dummy) parece un tanto ex\'{o}tica y sin
embargo es bastante \'{u}til. Resulta especialmente ventajosa para
m\'{a}quinas aisladas que se conectan a una red IP mediante un enlace
telef\'{o}nico. Se trata en realidad de m\'{a}quinas que trabajan de
forma aislada la mayor parte del tiempo.

El dilema con las m\'{a}quinas aisladas es que el \'{u}nico
dispositivo activo es el de lazo, al que generalmente se le asigna la
direcci\'{o}n \host{127.0.0.1}.  En ocasiones, sin embargo, le
resultar\'{a} necesario enviar datos a la direcci\'{o}n IP
``oficial'' de la m\'{a}quina. Supongamos, por ejemplo, el caso del port\'atil
\host{vlite} cuando no est\'{a} conectado a ninguna red. Una
aplicaci\'{o}n en \host{vlite} que busque su direcci\'{o}n IP~en el
fichero \file{/etc/hosts} dar\'{a} como resultado \host{191.72.1.65},
y por tanto intentar\'{a} enviar los datos a esa direcci\'{o}n. Como
la \'{u}nica interface activa en ese momento es la de lazo, el
n\'{u}cleo no sabe que la direcci\'{o}n se refiere a la misma
m\'{a}quina. En consecuencia el n\'{u}cleo descarta el datagrama y
genera un error en la aplicaci\'{o}n.

En esta situaci\'{o}n es cuando la interface comod\'{\i}n es \'{u}til,
resolviendo el dilema actuando como {\it alter ego} de la interface de lazo.
En el caso de \host{vlite}, simplemente debe asignarle la
direcci\'{o}n \host{191.72.1.65} y a\~{n}adir una ruta que apunte a
ella. La forma correcta es pues:

\begin{tscreen}
\begin{verbatim}
# ifconfig dummy vlite
# route add vlite
\end{verbatim}
\end{tscreen}



\section{Todo sobre \prog{ifconfig}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.ifconfig}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\index{ifconfig@\prog{ifconfig}}

El programa \prog{ifconfig} tiene muchos m\'{a}s par\'{a}metros que
los descritos hasta ahora. Generalmente se ejecuta en la forma:

\begin{tscreen}
 ifconfig \var{interface} [[-net|-host] \var{direccion} [\var{parametros}]]
\end{tscreen}


\var{interface} es el nombre de la interface y \var{direccion} es la
direcci\'{o}n IP~que se asigna a dicha interface. La direcci\'{o}n
puede estar en forma de cuaterna o usando un nombre que
\prog{ifconfig} buscar\'{a} en \file{/etc/hosts} y
\file{/etc/networks}.  La opciones \option{-net} y
\option{-host} fuerzan a \prog{ifconfig} a tratar las direcciones
dadas como direcciones de red o de m\'{a}quina respectivamente.


\index{consulta!configuraci\'{o}n de interface}
Si \prog{ifconfig} es ejecutado a\~{n}adiendo \'{u}nicamente el nombre
de la interface, presentar\'{a} la informaci\'{o}n de la
configuraci\'{o}n de dicha interface. Si se ejecuta sin parametros,
presenta todas las interfaces configuradas hasta el momento; usando la
opci\'{o}n \option{-a} fuerza a \prog{ifconfig} a incluir la
informaci\'{o}n de las interfaces inactivas. A modo de ejemplo, la
consulta de la configuraci\'{o}n de la interface Ethernet \file{eth0}
ser\'{\i}a: 

\begin{tscreen}
\begin{verbatim}
# ifconfig eth0
eth0      Link encap 10Mbps Ethernet  HWaddr 00:00:C0:90:B3:42
          inet addr 191.72.1.2 Bcast 191.72.1.255 Mask 255.255.255.0
          UP BROADCAST RUNNING  MTU 1500  Metric 0
          RX packets 3136 errors 217 dropped 7 overrun 26
          TX packets 1752 errors 25 dropped 0 overrun 0

\end{verbatim}
\end{tscreen}


\index{Unidad M\'{a}xima de Transferencia}
\index{encaminamiento!metrica}
Los campos \term{MTU} y \term{Metric} informan sobre los valores
actuales de la MTU (Unidad M\'axima de Transferencia) y de la m\'{e}trica
para una interface dada. El valor
de la m\'{e}trica es usado tradicionalmente por algunos sistemas
operativos para calcular el coste de una ruta. \linux{} no usa este
valor por el momento, pero lo define por razones de compatibilidad.

Las l\'{\i}neas RX y TX dan idea de los paquetes recibidos o transmitidos
sin errores, del n\'{u}mero de errores ocurridos, de cu\'antos
paquetes han sido descartados, seguramente por memoria
insuficiente, y cu\'antos han sido perdidos por desbordamiento, condici\'{o}n
que ocurre cuando la recepci\'{o}n de paquetes es demasiado r\'{a}pida
y el n\'{u}cleo es incapaz de dar servicio al paquete
anterior antes de la llegada del nuevo paquete. Los nombres de los
campos que genera \prog{ifconfig} coinciden m\'{a}s o menos con los
parametros con los que se puede ejecutar; estos par\'{a}metros son
explicados m\'{a}s abajo.

A continuaci\'{o}n tenemos una lista de los par\'{a}metros reconocidos
por \prog{ifconfig}. Los nombres de los indicadores
correspondientes aparecen entre par\'{e}ntesis. Las opciones que
simplemente activan alguna caracter\'{\i}stica pueden usarse para
desactivarla precedi\'{e}ndolas de un gui\'on (-).


\begin{dispitems}
\ditem[\option{up}]
        Marca la interface como ``up'' o activa, es decir, disponible
        para que sea usada por la capa IP. Esta opci\'{o}n va
        impl\'{\i}cita cuando lo que se da en la l\'{\i}nea de comandos es una
        \var{direcci\'{o}n}. Tambi\'{e}n permite reactivar una
        interface que se ha desactivado temporalmente mediante la
        opci\'{o}n ``\option{down}''.

        \noindent
        Esta opci\'{o}n corresponde a los indicadores \term{UP RUNNING}.

\ditem[\option{down}]
        Marca la interface como ``down'' o inactiva, es decir, inaccesible
        a la capa IP. Esto inhabilita cualquier tr\'{a}fico IP~a
        trav\'{e}s de la interface. Es importante darse cuenta que
        esto no borra los registros de la tabla de encaminamiento
        correspondientes a esa interface de forma autom\'{a}tica. Si
        pretende desactivar una interface de forma permanente,
        deber\'{\i}a borrar estos registros de encaminamiento,
        aportando rutas alternativas si es posible.

\ditem[\option{netmask} \var{m\'{a}scara}]
        \index{IP!m\'{a}scara de red}
        \index{interface!m\'{a}scara de red}
        Esto asigna una m\'{a}scara de subred a una interface. Se
        puede dar como un valor de 32 bits en hexadecimal precedido
        del prefijo 0x, o en notaci\'{o}n de cuaterna usando
        n\'{u}meros decimales separados por puntos.

        %, or as a netmask name listed in \file{/etc/netmasks}.

\ditem[\option{pointopoint} \var{direcci\'{o}n}]
        \index{point-to-point link}
        Esta opci\'{o}n se usa para enlaces IP~punto-a-punto en los que
        intervienen \'{u}nicamente dos m\'{a}quinas. Esta opci\'{o}n
        es necesaria para, por ejemplo, configurar las interfaces SLIP o
        PLIP.

        \noindent
        \prog{ifconfig} confirma el establecimiento de una
        direcci\'{o}n punto-a-punto incluyendo el indicador
        \term{POINTOPOINT}.

\ditem[\option{broadcast} \var{direcci\'{o}n}]
        \index{IP!direcci\'{o}n de difusi\'{o}n}
        \index{direcci\'{o}n de difusi\'{o}n}
        \index{direcci\'{o}n!difusi\'{o}n}
        La direcci\'{o}n de difusi\'{o}n se obtiene, generalmente,
        usando la parte de red de la direcci\'{o}n y activando todos
        los bits de la parte correspondiente a la m\'{a}quina. Algunas
        implementaciones de los protocolos IP utilizan un esquema
        diferente; esta opci\'{o}n proporciona un m\'{e}todo para
        adaptarse a esos entornos m\'{a}s raros.

        \noindent
        (\prog{ifconfig} confirma el establecimiento de una
        direcci\'{o}n de difusi\'{o}n incluyendo el indicador
        \term{BROADCAST}.) 

\ditem[\option{metric} \var{n\'umero}]
        \index{Protocolo de Informaci\'{o}n de Encaminamiento}
        \index{encaminamiento!m\'{e}trica}
        \index{IP!m\'{e}trica}
        Esta opci\'{o}n puede ser usada para asignar un valor de
        m\'{e}trica a la tabla de encaminamiento creada para la
        interface. Esta m\'{e}trica es usada por el Protocolo de
        Informaci\'{o}n de Encaminamiento (RIP, como ya hemos visto
        en cap\'{\i}tulos anteriores) para construir las tablas de
        encaminamiento para la red.
        El valor usado por defecto por \prog{ifconfig} es cero. Si
        no est\'{a} ejecutando un demonio RIP, no necesita usar esta
        opci\'{o}n para nada; si por el contrario s\'{\i} lo usa, al menos
        s\'{o}lo tendr\'{a} que modificar este valor en contadas
        ocasiones.

\ditem[\option{mtu} \var{bytes}]
        \index{Unidad de Transferencia M\'{a}xima}
        \index{MTU|see {Unidad de Transferencia M\'{a}xima}}
        \index{IP!MTU|see {Unidad de Transferencia M\'{a}xima}}
        Esto fija la unidad m\'{a}xima de transferencia, o lo que
        es lo mismo, el m\'{a}ximo n\'{u}mero de octetos que la
        interface es capaz de manejar en una \'{u}nica
        transacci\'{o}n. Para Ethernets, la MTU toma el valor 1500 por
        defecto; para interfaces tipo SLIP, el valor por defecto es
        296.

%\ditem[\option{trailers}]
%        \index{Ethernet!pistas}
%        Se trata de una opci\'{o}n espec\'{\i}fica de interfaces
%        Ethernet. Activa el \emph{encapsulado de pistas},
%        t\'{e}cnica que minimiza el numero de copias en
%        memoria que necesita generar el sistema receptor. Esta
%        opci\'{o}n se activa por defecto.
%        \noindent
%        (Si se desactiva el encapsulado de pistas, \prog{ifconfig}
%        muestra el indicador \term{NOTRAILERS}.)

\ditem[\option{arp}]
        \index{inhabilitaci\'{o}n de ARP}
        \index{habilitaci\'{o}n de ARP}
        \index{ARP!habilitaci\'{o}n}
        Esta opci\'{o}n es espec\'{\i}fica de redes de difusi\'{o}n
        como las Ethernets o las de radio-paquetes. Permite el uso
        de ARP,
        el Protocolo de Resoluci\'{o}n de Direcciones, para detectar
        la direcci\'{o}n f\'{\i}sica de las m\'{a}quinas conectadas a
        la red. Para redes de difusi\'{o}n, esta opci\'{o}n es
        habilitada por defecto.

        \noindent
        \prog{ifconfig} avisa que ARP ha sido inhabilitado mediante
        el indicador \term{NOARP}.

\ditem[\option{-arp}]
        Inhabilita el uso de ARP para esta interface.

\ditem[\option{promisc}]
        \index{Ethernet!modo promiscuo}
        \index{securidad!Ethernet}
        Pone la interface en modo promiscuo. En una red de
        difusi\'{o}n, esto hace que la interface reciba todos los
        paquetes, independientemente de si eran para ella o no. Esto
        permite el an\'{a}lisis del tr\'{a}fico de red utilizando
        utilidades como filtros de paquetes, tambi\'{e}n llamado
        \emph{fisgar}\footnote{N. del T.: Del ingl\'{e}s \emph{snooping}}.
        Se trata de una buena t\'{e}cnica para localizar problemas de
        red que de otra forma resultan dif\'{\i}ciles.

        Por otro lado, esto tambi\'{e}n posibilita ataques, permitiendo
        al atacante analizar el trafico de la red en busca de
        claves u otras cosas peligrosas. Una protecci\'{o}n posible
        contra este tipo de ataques es impedir que cualquiera pueda
        conectarse a la Ethernet. Otra es la utilizaci\'{o}n de
        protocolos de autentificaci\'{o}n seguros como Kerberos, o los
        programas SRA de ingreso en el sistema.\footnote{SRA
se puede obtener del servidor \host{ftp.tamu.edu} en
el directorio \file{/pub/sec/TAMU}}

        \noindent
        Esta opci\'{o}n corresponde al indicador \term{PROMISC}.

\ditem[\option{-promisc}]
        Desactiva el modo promiscuo.

\ditem[\option{allmulti}]
        \index{IP!direcciones de env\'{\i}o m\'{u}ltiple}
        Las direcciones de env\'{\i}o m\'{u}ltiple son un tipo de
        difusi\'{o}n pero a un grupo de m\'{a}quinas que no tienen
        necesariamente que pertenecer a la misma subred. El
        n\'{u}cleo no soporta todav\'{\i}a direcciones de env\'{\i}o
        m\'{u}ltiple o de multidifusi\'on\footnote{N.T.: Las versiones
        actuales del
        n\'{u}cleo (2.X) s\'{\i} permiten el uso de direcciones de env\'{\i}o
        m\'{u}ltiple.}.

        \noindent
        Esta opci\'{o}n corresponde al indicador \term{ALLMULTI}.

\ditem[\option{-allmulti}]
        Desactiva las direcciones de env\'{\i}o m\'{u}ltiple.
\end{dispitems}



\section{Comprobaci\'{o}n mediante \prog{netstat}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\namedlabel{iface.netstat}{Comprobaci\'{o}n mediante \prog{netstat}}
\index{netstat@\prog{netstat}|(}

A continuaci\'{o}n describir\'{e} una herramienta \'{u}til para
comprobar la configuraci\'{o}n y actividad de su red. Se llama
\prog{netstat}, aunque se trata en realidad de una colecci\'{o}n de
herramientas combinadas. Describiremos cada una de las funciones en
las secciones siguientes.


\subsection{Consulta de la Tabla de Encaminamiento}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.netstat.-r}
\index{IP!tabla de encaminamiento}
\index{comprobaci\'{o}n!tabla de encaminamiento}
\index{consulta!IP - tabla de encaminamiento}
\index{encaminamiento!tabla}

Si ejecuta \prog{netstat} usando el indicador \option{-r}, puede ver
la informaci\'{o}n de la tabla de encaminamiento del n\'{u}cleo igual
que hemos venido haciendo hasta ahora con \prog{route}. Para
\host{vstout}, tendr\'{\i}amos:


\begin{tscreen}
\begin{verbatim}
# netstat -nr
Kernel routing table
Destination     Gateway         Genmask         Flags Metric Ref Use    Iface
127.0.0.1       *               255.255.255.255 UH    1      0       50 lo
191.72.1.0      *               255.255.255.0   U     1      0      478 eth0
191.72.2.0      191.72.1.1      255.255.255.0   UGN   1      0      250 eth0
\end{verbatim}
\end{tscreen}

La opci\'{o}n \option{-n} hace que \prog{netstat} imprima las
direcciones IP~en notaci\'{o}n de cuaterna en vez de usar los
nombres simb\'{o}licos de las m\'{a}quinas o las redes. Esto es
especialmente \'{u}til si pretende evitar consultas para esos nombres
a trav\'{e}s de la red (por ejemplo consultas a un servidor NFS o NIS). 


La segunda columna de la salida producida por \prog{netstat} informa
sobre las pasarelas a las que apunta la informaci\'{o}n de
encaminamiento. Si una ruta no usa pasarela, el programa imprime un
asterisco. La tercera columna imprime el nivel de generalizaci\'{o}n
de una ruta. Dada una direcci\'{o}n IP, el n\'{u}cleo recorre la tabla
registro a registro haciendo un ``Y'' l\'{o}gico de la direcci\'{o}n y
la m\'{a}scara de nivel de generalizaci\'{o}n antes de compararla con
el destino que muestra dicho registro.

La cuarta columna muestra varios indicadores que describen la ruta:


\begin{dispitems}
\ditem[G]
        La ruta utiliza una pasarela.

\ditem[U]
        La interface est\'{a} activa.

\ditem[H]
        Esta interface permite el acceso a una sola m\'{a}quina. Este
        es el caso de la interface de lazo \host{127.0.0.1} en nuestro
        ejemplo.

\ditem[D]
        Este indicador se activa cuando el registro es generado por un
        mensaje de redirecci\'{o}n ICMP (ver
        secci\'{o}n~\ref{tcpip.icmp}). 
        
\ditem[M]
        Presente cuando este registro ha sido modificado por un
        mensaje de redirecci\'{o}n ICMP.

\end{dispitems}


La columna \term{Ref} de la salida de \prog{netstat} muestra el
n\'{u}mero de referencias a esta ruta, esto es, cuantas otras rutas
dependen de \'{e}sta (por ejemplo a trav\'{e}s de pasarelas). Las dos
\'{u}ltimas columnas muestran el n\'{u}mero de veces que cada ruta ha
sido usada y la interface que procesa los datagramas para dicha ruta.



\subsection{Consulta de las Estad\'{\i}sticas de una Interface}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.netstat.-i}
\index{consulta!estad\'{\i}sticas de una interface}
\index{interface!estad\'{\i}sticas}
\index{comprobaci\'{o}n!interface de red}

Cuando se ejecuta con el indicador \option{-i}, \prog{netstat}
presenta las estad\'{\i}sticas de cada una de las interfaces de red
configuradas en ese momento. Si se usa tambi\'{e}n la opci\'{o}n
\option{-a}, el resultado son \emph{todas} las interfaces presentes en
el n\'{u}cleo, no s\'{o}lo aqu\'ellas que ya han sido configuradas. En
\host{vstout}, \prog{netstat} producir\'{a}:


\begin{tscreen}
\begin{verbatim}
$ netstat -i
Kernel Interface table
Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
lo        0   0   3185      0      0      0   3185      0      0      0 BLRU
eth0   1500   0 972633     17     20    120 628711    217      0      0 BRU
\end{verbatim}
\end{tscreen}

Los campos MTU y Met informan de los valores de MTU y m\'{e}trica
configurados en la interface. Las columnas RX y TX muestran el total
de paquetes recibidos y enviados respectivamente sin errores
(RX-OK/TX-OK), da\~{n}ados (RX-ERR/TX-ERR), cu\'antos han sido
descartados (RX-DRP/TX-DRP), y cu\'antos se han perdido por desbordamiento
(RX-OVR/TX-OVR). 

La \'{u}ltima columna muestra los indicadores activos para cada
interface. Se trata de abreviaturas de una sola letra correspondientes
a los nombres de los indicadores usados para configurar la interface
mediante \prog{ifconfig}.


\begin{dispitems}
 \ditem[B]      Direcci\'{o}n de difusi\'{o}n activa.
 \ditem[L]      Interface correspondiente a un dispositivo de lazo.
 \ditem[M]      Recepci\'{o}n de todos los paquetes (modo promiscuo).
 \ditem[N]      No se usan {\it pistas}\footnote{N.T.: Pistas aqu\'{\i} se
 refiere a un m\'{e}todo de encapsulado de los datagramas IP en los
 que la informaci\'{o}n de la cabecera se coloca al final del
 paquete. Se usan en redes Ethernet para ayudar en el alineamiento de
 datos en los bordes de p\'{a}gina.}
 \ditem[O]      ARP est\'{a} desactivado en esta interface.
 \ditem[P]      Se trata de una conexi\'{o}n punto-a-punto.
 \ditem[R]      Interface en uso.
 \ditem[U]      Interface activa.
\end{dispitems}



\subsection{Mostrar Conexiones}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\label{iface.netstat.-t-u-x}
\index{consutla!conexiones activas}
\index{red!mostrar conexiones}
\index{conexiones, consulta}
\index{comprobaci\'{o}n!conexiones de red}
\index{comprobaci\'{o}n!actividad del servidor TCP}

\prog{netstat} soporta una serie de opciones que permiten mostrar
los sockets\footnote{N. del T.: Literalmente significa enchufe en ingl\'{e}s,
y se refiere a los descriptores de fichero abiertos para comunicaciones.}
activos y pasivos. Las opciones \option{-t}, \option{-u}, \option{-w}, y
\option{-x} muestran conexiones con sockets TCP, UDP, RAW, o UNIX.
Si, adicionalmente incluye el indicador \option{-a}, tambi\'{e}n se
muestran sockets en espera de una conexi\'{o}n (a la escucha). Esto le
permite listar todos los servidores que se ejecutan en su sistema.


La ejecuci\'{o}n de \prog{netstat -ta} en \host{vlager} produce lo
siguiente:

\begin{tscreen}
\begin{verbatim}
$ netstat -ta
Active Internet connections
Proto Recv-Q Send-Q Local Address    Foreign Address    (State)
tcp        0      0 *:domain         *:*                LISTEN  
tcp        0      0 *:time           *:*                LISTEN  
tcp        0      0 *:smtp           *:*                LISTEN  
tcp        0      0 vlager:smtp      vstout:1040        ESTABLISHED  
tcp        0      0 *:telnet         *:*                LISTEN  
tcp        0      0 localhost:1046   vbardolino:telnet  ESTABLISHED  
tcp        0      0 *:chargen        *:*                LISTEN  
tcp        0      0 *:daytime        *:*                LISTEN  
tcp        0      0 *:discard        *:*                LISTEN  
tcp        0      0 *:echo           *:*                LISTEN  
tcp        0      0 *:shell          *:*                LISTEN  
tcp        0      0 *:login          *:*                LISTEN  
\end{verbatim}
\end{tscreen}

Vemos que la mayor\'{\i}a de los servidores est\'{a}n simplemente
esperando una conexi\'{o}n entrante. Sin embargo, la cuarta l\'{\i}nea
muestra una conexi\'{o}n entrante SMTP desde \host{vstout}, y la sexta
informa que hay una conexi\'{o}n saliente tipo \prog{telnet} hacia
\host{vbardolino}.\footnote{
  Para saber si la conexi\'{o}n es entrante o saliente basta mirar
  los puertos. El puerto correspondiente a la m\'{a}quina que llama es
  siempre un entero simple, mientras que la m\'{a}quina receptora
  utiliza el puerto correspondiente al servicio en uso y que
  adem\'{a}s es representado por \prog{netstat} usando el nombre
  simb\'{o}lico contenido en \file{/etc/services}.
}

El uso del indicador \option{-a} \'{u}nicamente genera informaci\'{o}n
de los sockets de todas las clases.


\index{netstat@\prog{netstat}|)}


\section{Comprobaci\'{o}n de las Tablas ARP}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\namedlabel{iface.verify.arp}{Comprobaci\'{o}n de las Tablas ARP}
\index{Comprobaci\'{o}n!interface Ethernet}
\index{Comprobaci\'{o}n!tablas ARP}
\index{ARP!consulta de las tablas}
\index{consulta!tablas ARP}

En ciertas ocasiones, resulta \'{u}til poder ver o incluso alterar
parte de las tablas ARP del n\'{u}cleo, por ejemplo cuando sospecha
que una direcci\'{o}n IP~duplicada causa problemas intermitentes en
su red. La herramienta \prog{arp} fue creada con este objeto. Sus
opciones son:


\begin{tscreen}
 arp [-v] [-t \var{tipohw}] -a [\var{maquina}]           \\
 arp [-v] [-t \var{tipohw}] -s \var{maquina} \var{direccionhw}\\
 arp [-v] -d \var{maquina} [\var{maquina}\ldots]    
\end{tscreen}


Todos los argumentos \var{maquina} pueden ser nombres simb\'{o}licos
o direcciones IP~en notaci\'{o}n de cuaterna.

Si usamos el primer comando, obtendremos el registro de la tabla
correspondiente a la direcci\'{o}n IP~o m\'{a}quina especificada o, en
el caso de que no se especifique ninguna, se muestran todas. As\'{\i},
si ejecut\'aramos \prog{arp} en \host{vlager} obtendr\'{\i}amos:


\begin{tscreen}
\begin{verbatim}
# arp -a
IP address      HW type                 HW address
191.72.1.3      10Mbps Ethernet         00:00:C0:5A:42:C1
191.72.1.2      10Mbps Ethernet         00:00:C0:90:B3:42
191.72.2.4      10Mbps Ethernet         00:00:C0:04:69:AA
\end{verbatim}
\end{tscreen}


\noindent
que muestra las direcciones Ethernet de \host{vlager}, \host{vstout} y
\host{vale}.

Se puede usar la opci\'{o}n \option{-t} para mostrar la
informaci\'{o}n referente a un tipo espec\'{\i}fico de hardware. Los
valores posibles son \keyword{ether}, \keyword{ax25}, o
\keyword{pronet}, y se refieren a Ethernet a 10Mbps, AMPR~AX.25, y
equipos token ring IEEE~802.5, respectivamente.


La opci\'{o}n \option{-s} se usa para a\~{n}adir de forma permanente
la direcci\'{o}n de hardware de \var{maquina} a las tablas
ARP. \var{direccionhw} es la direcci\'{o}n de hardware y por defecto
se supone que es Ethernet, especificada como una cadena de seis bytes
en hexadecimal separados entre medias por dos puntos. Se puede
tambi\'{e}n especificar la direcci\'{o}n de otro tipo de hardware
usando la opci\'{o}n \option{-t}.


Un tipo de problema que puede requerir a\~{n}adir una direcci\'{o}n
IP~manualmente a las tablas ARP es cuando, por alguna raz\'{o}n, una
consulta ARP a una m\'{a}quina remota falla, por ejemplo debido a que
su controlador ARP no funciona correctamente o cuando alguna otra
m\'{a}quina en la red se identifica err\'{o}neamente como si
ella misma tuviera esa direcci\'{o}n IP. Tambi\'{e}n es un m\'{o}do,
aunque algo dr\'{a}stico, de protejerse frente a m\'{a}quinas que,
conectadas a la misma Ethernet, tratan de hacerse pasar por otras.


El uso de \prog{arp} con el modificador \option{-d} borra todos los
registros ARP que se refieran a la m\'{a}quina dada. De este modo se
puede forzar a una interface a que intente obtener de nuevo la
direcci\'{o}n Ethernet que corresponda a la direcci\'{o}n IP~en
cuesti\'{o}n. Esto resulta \'{u}til cuando un sistema mal configurado
ha emitido una informaci\'{o}n ARP incorrecta (por supuesto, primero
habr\'{a} de asegurarse de que el error de configuraci\'{o}n ha sido
subsanado).


\index{punto-a-punto, enlace}
\index{encaminamiento!ARP }
\index{routing!dynamic}
\index{proxy ARP}
\index{ARP!proxy}
\index{sustituto, ARP}
\index{ARP!sustituto}
\index{SLIP!encaminamiento}
\index{PLIP!encaminamiento}
\index{PPP!encaminamiento}
La opci\'{o}n \option{-s} se puede usar tambi\'{e}n para implementar
ARP sustituto o \emph{proxy} ARP. Se trata de una t\'{e}cnica especial
en la que una m\'{a}quina, digamos \host{gate}, act\'{u}a como
pasarela para otra diferente llamada \host{fnord}, haciendo como que
ambas direcciones pertenecen a la misma m\'{a}quina, en este caso
\host{gate}. Esto se consigue haciendo p\'{u}blico un registro ARP
para \host{fnord} que apunta a su propia interface Ethernet. De este
modo, cuando cualquier m\'{a}quina de la red realiza una consulta
sobre \host{fnord}, \host{gate} responde con un registro que contiene
su propia direcci\'{o}n Ethernet. La m\'{a}quina que ha realizado la
consulta enviar\'{a} los datagramas a \host{gate}, quien se los pasa a
\host{fnord}.

Este tipo de cosas puede ser necesario si, por ejemplo,
pretende acceder a \host{fnord} mediante una m\'{a}quina DOS que tiene
una implementaci\'{o}n de TCP incorrecta que no entiende el
encaminamiento demasiado bien. Cuando usa ARP sustituto, a todos
los efectos la m\'{a}quina DOS ve a \host{fnord} en la subred local y,
por tanto, no necesita preocuparse de c\'omo realizar el encaminamiento a
trav\'{e}s de una pasarela.


Otro aplicaci\'{o}n muy \'{u}til del ARP sustituto es cuando una de
sus m\'{a}quinas act\'{u}a como pasarela para otra m\'{a}quina aunque
s\'{o}lo de forma temporal, por ejemplo, en el caso de un enlace
telef\'{o}nico. En un ejemplo anterior, ya nos encontramos con el
port\'atil \host{vlite} que se conectaba a \host{vlager} mediante un
enlace PLIP de vez en cuando. Por supuesto, esto s\'olo funcionar\'{a}
si la direcci\'{o}n de la m\'{a}quina para la que quiere actuar de
sustituto ARP se encuentra en la misma subred IP~que su
pasarela. As\'{\i}, por ejemplo, \host{vstout} podr\'{\i}a ser el
sustituto ARP de cualquier m\'{a}quina de la subred de la Cervecera
(\host{191.72.1.0}), pero nunca para m\'{a}quinas de la subred de la
Vinatera (\host{191.72.2.0}).


Abajo vemos el comando correcto para activar un ARP sustituto para
\host{fnord}; por supuesto, la direcci\'{o}n Ethernet dada debe ser la
de \host{gate}.


\begin{tscreen}
\begin{verbatim}
# arp -s fnord 00:00:c0:a1:42:e0 pub
\end{verbatim}
\end{tscreen}


Para borrar el registro de ARP sustituto bastar\'{a}:


\begin{tscreen}
\begin{verbatim}
# arp -d fnord
\end{verbatim}
\end{tscreen}


\section{El Futuro}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Las comunicaciones en red con \linux{} est\'{a}n en continua
evoluci\'{o}n. Cambios fundamentales en el n\'{u}cleo permitir\'{a}n
un esquema de configuraci\'{o}n muy flexible que permitir\'{a} que
configure los dispositivos de red en tiempo de ejecuci\'{o}n. Por
ejemplo, \prog{ifconfig} tendr\'{a} argumentos que permitan fijar la
l\'{\i}nea IRQ y el canal DMA.

\index{Unidad de Transferencia M\'{a}xima}
\index{route@\prog{route}}
Otro cambio que se espera pronto es el indicador adicional
\option{mtu} en el comando \prog{route}, que permita establecer la
Unidad de Transferencia M\'{a}xima para una ruta en particular. Esta
MTU espec\'{\i}fica de una ruta invalida el valor especificado para la
interface. El uso t\'{\i}pico de esta opci\'{o}n es para rutas a
trav\'{e}s de pasarelas, en las que el enlace entre la pasarela y la
m\'{a}quina destinataria requiere un MTU muy bajo. Por ejemplo,
supongamos que la m\'{a}quina \host{wanderer} est\'{e} conectada a
\host{vlager} a trav\'{e}s de un enlace SLIP. Entonces, al enviar datos
de \host{vstout} a \host{wanderer}, la capa de red en \host{wanderer}
enviar\'{\i}a paquetes de hasta 1500 bytes, porque los paquetes son
transmitidos mediante una Ethernet. El enlace SLIP, sin embargo,
opera con una MTU de 296, as\'{\i} que la capa de red en \host{vlager}
tendr\'{\i}a que dividir los paquetes IP~en fragmentos m\'{a}s
peque\~{n}os que quepan en 296 bytes. Si en vez de eso, configura la
interface en \host{vstout} para que use una MTU de 296 desde el
principio, se puede evitar el proceso de divisi\'{o}n, que es
relativamente costoso.:


\begin{tscreen}
\begin{verbatim}
# route add wanderer gw vlager mtu 296
\end{verbatim}
\end{tscreen}


\index{Subredes son localesl@`Subredes son Locales', Pol\'{\i}tica}
Debe notar que la opci\'{o}n \option{mtu} tambi\'{e}n permite que, de
forma selectiva, evite los efectos de la pol\'{\i}tica las `Subredes son
locales' (SNARL\footnote{Del ingl\'{e}s Subnets Are Local Policy}). Se
trata de una opci\'{o}n de configuraci\'{o}n del n\'{u}cleo descrita
en el cap\'{\i}tulo~\ref{hardware}.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                               %
%                E N D   O F   C H A P T E R                    %
%                                                               %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
