Fundamentos de Red en FreeBSD

By 16 de agosto de 2007 BSD, FreeBSD 6 Comments

image.jpegHe encontrado un documento que ilustra como configurar la red en FreeBSD (y cualquier distribución BSD basada en FreeBSD).

La he puesto en el siguiente post as is, los retoques que se puedan hacer no son para nada relevantes, eso sí, es posible que en siguientes post pueda poner tips al respecto de la configuración, también es posible que se basen directamente en este 😀

Autor: Pedro Moreno
Fecha: 01 de Agosto del 2004.

Introduccion

Novatos en los sistemas operativos tipo unix como FreeBSD, muy seguido se intimidan por la configuración de la red. Seguro que el proceso de instalación configuro tu tarjeta de red (NIC=Network Interface Card) para ti, pero, ¿a que parte tienes que ir para poder visualizar su configuración? y ¿qué puedes hacer si tu NIC deja de funcionar?. Como las redes son una parte integral de la computación, este artículo te demostrara la forma de verificar, configurar, y optimizar los parámetros de tu red.

Verificando La Configuración de tu Interface.

Si vienes del mundo Microsoft, probablemente has usado ya sea winipcfg o ipconfig /all para verificar la configuración de tu red en el command.com. Unix viene con una utilidad similar, de nombre ifconfig(que significa àconfiguración de interface).Al ingresar este comando, tu veras todas las interfaces del sistema y sus configuraciones. Algunas versiones necesitan que le incluyas -a o all como parámetros.

% ifconfig
  rl0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500

  options=8<VLAN_MTU>

  ether 00:05:5d:d2:19:b7

  media: Ethernet autoselect (10baseT/UTP)

  status: no carrier

  rl1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500

  options=8<VLAN_MTU>  ether 00:05:5d:d1:ff:9d

  media: Ethernet autoselect (10baseT/UTP)

  status: no carrier

  ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

  inet 192.168.2.12 netmask 0xffffff00 broadcast 192.168.2.255

  ether 00:50:ba:de:36:33

  lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384

  inet 127.0.0.1 netmask 0xff000000

La salida puede ser diferente a esta, pero tendrá algunas similitudes. Este sistema en particular no esta ejecutando el kernel base (default), he removido las opciones IPv6, gif y faith que vienen de cajon en el kernel, por eso no se muestran en la salida.

Este sistema tiene tres interfaces de red físicas (rl0, rl1, ed0) y la interface virtual loopback(lo0). Diferentes versiones de Unix difieren una de otra en su manera de nombrar las interfaces. Por ejemplo Linux usa eth para las tarjetas de red Ethernet, asi que el te mostrara sus nombres como eth0, eth1 y eth2. BSD usa el nombre del controlador de cada tarjeta, permitiéndote diferenciar los diferentes tipos de chips y las características disponibles para cada controlador. Para ver la documentación del controlador de tu tarjeta, lee la sección 4 de su manual (man 4). Nota no incluyas el numero de interface, así que busca rl en vez de rl0:

% man 4 rl
  rl -- RealTek 8129/8139 Fast Ethernet device driver
% man 4 ed
  ed -- ethernet device driver

Como este sistema tiene tres tarjetas, solo ed0 esta habilitada (up) y trabajando (running). Las dos tarjetas Realtek no tiene ningun cable conectado a ellas, esto nos lo indican las líneas status: no carrier. En efecto solo ed0, tiene una dirección IP(192.168.2.12), una mascara de red (0xffffff00), y una dirección de difusión(broadcast) (192.168.2.255).

