Cómo encontrar la puerta de enlace
.2 Puerta de enlace y enrutamiento
Colaborador: Coranth Gryphon. Traductor de chino: Zhang Xueping y Yuan Suyi
Para permitir que dos computadoras en la red se comuniquen. entre sí Para comunicarse, debe haber un mecanismo que pueda describir cómo pasar de una computadora a otra. Este mecanismo se llama enrutamiento. Una "entrada de enrutamiento" es un par de direcciones predefinidas: "destino" y "puerta de enlace". El significado de este par de direcciones es que la comunicación con el destino se puede completar a través de la puerta de enlace. Hay tres tipos de direcciones de destino: host único, subred y "predeterminada". Si no hay otra ruta disponible, se utilizará la "ruta predeterminada", que se analizará en un capítulo posterior. También hay tres tipos de puertas de enlace: host único, interfaz de red (también llamadas "enlaces") y dirección de hardware Ethernet (dirección MAC).
29.2.1 Ejemplos
Para ilustrar las distintas partes del enrutamiento, primero observe el siguiente ejemplo. Este es el resultado del comando netstat:
% netstat -r
Tablas de enrutamiento
Indicadores de puerta de enlace de destino Refs Use Netif Expire
predeterminado fuera -gw UGSc 37 418 ppp0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77
10.20.30.255 enlace#1 UHLW 1 2421
example.com enlace#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 p>
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.example.com enlace#1 UC 0 0
224 link #1 UC 0 0
Las dos primeras líneas proporcionan la ruta predeterminada (descrita en la siguiente sección) y la ruta localhost (nativa) en la configuración actual.
La interfaz (columna Netif) proporcionada aquí en la tabla de enrutamiento para localhost es lo0, que también se conoce como "dispositivo de bucle invertido". Significa que todo el tráfico "destinado" a esta ubicación permanece en la máquina y no sale a través de la LAN, ya que el tráfico eventualmente regresará al origen.
Luego viene la dirección que comienza con 0:e0:. Estas son direcciones de hardware Ethernet, también conocidas como direcciones MAC.
FreeBSD identificará automáticamente cualquier host en la misma Ethernet (como test0), le agregará una nueva ruta y se comunicará directamente con él a través de esa interfaz Ethernet: ed0 (Nota del traductor: ese host). También hay un elemento de tiempo de espera (columna Expire) asociado con este tipo de tabla de enrutamiento, que resulta útil cuando no recibimos información de ese host dentro de un tiempo específico. En este caso, la ruta a este host se eliminará automáticamente. Estos hosts se identifican mediante un mecanismo llamado RIP (Protocolo de información de enrutamiento), que calcula la ruta al host local basándose en la "determinación de la ruta más corta".
FreeBSD también agrega rutas de subred para la subred local (10.20.30.255 es la dirección de transmisión de la subred 10.20.30 y ejemplo.com es el nombre de dominio asociado con esta subred). El nombre link#1 representa la primera tarjeta Ethernet en el host. Notará que no se especifican interfaces adicionales para ellos.
Las rutas para estos dos grupos (host de red local y subred local) son configuradas automáticamente por el demonio enrutado. Si no se está ejecutando, solo existirán rutas definidas estáticamente (es decir, escritas explícitamente).
La línea host1 representa nuestro host, identificado por su dirección Ethernet. Como somos el remitente, FreeBSD sabe utilizar la interfaz loopback (lo0) en lugar de enviar a través de la interfaz Ethernet.
Las dos líneas host2 son un ejemplo de lo que sucede cuando usamos el alias ifconfig(8) (consulte la sección sobre Ethernet para ver por qué hacemos esto). El símbolo => después de la interfaz lo0 indica no sólo que estamos usando un loopback (ya que esta dirección también se refiere a localhost), sino también que es un alias. Este tipo de enrutamiento sólo aparecerá en hosts que admitan alias. Todos los demás hosts de la red local simplemente tendrán el enlace n.° 1 para este tipo de ruta.
La última línea (subred de destino 224) maneja la multidifusión; cubrirá otras áreas.
Por último, en la columna Banderas se pueden ver las diferentes propiedades de cada ruta. Aquí hay una breve lista de estos indicadores y sus significados:
U Arriba: la ruta está activa.
Host H: El destino de enrutamiento es un único host.
G Gateway: Todo el tráfico de red enviado al destino se transmite a este sistema remoto, y éste determina dónde enviarlo.
S Estática: Esta ruta se configura manualmente y no es generada automáticamente por el sistema.
C Clonar: Genera una nueva ruta a través de la cual podremos conectarnos a estas máquinas. Este tipo de enrutamiento se utiliza normalmente en redes locales.
W WasCloned: especifica una ruta; se configura automáticamente en función de la ruta de la red de área local (clon).
L Link: El enrutamiento involucra hardware Ethernet.
29.2.2 Ruta predeterminada
Cuando el sistema local necesita establecer una conexión con un host remoto, verifica la tabla de enrutamiento para determinar si existe una ruta conocida. Si el host remoto pertenece a una subred a la que ya sabemos cómo llegar (la ruta clonada), entonces el sistema verifica si la conexión es posible a lo largo de esa interfaz.
Si todas las rutas conocidas fallan, el sistema tiene una última opción: la ruta "predeterminada". Esta ruta es un tipo especial de ruta de puerta de enlace (a menudo sólo existe una en el sistema) y siempre se identifica con una c en la barra de banderas. Para los hosts de la red de área local, esta puerta de enlace se configura para cualquier máquina que tenga una conexión directa con el mundo exterior (ya sea a través de PPP, DSL, módem por cable, T1 u otra conexión de interfaz de red).
Si está configurando una ruta predeterminada para una máquina que actúa como puerta de enlace para conectarse al mundo exterior, entonces la ruta predeterminada debe ser la máquina de puerta de enlace de su "Proveedor de servicios de Internet (ISP)".
Veamos un ejemplo de enrutamiento predeterminado. Esta es una configuración muy común:
Los hosts Local1 y Local2 están de tu lado. Local1 está conectado al ISP mediante acceso telefónico PPP. Este servidor PPP está conectado a otra máquina de puerta de enlace a través de una LAN, que a su vez está conectada a Internet proporcionada por el ISP a través de una interfaz externa.
La ruta predeterminada para cada una de sus máquinas debe ser:
Interfaz de puerta de enlace predeterminada del host
Local2 Local1 Ethernet
Local1 T1- GW PPP
Una pregunta común es "¿Por qué (o cómo) podemos configurar T1-GW como la puerta de enlace predeterminada de Local1 en lugar del servidor ISP al que está conectado?" , debido a que la interfaz PPP utiliza una dirección en la LAN del ISP para su conexión. Para otras máquinas en la LAN del ISP, sus rutas se generarán automáticamente. Por lo tanto, ya sabe cómo llegar a la máquina T1-GW, por lo que no es necesario dar ese paso: enviar la comunicación al servidor ISP.
Normalmente se utiliza la dirección X.X.X.1 como puerta de enlace de una LAN. Entonces (usando el mismo ejemplo), si su espacio de direcciones local Clase C es 10.20.30 y su ISP usa 10.9.9, la tabla de rutas predeterminada sería:
Ruta predeterminada del host
Local2 (10.20.30.2) Local1 (10.20.30.1)
Local1 (10.20.30.1, 10.9.9.30) T1-GW (10.9.9.1)
Puedes fácilmente establezca la ruta predeterminada a través del archivo /etc/rc.conf. En nuestro ejemplo, en el host Local2, agregamos el siguiente contenido al archivo /etc/rc.conf:
defaultrouter="10.20.30.1"
También puedes usar directamente el comando route(8) desde la línea de comando:
# route add default 10.20.30.1
Para obtener más detalles sobre cómo mantener manualmente las tablas de enrutamiento de red, consulte route(8). ) Manual en línea.
29.2.3 Hosts con doble inicio
Hay otro tipo de configuración que queremos mencionar, que es un host en dos redes diferentes. Técnicamente, cualquier máquina que actúe como puerta de enlace (en el ejemplo anterior, utilizando una conexión PPP) cuenta como rehost. Pero esta palabra en realidad sólo se usa para referirse al tipo de máquina que se encuentra en dos LAN.
En una situación, una máquina tiene dos tarjetas de red y cada subred tiene su propia dirección. En otro caso, la máquina solo tiene una tarjeta de red, pero tiene un alias usando ifconfig(8). Si hay dos redes Ethernet independientes en uso, use la primera. Si solo hay un segmento de red físico pero está dividido lógicamente en dos subredes independientes, use la segunda.
En cada caso, la tabla de enrutamiento debe configurarse para que ambas subredes sepan que este host es la puerta de entrada a la otra subred: la ruta de entrada. La configuración de un host como enrutador entre dos subredes se utiliza a menudo cuando necesitamos implementar firewalls o filtrado de paquetes unidireccionales o bidireccionales.
Si desea que el host reenvíe paquetes entre dos interfaces, debe activar esta característica de FreBSD. En cuanto a cómo hacer esto, consulte la siguiente sección para obtener más información.
29.2.4 Construcción de un enrutador
Un enrutador de red es simplemente un sistema que reenvía paquetes de una interfaz a otra. Los estándares de Internet y las buenas prácticas de ingeniería impiden que FreeBSD establezca esto como predeterminado en FreeBSD. Puede cambiar el valor de las siguientes variables a YES en rc.conf(5) para habilitar esta característica:
gateway_enable=YES # Establezca en YES si este host será una puerta de enlace
Esta opción establecerá la variable sysctl(8) - net.inet.ip.forwarding en 1. Si desea detener temporalmente el enrutamiento, puede restablecerlo a 0.
Los nuevos routers necesitan enrutamiento para saber dónde enviar datos. Si su red es lo suficientemente simple, puede utilizar el enrutamiento estático. FreeBSD también viene con un demonio de enrutamiento BSD estándar routed(8), llamado RIP (versión 1 y versión 2) e IRDP. La compatibilidad con BGP v4, OSPF v2 y otros protocolos de enrutamiento complejos está disponible en el paquete net/zebra. Los productos comerciales como GateD® también ofrecen soluciones de enrutamiento de red más sofisticadas.
29.2.5 Configuración de enrutamiento estático
Colaborador: Coranth Gryphon. Traducción al chino: Zhang Xueping y Yuan Suyi
29.2.5.1 Configuración manual
Supongamos una red como esta:
Aquí, el RouterA es nuestra máquina FreeBSD, que actúa como un enrutador para el resto de Internet. La ruta predeterminada está configurada en 10.0.0.1, lo que permite conexiones con el mundo exterior. Suponemos que hemos configurado correctamente el RouterB y sabemos cómo conectarnos a donde queramos ir. (Es muy simple en esta imagen. Simplemente agregue una ruta predeterminada en el RouterB y use 192.168.1.1 como puerta de enlace).
Si miramos la tabla de enrutamiento del RouterA, veremos el siguiente contenido:
% netstat -nr
Tablas de enrutamiento
Internet:
Indicadores de puerta de enlace de destino Refs Usar Netif Expire
predeterminado 10.0.0.1 UGS 0 49378 xl0
127.0.0.1 127.0.0.1 UH 0 6 lo0
10.0.0/24 enlace#1 UC 0 0 xl0
192.168.1/24 link#2 UC 0 0 xl1
Usando la tabla de enrutamiento actual, el RouterA no puede alcanzar nuestra red interna - Internal Net 2. No tiene ruta a 192.168.2.0/24. Un enfoque aceptable es agregar la ruta manualmente.
El siguiente comando agregará la red Internal Net 2 a la tabla de enrutamiento del enrutador A, utilizando 192.168.1.2 como siguiente salto:
# route add -net 192.168.2.0/24 192.168.1.2
El enrutador A ahora puede llegar a cualquier host en la red 192.168.2.0/24.
29.2.5.2 Configuración permanente
El ejemplo anterior es bastante bueno para configurar rutas estáticas en un sistema en ejecución. Sólo que hay un problema: si reinicia su máquina FreeBSD, la información de enrutamiento desaparece. La forma de manejar rutas estáticas adicionales es colocarlas en su archivo /etc/rc.conf.
# Agregar Internal Net 2 como ruta estática
static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"
La variable de configuración static_routes es una cadena separada por espacios. Cada cadena representa un nombre de ruta. En el ejemplo anterior tenemos una cadena en static_routes. internalnet2 en esta cadena. Luego agregamos una nueva variable de configuración route_internalnet2, donde tomamos todos los parámetros pasados al comando route(8). El comando que utilicé en el ejemplo anterior es:
# route add -net 192.168.2.0/24 192.168.1.2
Por lo tanto, lo que necesitamos es "-net 192.168.2.0/ 24 192.168.1.2".
Como se mencionó anteriormente, puedes poner los nombres de múltiples rutas estáticas en static_routes. Luego crearemos múltiples rutas estáticas. Las siguientes líneas muestran un ejemplo de cómo agregar una ruta estática entre 192.168.0.0/24 y 192.168.1.0/24 en un enrutador hipotético:
static_routes="net1 net2"
route_net1= "-net 192.168.0.0/24 192.168.0.1"
route_net2="-net 192.168.1.0/24 192.168.1.1"
29.2.6 Propagación de ruta
Hemos discutido cómo definir rutas hacia el mundo exterior, pero no cómo nos encuentra el mundo exterior.
Ya sabemos que podemos configurar tablas de enrutamiento para que cualquier dato que apunte a un espacio de direcciones específico (en nuestro caso, una subred Clase C) se envíe a un host específico en la red y luego desde esa máquina El host reenvía datos dentro del espacio de direcciones.
Cuando obtienes un espacio de direcciones asignado a tu red, el ISP (proveedor de servicios de Internet) configurará sus tablas de enrutamiento para que los datos dirigidos a tu subred te lleguen a través de la red de conexión PPP. Pero, ¿cómo saben otras redes a través de fronteras nacionales que deben pasar datos a su ISP?
Existe un sistema (muy parecido a un sistema de información DNS distribuido) que realiza un seguimiento de los espacios de direcciones asignados y los puntos en los que se conectan a la red troncal de Internet. "Backbone" se refiere a la principal línea troncal responsable de la transmisión mundial y transnacional. Cada máquina troncal tiene una copia del conjunto de tablas principales, que dirige los datos enviados a una red específica al operador troncal correspondiente, atravesando la cadena del proveedor de servicios desde el nodo hasta que llegan los datos a su red.
El trabajo del proveedor de servicios es transmitir a la red troncal que es el punto de conexión a su sitio (y la ruta de entrada). Esta es la propagación de rutas.
29.2.7 Solución de problemas
A veces hay un problema con la propagación de rutas y algunas redes no pueden conectarse a usted. Quizás el comando más útil para ayudarle a determinar dónde se interrumpe una ruta es traceroute(8). Este comando también es útil cuando no puede conectarse al host remoto (por ejemplo, falla ping(8)).
El comando traceroute(8) se ejecutará con el nombre del host al que desea conectarse como argumento. Independientemente de si el objetivo se alcanzó o finalizó debido a la falta de conexión, mostrará todos los hosts de puerta de enlace por los que pasó.
Para obtener más información, consulte el manual de traceroute(8).
29.2.8 Enrutamiento de multidifusión
FreeBSD admite aplicaciones de multidifusión y enrutamiento de multidifusión desde el principio. Los programas de multidifusión no requieren ninguna configuración especial de FreeBSD para funcionar bien. El enrutamiento de multidifusión debe ser compatible con la compilación en el kernel:
opciones MROUTING
Además, el demonio de enrutamiento de multidifusión - mrouted(8) debe habilitarse a través de /etc/mrouted.conf Canales de configuración y DVMRP. Puede encontrar más información sobre la configuración del enrutamiento de multidifusión en el manual mrouted(8).