Esa mascara de red esta escrita en hexadecimal, indicado por el dato inicial 0x. Esta mascara en particular no es muy difícil de convertir en decimal, si tu recuerdas que cada par de ff es equivalente a 255. Entonces, la mascara de red aquí es 255.255.255.0 . Si tu encuentras un par de números hexadecimales que no son ff(255) o 00(0), usa bc o la calculadora integrada para convertir ese par de números hexadecimales a decimales. Por ejemplo si tu mascara de red es 0xffffe000:

 % bc
  bc 1.06

  Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

  This is free software with ABSOLUTELY NO WARRANTY.

  For details type `warranty'.

  base=16

  E0

  224

  <Ctrl d>

Aquí le pido a bc que convierta a base 16 o hexadecimal, el numero que se ingresa(base=16). Recuerda convertir cualquier letra a mayúscula, de lo contrario no recibirás la respuestas correcta. Como e0 es 224, en este ejemplo la mascara es 255.255.224.0.

Verificando tu Gateway por Default?.

Cabe notar que ifconfig nos da el status actual, MTU, dirección IP, mascara de red, dirección de difusión, y la dirección Ethernet (o MAC) de cada interface. Sin embargo, no se nos proporciona la direccion de tu Gateway por default o de los servidores DNS.

Para ver la dirección por default de tu Gateway, usamos el comando netstat (status de la red). Usando como parámetro -r (de ruteo), -n para agilizar los resultados brincándose la consulta a los DNS para sacar el nombre textual, y obtenemos:

% netstat -rn
Routing tablesInternet:

Destination      Gateway          Flags    Refs    Use   Netif  Expire

default          192.168.2.100      UGS     0    72664    ed0

127.0.0.1        127.0.0.1          UH      1       46    lo0

192.168.2        link#3             UC      0        0    ed0

192.168.2.12     127.0.0.1          UGHS    0        0    lo0

192.168.2.100    00:48:54:1e:2c:76  UHLW    1        0    ed0   1172

Nota: Los usuarios de Linux pueden usar el comando route para ver resultados similares. Este comando en BSD trabaja diferente; ver man route para que me crean ;-). Sin embargo netstat -rn trabaja en todos los sistemas operativos, incluyendo Linux y los sistemas operativos de Microsoft.

En tu salida, busca la línea que empieza con la palabra default. La dirección IP que tiene asociada es la de tu default Gateway. También mira las banderas de la misma linea. Regularmente indican lo siguiente, U de habilitada, G de Gateway. Esto inidca que puedes comunicarte con tu Gateway. Si el numero que esta en el campo Use no es 0(cero), entonces es el numero de paquetes que les has enviado a tu Gateway.Finalmente, la ultima línea de tu salida muestra la dirección MAC de tu default Gateway.

Verificando la configuración de tus DNS.

El archivo de configuración
/etc/resolv.conf, debe contener los datos de tus servidores DNS. Puedes ver ese archivo con:

 % cd /etc

 % more resolv.conf
  nameserver 209.226.175.236

  nameserver 204.101.251.1

  nameserver 204.101.251.2

Este sistema en particular contiene la direccion IP de 3 servidores DNS. Es una buena idea tener al menos la dirección de 2 servidores, en dado caso que el DNS primario no este disponible.

Mientras tengas conexión a Internet, deberías saber como consultar los servidores DNS de tu PAI(Proveedor de Acceso a Internet o ISP en Ingles) y poder guardar esta información en tu libro de notas junto con la configuración de tu red. Esta información es invaluable si en dado caso necesitas editar de nuevo la configuración manualmente. Si no tienes un libro de notas, puedes obtener esta información de un sistema que tenga una conexión a Internet.

Para encontrar la dirección de tus servidores DNS, usa el comando dig, dominio de información Groper. Aquí voy a consultar los datos del servidor de nombres o ns de mi PAI:

% dig ns sympatico.ca
  ; <<>> DiG 8.3 <<>> ns sympatico.ca

  ;; res options: init recurs defnam dnsrch

  ;; got answer:

  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44589

  ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4

  ;; QUERY SECTION:

  ;; sympatico.ca, type = NS, class = IN

  ;; ANSWER SECTION:

  sympatico.ca. 6h12m33s IN NS ns5.bellnexxia.net.

  sympatico.ca. 6h12m33s IN NS ns6.bellnexxia.net.

  sympatico.ca. 6h12m33s IN NS dns1.sympatico.ca.

  sympatico.ca. 6h12m33s IN NS dns2.sympatico.ca.

  ;; ADDITIONAL SECTION:

  ns5.bellnexxia.net. 9m36s IN A 209.226.175.236

  ns6.bellnexxia.net. 9m37s IN A 209.226.175.237

  dns1.sympatico.ca. 14m7s IN A 204.101.251.1

  dns2.sympatico.ca. 3m56s IN A 204.101.251.2

  ;; Total query time: 46 msec

  ;; FROM: dru.domain.org to SERVER: 209.226.175.236

  ;; WHEN: Sun Apr 11 14:30:14 2004

  ;; MSG SIZE sent: 30 rcvd: 182

Tu salida estará dividida en diferentes etiquetas SECTION. Por ahora concéntrate en la etiqueta ANSWER SECTION, la cual contiene la respuesta de tu consulta usando dig. Mi PAI usa 4 servidores DNS, como se puedes ver en mi respuesta. Cada servidor de nombres usa un registro IN(IPv4) y uno NS(servidor de nombre). Sin embargo la respuesta muestra los nombres de los servidores. Tu no deseas los nombres para tu configuarción (/etc/resolv.conf); tu quieres las direcciones IP de tus servidores de nombres de dominio.

Puedes ver esa información en la etiqueta ADDITIONAL SECTION y ver como esta mapeando los nombres de dominio a sus respectivas direcciones IP. dig también es practico, si alguna vez olvidas el nombre o dirección IP del servidor de correo o SMTP de tu PAI. Esta vez vamos a buscar el registro mx(mail exchange). Aquí solo te muestro la salida de la etiqueta ANSWER SECTION.

  % dig mx sympatico.ca
  (snip)

  ;; ANSWER SECTION:

  sympatico.ca. 20m34s IN MX 5 mta2.sympatico.ca.

  sympatico.ca. 20m34s IN MX 5 mta3.sympatico.ca.

  sympatico.ca. 20m34s IN MX 5 mta1.sympatico.ca.

  (snip)

Como podrá observarse mi PAI tiene 3 servidores SMTP. Observa el numero entre la etiqueta MX y el nombre del servidor de correo. Ese es el numero de prioridad de cada uno, los 3 tienen la misma prioridad; algunos PAI usan diferentes prioridades. Si los tuyos tienen diferentes valores, elige el que tenga numero menor, ese será el que tiene la más alta prioridad.

Verificando tu DHCP alquilado.

Si tus direcciones IP son asignadas por un servidor DHCP, tu puedes observar todas tus configuraciones juntas mirando tu actual alquiler(lease).

Este contrato en si mismo esta encerrado entre corchetes. Si tienes varios, el que esta en la cima de todos es el mas reciente.

% more /var/db/dhclient.leases
  lease {

  interface "ed0";

  fixed-address 192.168.2.12;

  option subnet-mask 255.255.255.0;

  option time-offset -18000;

  option dhcp-lease-time 345600;

  option routers 192.168.2.100;

  option dhcp-message-type 5;

  option dhcp-server-identifier 192.168.2.100;

  option domain-name-servers 209.226.175.236,204.101.251.1,204.101.251.2;

  renew 2 2004/4/13 02:13:03;

  rebind 3 2004/4/14 23:34:37;

  expire 4 2004/4/15 11:34:37;

  }

Agregando una tarjeta.

Es una de las cosas que debes saber, como verificar la configuración de tu interface, y que tal si deseas configurar una? Vamos a decir que tu acabas de agregar una nueva tarjeta a tu sistema. Una vez que tu computadora se reinicia, deseas verificar que tu nueva tarjeta fue reconocida. Puedes usar el comando ifconfig y buscar información de una nueva tarjeta. O tambien puedes usar la información de prueba de booteo y buscar direcciones Ethernet. Solo recuerda incluir la letra E mayuscula en la búsqueda:

% grep Ethernet /var/run/dmesg.boot
  rl0: Ethernet address: 00:05:5d:d2:19:b7

  rl1: Ethernet address: 00:05:5d:d1:ff:9d

  ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0x9800-0x981f irq 10 at

  device 11.0 on pci0

Si tu nueva NIC se muestra, esta lista para ser configurada -pero, que tal si tu nueva NIC no fue reconocida al reiniciar? La primera pregunta que te tienes que hacer es, "He creado un kernel personalizado?" Si es el caso, checa el archivo de tu kernel; a lo mejor deshabilitastes el controlador de tu NIC.

Si esa no es la solución, vas a tener que reiniciar y examinar la configuración de tu CMOS o los jumpers de tu tarjeta. Deshabilitastes algunas IRQs? Habilitastes algunas dispositivos integrados que no usas? Si eso es, a lo mejor estan malgastando los IRQs y dejando fuera tu NIC. Si decides cambiar la configuración de tu CMOS, antes de, en una hoja escribe los valores originales. Cambia de uno en uno, reinicia y prueba tantas veces requieras.

Si tu NIC es PCI, verifica la opcion PnP OS de tu CMOS. Algunas veces cambiarla de Yes a No, resuelve el problema o algunas veces, cambiar la NIC a otra rejilla de la tarjeta madre resuelve el problema. Finalmente como ultimo recurso, para ver si es un problema de IRQs, quitamos todas las tarjetas excepto la NIC y la de video. Si la tarjeta es reconocida, tienes mas tarjetas instaladas que IRQs.

Configurando la información de tus direcciónes IP.

Una vez que tu tarjeta fue reconocida, aunque vayas a asignar la direccion IP, ya sea manualmente o por medio de un servidor DHCP. Cualquier método que uses, es necesario modificar el archivo /etc/rc.conf. Si prefieres puedes usar el commando /stand/sysinstall, el cual modificara este archivo por ti. Esta es la misma utilería que usaste cuando instalaste tu sistema FreeBSD. Una vez que la utileria inicia, elige Configure->Networking y usa la barra espaciadora para elegir Interfases.

De otra manera, utiliza tu editor favorito para modificar el archivo /etc/rc.conf. Por ejemplo las siguientes lineas asignan estaticamente una direccion IP, mascara de red a la interface rl0, y agregan la direccion por default del Gateway:

ifconfig_rl0="inet 192.168.2.25 netmask 255.255.255.0"

defaultrouter="192.168.2.100"

Tambien, si usas direcciones IP estaticas, no se te olvide agregar la direccion IP de tus servidores DNS a el archivo /etc/resolv.conf. Si utilizas un servidor DHCP para obtener esos datos, solo necesitas agregar una linea a el archivo /etc/rc.conf:

ifconfig_rl0="DHCP"

En este caso no necesitas agregar la información de tus servidores DNS o de tu Gateway, ya que la informacion asignada por tu servidor DNS deben incluir esta información(/var/db/dhclient.leases)

Cuando guardes los cambios a tu archivo /etc/rc.conf, reinicia la configuración de tu red:

# /etc/netstart

NOTA: Si tu necesitas renovar tu archivo dhclient.leases para renovar la informacion de tu DHCP, usa este comando, pero sustituye rl0 por el nombre de tu NIC.

# dhclient -r rl0

Optimizando tu Configuración.

Al menos que tengas una tarjeta muy vieja, o específicamente adquiriste una NIC de 100Mpbs, tu NIC puede manejar velocidades entre 10/100Mbps. Es nos dice que es capaz de negociar velocidades de 10 a 100Mbps. Puede ser que también opere ya sea hall-duplex (no puede recibir ni enviar al mismo tiempo) o full-duplex(puede enviar y recibir al mismo tiempo)

Este proceso de negociación ocurre entre tu NIC y el hub o switch al otro lado de tu cable de red.

Obviamente, 100Mbps en operación full-duplex es mejor que 10Mbps half-duplex. El factor limitante sera el hub o switch; su documentación indicara la velocidad y modo de operación. Si no soporta 100Mbps o full-duplex, nos vas a recibir el rendimiento esperado de tu NIC y tu experiencia en redes será menor.

Sin embargo, debes tener en cuenta que si el hub o switch soportan 100Mbps en operación full-duplex, el hub o switch renegocian esos valores en la marcha. Si tu NIC siempre esta conectado a el mismo hub o switch, es mejor configurar estos equipos a esos valores fijos para ahorrarnos el tiempo de procesamiento que se lleva en la negociación.

Esto depende totalmente del controlador de tu NIC, asi que detenidamente lee el manual numero 4(man 4) de tu controlador. En mi red ejemplo, yo mejor deberia desconectar mi ed0 y remplazarla por una de las Realtek. Por que? man 4 edindica que este controlador solo soporta 10Mbps en modo half-duplex (IEEE 802.3 CSMA). Sin embargo man 4 rl indica que este controlador se puede configurar para trabajar a 100Mbps en modo full-duplex.

Aquí esta un ejemplo de las lineas que agregaria a el archivo /etc/rc.conf

ifconfig_rl0="DHCP"

ifconfig_rl0="100baseTX mediaopt full-duplex"

Aquí ahí algunas cosas que debo señalar. Una, la pagina man nos indica que opciones estan disponibles y como configurarlas. Dos, no trates de agregar ninguna configuración que el controlador de tu NIC no soporte, al menos que lo indique su pagina man. Tres, no cambies el modo de operación y velocidad si tu hub o switch no los soporta.

Para ver si mis cambios van a funcionar, conectare mi cable de red a mi tarjeta rl0 y ejecutare el comando /etc/netstart. Y observare los resultados:

% ifconfig rl0
  rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

  options=8<VLAN_MTU>  inet 192.168.2.87 netmask 0xffffff00 broadcast 192.168.2.255

  ether 00:05:5d:d2:19:b7

  media: Ethernet autoselect (100baseTX <full-duplex>)

  status: active

Exitoso!

NOTA: La traduccion de este documento fue gracias a la autorizacion de su autor(a) original: Dru Lavigne, y originalmente lo puedes encontrar en el sitio de donde fue obtenido: http://www.onlamp.com/lpt/a/4828 y el cual tiene todos los derechos. Esperemos que por mucho tiempo siga aportando documentos como este a los que deseamos conocer mas el mundo de los BSD. Si por ahi encuentran algo mal traducido, ya saben como contactarme para corregirlo :-). Hasta pronto.

6 Comments

  • Raymundo dice:

    Muy Buen Artículo me fue de gran ayuda 😀

  • ronon04 dice:

    hola solusan muy buen post

    sabras el como crear una red virtual, tengo instalado pc-bsd 7.1.1, gracias

  • PobrecitoHablador dice:

    Una red virtual .... ¿? Dejame que piense.
    Ya la tengo creada! Que no la ves? Claro, es virtual!!!

  • Goboljubow dice:

    Hola. He instalado FreeBSD 8.0 pero tengo el problema de que no tengo acceso a la red, por lo menos no puedo hacer ssh desde mi máquina a otra de la red local o externa, aunque sí puedo entrar a mi máquina desde otra con ssh. Tampoco puedo instalar nada por ports porque no puedo tener acceso a la red. Con un ping puedo detectar la máquina, tiene ip pero por alguna razón no puedo "salir" de ella, aunque sí puedo "entrar".
    Saludos.

  • daniel cruz guerra dice:

    magnifico articulo :)

Leave a Reply

Your email address will not be published.