Manual Gentoo Linux amd64: Configuración de redes
La siguiente parte del manual sobre redes describe la configuración de red 'avanzada' para sistemas que ejecutan el sistema de inicio OpenRC utilizando netifrc como sistema de administración de red.
Para los sistemas que ejecutan systemd, los lectores deben revisar la parte de redes del artículo systemd.
Comenzar
Esta guía de redes da por supuesto que el usuario tiene el sistema correctamente configurado y ha determinado el nombre o nombres de las interfaces físicas de red. El nombre de interfaz de red en el sistema es generado en base a la posición de la tarjeta de red dentro del bus. Debido a esto es posible que haya variaciones en los nombres de las interfaces incluyendo: eno0, ens1, wlan0, enp1s0, etc. Cada sistema puede tener un nombre de interfaz ligeramente diferente. En adelante, se asume que el nombre de la interfaz a configurar es eth0, aunque con cualquiera de los nombres mencionados funcionaría.
Para comenzar a configurar su tarjeta de red, necesitamos que el sistema RC (guiones de inicio) de Gentoo la reconozca. Esto se hace creando un enlace simbólico desde net.lo a net.eth0 (o el nombre que tenga la interfaz de red en su sistema) en /etc/init.d.
root #
cd /etc/init.d
root #
ln -s net.lo net.eth0
El sistema RC de Gentoo ahora conoce la interfaz. También necesita saber cómo configurar la nueva interfaz. Todas las interfaces de red son configuradas en el archivo /etc/conf.d/net. A continuación se muestra un ejemplo de configuración para DHCP y direcciones estáticas.
# Para DHCP
config_eth0="dhcp"
# Para una IP estática usando notación CIDR
config_eth0="192.168.0.7/24"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
# Para una IP estática usando notación de máscara de red
config_eth0="192.168.0.7 netmask 255.255.255.0"
routes_eth0="default via 192.168.0.1"
dns_servers_eth0="192.168.0.1 8.8.8.8"
Si no especifica una configuración para la interfaz entonces se asume el uso de DHCP.
CIDR (Classless InterDomain Routing). Originariamente, las direcciones IPv4 fueron clasificadas en A, B, o C. Esta clasificación temprana no tuvo en cuenta la gran popularidad que obtendría Internet, y ahora corre el riesgo de no tener suficientes direcciones únicas. CIDR es un esquema de direccionamiento que permite que una dirección IP designe muchas direcciones IP. Una dirección IP CIDR es igual que una dirección IP normal excepto que termina con una barra invertida seguida de un número; por ejemplo: 192.168.0.0/16. CIDR se describe en RFC 1519.
Ahora que ya hemos configurado nuestra interfaz, podemos iniciarla o detenerla utilizando las siguientes órdenes:
root #
rc-service net.eth0 start
root #
rc-service net.eth0 stop
Cuando esté solucionando problemas con la red, échele una mirada a /var/log/rc.log. A no ser que haya configurado la variable rc_logger a
NO
en /etc/rc.conf, encontrará información almacenada en este archivo de registro acerca de las actividades al arrancar.Ahora que ya ha iniciado y detenido la interfaz de red, quizá quiera que comience automáticamente cuando Gentoo arranca. Aquí tiene cómo hacerlo.
root #
rc-update add net.eth0 default
root #
rc
La última orden rc indica a Gentoo que inicie todos los guiones en el nivel de ejecución actual que todavía no se hayan sido iniciado.
Configuración Avanzada
La variable config_eth0 es el corazón de la configuración de una interfaz. Es una lista de instrucciones de alto nivel para configurar la interfaz (eth0 en este caso). Cada orden en la lista de instrucciones se ejecuta de manera secuencial. La interfaz será evaluada como OK si, al menos, un orden funciona.
Aquí tiene una lista de instrucciones integradas:
Valor | Descripción |
---|---|
null
|
No hacer nada |
noop
|
Si la interfaz está funcionando y existe una dirección entonces aborta la configuración con éxito |
Una dirección IPv4 o IPv6 | Añade la dirección a la interfaz |
dhcp , adsl o apipa (o un valor propio perteneciente a un módulo de terceras partes)
|
Ejecuta el módulo que proporciona la ofrece DHCP que se puede mediante dhcpcd, dhclient o pump. |
Si una orden falla, puede especificar un valor de retorno (fallback). El retorno tiene que coincidir exactamente con la estructura de la configuración.
Puede encadenar estos valores. A continuación se muestran algunos ejemplos reales.
# Añadir tres direcciones IPv4
config_eth0="192.168.0.2/24
192.168.0.3/24
192.168.0.4/24"
# Añadir una dirección IPv4 y dos IPv6
config_eth0="192.168.0.2/24
4321:0:1:2:3:4:567:89ab
4321:0:1:2:3:4:567:89ac"
# Mantener la dirección asignada por el núcleo, a menos que la
# interfaz se caiga, entonces asignar otra vía DHCP. Si DHCP falla entonces
# añadir una dirección estática determinada mediante APIPA
config_eth0="noop
dhcp"
fallback_eth0="null
apipa"
Cuando se utiliza el módulo
ifconfig
y se añade más de una dirección, se crean alias de interfaz para cada dirección extra. De esta manera los dos ejemplos anteriores tendrán interfaces eth0, eth0:1 y eth0:2. No se puede hacer nada especial con estas interfaces ya que el núcleo y otros programas simplemente tratan eth0:1 y eth0:2 como eth0.¡La orden de retorno es importante! Si no especificamos la opción null, la orden
apipa
se ejecutaría solo si la orden noop
falla.Dependencias de red
Los guiones en /etc/init.d/ pueden depender de una interfaz de red específica o, simplemente, de "net" (red). Todos los interfaces de red en el sistema de inicio de Gentoo proporcionan algo llamado "net".
Si, en /etc/rc.conf, la variable rc_depend_strict se establece en YES
, entonces todas las interfaces de red que proporcionan "net" deben estar activas antes de que se asuma que se cumple una dependencia de "net". En otras palabras, si un sistema tiene net.eth0 y net.eth1 y un script de inicio depende de "net", ambos deben estar habilitados.
Por otro lado, si está configurado rc_depend_strict="NO"
, entonces la dependencia de "net" se considera cumplida al momento de estar activo al menos uno de los interfaces de red.
Pero, ¿y qué pasa si net.br0 depende de net.eth0 y net.eth1? net.eth1 podría ser un dispositivo inalámbrico o ppp que necesita configurarse antes de añadirse al puente. Esto no puede hacerse en /etc/init.d/net.br0 ya que es un enlaces simbólico a net.lo.
La respuesta es definir un ajuste rc_net_{interface}_need en /etc/conf.d/net:
rc_net_br0_need="net.eth0 net.eth1"
Lo anterior no es suficiente. Los guiones de inicio de Gentoo utilizan una dependencia virtual llamada "net" para informar al sistema cuando está disponible la conexión a red. Claramente, en el caso de arriba la conexión a red debería marcarse como disponible cuando net.br0 está funcionando, no cuando lo están las otras. Por lo que tenemos que indicar también esto en /etc/conf.d/net:
rc_net_eth0_provide="!net"
rc_net_eth1_provide="!net"
Para una lectura más detallada sobre dependencias, consulte la sección Guiones de Inicio en el manual de Gentoo. Se puede encontrar más información acerca de /etc/rc.conf en los comentarios dentro del propio archivo.
Nombres de variables y valores
Los nombres de variables son dinámicos. Normalmente sigue la estructura variable_${interface|mac|essid|apmac}
. Por ejemplo, la variable dhcpcd_eth0 guarda los valores para las opciones de dhcpcd para eth0 y dhcpcd_essid los valores para dhcpcd cuando cualquier interfaz se conecta al ESSID "essid".
Sin embargo, no hay ninguna regla que indique que los nombre de las interfaces sean ethx. De hecho, muchas interfaces inalambricas tienen nombres como wlanx, rax o ethx. También, algunas interfaces definidas por el usuario como pueden ser puentes puede tener cualquier nombre. Para hacer la vida un poco más interesante, los puntos de acceso inalámbricos pueden tener nombres con caracteres no alfanuméricos - esto es importante porque se pueden configurar los parámetros de red por ESSID.
La desventaja de todo esto es que Gentoo usa variables bash para la red - y bash no puede utilizar nada fuera de caracteres alfanuméricos ingleses. Para solucionar esta limitación cambiamos cada carácter que no sea alfanumérico inglés por un carácter _.
Otra desventaja de bash es el contenido de las variables - algunos caracteres necesitan especificarse de manera especial. Esto se hace utilizando \ (la barra invertida) delante del carácter. A continuación tenemos una lista de caracteres especiales que necesitamos indicar de esta manera: ", ' y \.
En este ejemplo utilizamos un ESSID inalámbrico ya que puede contener un amplio abanico de caracteres. Deberemos utilizar ESSID My "\ NET:
# Esto funciona, pero el dominio no es válido
dns_domain_My____NET="My \"\\ NET"
Lo que hay arriba configura el dominio dns a My "\ NET cuando una tarjeta inalámbrica se conecta a un AP cuyo ESSID es My "\ NET.
Nombrado de las interfaces de red
Cómo funciona
Los nombres de la interfaces de red no se obtienen de forma arbitraria: el núcleo Linux y el gestor de dispositivos (la mayoría de sistemas utilizan udev como gestor de dispositivos, aunque existen otros) obtiene el nombre de la interfaz mediante una serie de reglas prefijadas.
Cuando se detecta una interfaz en un sistema, el núcleo Linux recolecta los datos disponibles para esa tarjeta de red. Estos datos incluyen:
- El nombre registrado de tarjeta de red (en la propia interfaz) y que más tarde se podrá obtener a través del valor de ID_NET_NAME_ONBOARD.
- La ranura en la cual se ha insertado la tarjeta de red y que más tarde se podrá obtener a través del valor de ID_NET_NAME_SLOT.
- La ruta a través de la cual se accede a la tarjeta de red y que más tarde se podrá obtener a través del valor de ID_NET_NAME_PATH.
- La dirección MAC de la tarjeta (que ofrece el fabricante) que más tarde se podrá obtener mediante el valor de ID_NET_NAME_MAC.
Basándose en esta información, el gestor de dispositivos decide como nombrar a las interfaces presentes en el sistema. Por defecto, utiliza el primero de las tres primeras variables que se muestran arriba (ID_NET_NAME_ONBOARD, _SLOT o _PATH). Por ejemplo, si se encuentra un valor para ID_NET_NAME_ONBOARD y éste es eno1
, entonces la interfaz de red se llamará eno1.
Si sabe el nombre de su interfaz, puede ver los valores de las variables mediante la orden udevadm:
root #
udevadm test-builtin net_id /sys/class/net/enp3s0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76 ID_OUI_FROM_DATABASE=Quanta Computer Inc. ID_NET_NAME_PATH=enp3s0
Como la primera (y realmente la única) de las tres variables es ID_NET_NAME_PATH, su valor se utiliza para nombrar al interfaz de red. Si ninguna de las variables tienen valor, entonces el sistema utiliza los nombres que ofrece el núcleo (eth0, eth1, etc.)
Utilizar el nombrado del núcleo al viejo estilo
Antes de este cambio, era el núcleo el que ponía los nombres a las tarjetas de red, dependiendo del orden en el que se cargaran sus controladores (entre otras, probablemente oscuras razones). Este comportamiento se puede aún activar definiendo el parámetro net.ifnames=0
en el gestor de arranque.
Usar sus propios nombres
La idea detrás de este cambio en el nombrado es la de no confundir a la gente y hacer los cambios de nombre de forma fácil. Suponga que tiene dos interfaces que se llamarían eth0 y eth1. Una se utiliza para acceder a la red a través de cable y la otra es inalámbrica. Con el soporte para el nombrado de interfaces, puede llamarlas lan0 (cableada) y wifi0 (inalámbrica, es mejor evitar usar los nombres anteriores bien conocidos como eth* y wlan* ya que todavía pueden parecerse a los nombres que hemos sugerido).
Todo lo que necesita ahora es encontrar los parámetros para las tarjetas y utilizar esta información para definir su propia regla de nombrado:
root #
udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null
ID_NET_NAME_MAC=enxc80aa9429d76 ID_OUI_FROM_DATABASE=Quanta Computer Inc.
root #
vim /etc/udev/rules.d/70-net-name-use-custom.rules
# El primero utiliza la información MAC y el número 70- para que se lance antes que otras reglas de red SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c8:0a:a9:42:9d:76", NAME="lan0"
root #
vim /etc/udev/rules.d/76-net-name-use-custom.rules
# El segundo utiliza la información de ID_NET_NAME_PATH y el número 76- para estar entre los dos # 75-net-*.rules y 80-net-*.rules SUBSYSTEM=="net", ACTION=="add", ENV{ID_NET_NAME_PATH}=="enp3s0", NAME="wifi0"
Debido a que las reglas se disparan antes de la regla por defecto (las reglas se disparan en orden alfanumérico, por lo que la 70 se lee antes que la 80), los nombres ofrecidos en el fichero de reglas se utilizarán en lugar de los que se usan por defecto. El número asignado al fichero debería estar entre 76 y 79 (las variables de entorno se definen mediante una regla que comienza por 75 y el nombrado por defecto lo realiza una regla con el número 80).
Módulos de Red
Los guiones netifrc ofrecen soporte para guiones modulares de red, lo cual significa que se puede añadir fácilmente soporte para nuevos tipos de interfaces y módulos de configuración mientras se mantiene la compatibilidad con los actuales.
Los módulos se cargan por defecto si el paquete que los requiere está instalado. Si especifica un modulo aquí que no tiene su paquete instalado, entonces obtendrá un error acerca del paquete que necesita instalar. Lo ideal sería que solamente use la configuración con módulos si tiene dos o más paquetes que proporcionen el mismo servicio y necesita marcar su preferencia de uno sobre los otros.
Todas las configuraciones que aquí se comentan, son almacenadas en /etc/conf.d/net a menos que se especifique lo contrario.
# Preferir ifconfig sobre iproute2
# modules="ifconfig"
# También se puede especificar otros módulos para una interfaz
# En este caso preferimos a dhclient sobre dhcpcd
modules_eth0="dhclient"
# También podemos especificar módulos que no queremos utilizar -
# por ejemplo, puede querer utilizar un suplicante o linux-wlang-ng
# para controlar la configuración inalámbrica, pero querer seguir
# configurando la red por ESSID asociado.
modules="!iwconfig"
Manejadores de interfaces
Ofrecemos dos manejadores de interfaz: ifconfig e iproute2. Necesita uno de ellos para realizar cualquier tipo de configuración de red.
Ambos se instalan de forma predeterminada como parte del perfil del sistema. iproute2 es el paquete más potente y flexible. ifconfig y net-tools ya no deberían usarse para configuraciones de red.
iproute2 e ifconfig hacen cosas muy similares. Permitimos que sus configuraciones básicas funcionen juntas. Por ejemplo, los dos fragmentos de código que se muestran a continuación funcionan independientemente del módulo que esté usando el usuario.
config_eth0="192.168.0.2/24"
config_eth0="192.168.0.2 netmask 255.255.255.0"
DHCP
DHCP es un medio para obtener información de red (dirección IP, servidores DNS, puerta de enlace, etc.) de un servidor DHCP. Esto significa que si hay un servidor DHCP ejecutándose en la red, el usuario solo tiene que indicarle a cada cliente que use DHCP y este configura la red por sí solo. Por supuesto, el usuario puede tener que configurar una conexión a un punto de acceso inalámbrico, PPPoE u otros aspectos antes de poder usar el servicio DHCP.
dhclient o dhcpcd pueden proporcionar DHCP. Cada módulo DHCP tiene sus pros y sus contras. A continuación, se ofrece un resumen rápido:
módulo DHCP | Paquete | Pros | Cons |
---|---|---|---|
dhclient | net-misc/dhcp | Creado por ISC, la misma gente que crea el software BIND DNS. Muy configurable. Se puede utilizar para proporcionar DHCPv4 o DHCPv6. | La configuración es demasiado compleja, el software es bastante pesado, no se pueden obtener servidores NTP desde DHCP, no envía el nombre de host de forma predeterminada. Ya no es mantenido en origen. |
dhcpcd | net-misc/dhcpcd | Gentoo lo usa desde hace mucho tiempo por defecto, no depende de herramientas externas, está desarrollado activamente por Gentoo. Ofrece DHCPv4 y DHCPv6 al mismo tiempo. | A veces puede ser lento, aún no puede ejecutarse como daemon para asignaciones permanentes. |
Si hay más de un cliente DHCP instalado, especifique cuál utilizar; de lo contrario, se utiliza dhcpcd de forma predeterminada (si está instalado).
Para enviar opciones específicas al módulo dhcp, utilizamos module_eth0="..."
(cambiar "modulo" por el nombre del módulo dhcp que se vaya a utilizar - por ejemplo: dhcpcd_eth0).
Tratamos de hacer que el servicio DHCP sea relativamente agnóstico, de manera que soportamos las siguientes órdenes usando la variable dhcp_eth0. Por defecto no se configuran ninguno de ellos:
release
- Libera la dirección IP para ser reutilizada
nodns
- No sobreescribir el /etc/resolv.conf
nontp
- No sobreescribir el /etc/ntp.conf
nonis
- No sobreescribir el /etc/yp.conf
# Solo es necesario si hay más de un módulo DHCP instalado
modules="dhcpcd"
config_eth0="dhcp"
dhcpcd_eth0="-t 10" # Finalizar el intento después de 10 seconds
dhcp_eth0="release nodns nontp nonis" # Obtener sólo una dirección
dhcpcd envía el nombre de red actual al servidor DHCP de forma predeterminada, por lo que ya no es necesario especificarlo.
# Solo es necesario si hay más de un módulo DHCP instalado
modules="dhclient"
config_eth0="dhcpv6"
# Para utilizar DHCPv4 y DHCPv6 en una red de doble pila, elimine la línea anterior y descomente las siguientes líneas
#config_eth0="dhcp
#dhcpv6"
# Para pasar argumentos de tiempo de ejecución a dhclient para DHCPv6
dhclientv6_eth0="-t 10" # Finalizar el intento después de 10 segundos
# Establecer opciones genéricas de DHCPv6
dhcpv6_eth0="release nodns nontp nonis nogateway nosendhost"
ADSL con PPPoE/PPPoA
Primero instalamos el software ADSL:
root #
emerge --ask net-dialup/ppp
Segundo, cree el guión de red PPP y el guión de red para la interfaz ethernet que se utilizará con PPP:
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
root #
ln -s /etc/init.d/net.lo /etc/init.d/net.eth0
Asegúrese de configurar rc_depend_strict a YES
en /etc/rc.conf.
Ahora necesitamos configurar /etc/conf.d/net.
config_eth0=null (Especifique su intefaz ethernet)
config_ppp0="ppp"
link_ppp0="eth0" (Especifique su intefaz ethernet)
plugins_ppp0="pppoe"
username_ppp0='user'
password_ppp0='password'
pppd_ppp0="
noauth
defaultroute
usepeerdns
holdoff 3
child-timeout 60
lcp-echo-interval 15
lcp-echo-failure 3
noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"
rc_net_ppp0_need="net.eth0"
También puede configurar su password en /etc/ppp/pap-secrets.
# Ojo: el * es importante
"username" * "password"
Si utiliza PPPoE con un modem USB necesitará instalar br2684ctl. Por favor, lea /var/db/repos/gentoo/net-dialup/speedtouch-usb/files/README para conseguir la información de cómo configurarlo adecuadamente.
Por favor, lea con detenimiento la sección sobre ADSL y PPP en /usr/share/doc/netifrc-*/net.example.bz2. Contiene muchas explicaciones mucho más detalladas de las configuraciones que su instalación PPP podría necesitar.
APIPA Direccionamiento Privado Automático (Automatic Private IP Addressing)
APIPA intenta encontrar una dirección libre en el rango 169.254.0.0-169.254.255.255 haciendo arping a direcciones aleatorias en ese rango para el interfaz. Si no se obtiene respuesta, se asigna esa dirección al interfaz.
This is only useful for LANs where:
- there is no DHCP server;
- the system doesn't connect directly to the Internet; and
- all other computers use APIPA.
Para obtener soporte de APIPA, hacer emerge de net-misc/iputils con el ajuste USE arping
o net-analyzer/arping.
# Intentar DHCP primero - y si falla, entonces usar APIPA
config_eth0="dhcp"
fallback_eth0="apipa"
# Usar únicamente APIPA
config_eth0="apipa"
Combinación de interfaces
El "Bonding" se utiliza para incrementar el ancho de banda de la red o para mejorar la capacidad de recuperación ante fallos del hardware. Si tiene dos interfaces de red en la misma red puede unirlas de modo que sus aplicaciones solo vean un interfaz pero en realidad están usando ambas.
Hay varias formas de configurar el bonding. Algunas de ellas como el modo 802.3ad LACP requieren un soporte y configuración adicionales en el concentrador de la red. Para saber más de las opciones específicas eche un vistazo a su copia de /usr/src/linux/Documentation/networking/bonding.txt.
En primer lugar, elimine la configuración de las interfaces que van a participar.
config_eth0="null"
config_eth1="null"
config_eth2="null"
A continuación defina el bonding entre las interfaces:
slaves_bond0="eth0 eth1 eth2"
config_bond0="192.168.100.4/24"
# Elija el modo y configuraciónes adicionales que correspondan a sus necesidades
mode_bond0="balance-alb"
Elimine los servicios net.eth* de los niveles de ejecución, cree un servicio net.bond0 y añádalo al nivel de ejecución adecuado.
Puentes (soporte para 802.1d)
Los puentes se usan para unir redes. Por ejemplo, puede tener un servidor conectando a internet vía modem ADSL y una tarjeta inalámbrica para que otros computadores se conecten al internet por medio del modem ADSL. Se puede crear un puente para unir ambos interfaces.
# Configure el puente - para más detalles vea "man brctl"
bridge_forward_delay_br0=0
bridge_hello_time_br0=200
bridge_stp_state_br0=1
# Para agregar puertos al puente br0
bridge_br0="eth0 eth1"
# Hará falta configurar los puertos a valores nulos para no iniciar dhcp
config_eth0="null"
config_eth1="null"
# Finalmente, déle una dirección al puente - para esto puede usar DHCP también
config_br0="192.168.0.1/24"
# Hacer depender de eth0 y eth1 ya que pueden requerir configuración adicional
rc_net_br0_need="net.eth0 net.eth1"
Para usar algunas configuraciones de puente, tal vez tenga que consultar la documentación de Configuración por medio de variables.
Cuando se utilizan puentes utilizando IPv6, SLAAC necesita que STP esté a
1
, tal y como se muestra en el ejemplo de arriba.Dirección MAC
Si lo requiere, también puede cambiar la dirección MAC de los interfaces por medio del archivo de configuración de red.
# Establecer una dirección MAC de un interfaz
mac_eth0="00:11:22:33:44:55"
# Para cambiar aleatoriamente solo los últimos 3 bytes
mac_eth0="random-ending"
# Para cambiar aleatoriamente entre tipos de conexión
# físicamente iguales (por ejemplo: fibra óptica, cobre, inalámbrica),
# para todos los proveedores
mac_eth0="random-samekind"
# Para cambiar aleatoriamente entre cualquier tipo físico de
# conexión (por ejemplo fibra óptica, cobre, inalámbrica),
# para todos los proveedores
mac_eth0="random-anykind"
# Generación completamente aleatoria -
# ADVERTENCIA: algunas direcciones MAC generadas de esta manera
# tal vez NO se comporten de la forma esperada
mac_eth0="random-full"
Tunelización
No se requiere hacer emerge de paquete alguno para túneles, ya que el manejador del interfaz se encarga de esto.
# Para túneles GRE
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# Para túneles IPIP
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# Para configurar el interfaz
config_vpn0="192.168.0.2 peer 192.168.1.1"
VLAN (soporte para 802.1q)
Para dar soporte a VLAN, asegúrese de que se ha instalado sys-apps/iproute2 y también que se utiliza iproute2 como módulo de configuración en lugar de ifconfig.
Las redes virtuales son un grupo de dispositivos de red que se comportan como si estuviesen conectados a un solo segmento de red - aunque no lo estén. Miembros de una VLAN solo pueden ver miembros de la misma VLAN, aunque no compartan la misma red física.
Para configurar VLANs, en primer lugar especifique los números de VLAN en /etc/conf.d/net del siguiente modo:
vlans_eth0="1 2"
A continuación, configure el interfaz para cada VLAN:
config_eth0_1="172.16.3.1 netmask 255.255.254.0"
routes_eth0_1="default via 172.16.3.254"
config_eth0_2="172.16.2.1 netmask 255.255.254.0"
routes_eth0_2="default via 172.16.2.254"
Las configuraciones específicas se VLAN se realizan con vconfig del siguiente modo:
vlan1_name="vlan1"
vlan1_ingress="2:6 3:5"
eth0_vlan1_egress="1:2"
Para usar algunas configuraciones de VLAN, tal vez haga falta consultar la documentación de Configuración por medio de variables.
Introducción a las redes inalámbricas
Las redes inalámbricas en Linux, normalmente se configuran de forma fácil. Hay tres formas de realizar esta configuración: clientes gráficos, interfaces en modo texto y la línea de comandos.
La forma más fácil es usar el cliente gráfico, una vez haya instalado un entorno de escritorio. La mayoría de clientes gráficos, como NetworkManager, son bastante auto explicativos. Ofrecen una interfaz del tipo apuntar y hacer clic que le conectan a una red en cuestión de segundos.
NetworkManager ofrece utilidades con interfaz en modo texto además de la interfaz gráfica principal. Haga emerge del paquete net-misc/networkmanager con el ajuste USE
tools
habilitado. La utilidad nmtui es particularmente útil para aquéllos que no usan un entrono de escritorio basado en X o Wayland, pero quieren una herramienta fácil de usar que no requiera editar manualmente archivos de configuración.Sin embargo, si no quiere usar un cliente gráfico, puede configurar la red inalámbrica con la línea de comandos, editando unos pocos ficheros de configuración. Esto toma un poco más de tiempo, pero también requiere de menos paquetes que descargar e instalar. Ya que los clientes gráficos son en su mayoría autoexplicativos (con capturas de pantalla útiles en sus páginas oficiales), nos centraremos en las alternativas de línea de comandos.
Hay tres herramientas que permiten configurar la red inalámbrica desde la línea de comandos: net-wireless/iw, net-wireless/wireless-tools y net-wireless/wpa_supplicant. De estas tres, net-wireless/wpa_supplicant es la preferida. Es importante recordar que se pueden configurar las redes locales de forma global, no dependiendo de la interfaz.
net-wireless/iw, el sucesor de net-wireless/wireless-tools, soporta casi todas las tarjetas y controladores, pero no puede conectar a puntos de acceso WPA. Si las redes ofrecen solo cifrado WEP o están abiertas, entonces net-wireless/iw gana por su simplicidades sobre otras herramientas.
Algunas tarjetas inalámbricas están desactivadas por defecto. Para activarlas, por favor, consulte la documentación de su hardware. Algunas de estas tarjetas se pueden desbloquear mediante la aplicación rfkill. Si es éste el caso, utilice rfkill list para ver las tarjetas disponibles y rfkill unblock INDICE para activar la funcionalidad inalámbrica. En otro caso, puede que tenga que desbloquear la tarjeta inalámbrica mediante un botón, conmutador o combinación especial de teclas en su ordenador portátil.
WPA supplicant
El proyecto WPA supplicant proporciona una paquete que permite a los usuarios conectarse a puntos de acceso habilitados con WPA.
root #
emerge --ask net-wireless/wpa_supplicant
Debe activar CONFIG_PACKET en su kernel para que funcione wpa_supplicant. Para ver si está habilitado en su kernel actual, pruebe:
root #
zgrep CONFIG_PACKET /proc/config.gz
root #
grep CONFIG_PACKET /usr/src/linux/.config
Dependiendo de sus ajustes USE, wpa_supplicant puede instalar una interfaz gráfica escrita en Qt5, que se integrará de forma adecuada con KDE. Pare tenerla, habilite
USE="qt5"
para el paquete net-wireless/wpa_supplicant.Ahora debemos configurar /etc/conf.d/net para elegir wpa_supplicant sobre wireless-tools (si ambos están instalados, wireless-tools será usado por defecto).
# Preferir wpa_supplicant sobre wireless-tools
modules="wpa_supplicant"
Si está usando el controlador host-ap, hará falta colocar el interfaz en modo gestionado (Managed mode) antes de poder usarlo correctamente con wpa_supplicant. Para esto puede usar
iwconfig_eth0="mode managed"
en /etc/conf.d/net.A continuación configure el propio wpa_supplicant (que es algo más difícil dependiendo de cuán seguros sean los puntos de acceso inalámbricos). A continuación mostramos un ejemplo simplificado extraido de /usr/share/doc/wpa_supplicant-<versión>/wpa_supplicant.conf.gz, parte del paquete wpa_supplicant.
# No cambie la siguiente línea, a riesgo que no funcione
ctrl_interface=/var/run/wpa_supplicant
# Asegúrese que sólo root puede leer la configuración de WPA
ctrl_interface_group=0
# Permítale a wpa_supplicant encargarse del barrido y selección de los PA
ap_scan=1
# Caso sencillo: WPA-PSK, frase ASCII como contraseña PSK, permitir todas las encriptaciones válidas
network={
ssid="simple"
psk="contraseña muy secreta"
# A mayor prioridad, más rápido nos conectaremos
priority=5
}
# Igual que el ejemplo anterior, pero barriendo para un SSID específico (para los PAs que rechazan
# transmitir el SSID)
network={
ssid="segundo ssid"
scan_ssid=1
psk="contraseña muy secreta"
priority=2
}
# Solamente estamos usando WPA-PSK. Se acepta cualquier encriptación válida
network={
ssid="ejemplo"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
# Conexión sin encriptar (sin WPA, o IEEE 802.1X)
network={
ssid="prueba-solotexto"
key_mgmt=NONE
}
# Conexión con clave WEP compartida (sin WPA, o IEEE 802.1X)
network={
ssid="prueba-wep-estatica"
key_mgmt=NONE
# Claves entre comillas son claves ASCII
wep_key0="abcde"
# Claves sin comillas son claves hexadecimales
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
# Conexión con clave WEP compartida (sin WPA, o IEEE 802.1X) usando
# autentificación con clave compartida IEEE 802.11
network={
ssid="prueba2-wep-estática"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
# Red IBSS/ad-hoc con WPA-None/TKIP
network={
ssid="prueba adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="contraseña secreta"
}
Wireless tools
Configuración inicial y modo gestionado
El proyecto wireless tools provee una manera genérica para configurar los interfaces inalámbricos básicos hasta el nivel de seguridad WEP. Aunque WEP es un sistema de seguridad débil, también es el más prevalente.
La configuración de Wireless Tools está controlada por algunas variables principales. El archivo ejemplo de configuración a continuación deberá describir todo lo requerido. Algo para mantener presente es que si no hay ninguna configuración quiere decir "conectarse al punto de acceso sin encriptación que tenga la señal más fuerte" - de manera que siempre tratará de conectarse con lo que sea.
root #
emerge --ask net-wireless/wireless-tools
A pesar de que net-wireless/iw es la herramienta actual para la configuración inalámbrica, net-misc/netifrc previa a la versión 0.6.0 no funciona con los nuevos comandos. Es necesario utilizar net-wireless/wireless-tools con netifrc en versiones previas. Para mas información consulte la documentación sobre nombres variables.
# Preferir iwconfig sobre wpa_supplicant
modules="iwconfig"
# Configure las claves WEP para los APs ESSID1 y ESSID2
# Pueden configurarse hasta 4 claves WEP, pero solo una puede
# estar activa a la vez, así que tenemos un índice por defecto
# de [1] para la clave [1] y luego otra vez para cambiar la clave activa a [1]
# Hacemos esto en caso que defina otros ESSIDs para usar claves WEP que no sean 1
#
#
# El prefijar la clave con s: significa que es una clave ASCII porque sino es una clave hexadecimal
#
# enc open especifica seguridad abierta (máxima seguridad)
# enc restricted especifica seguridad restringida (menos segura)
key_ESSID1="[1] s:aquisuclave key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
# Los ejemplos a continuación solo funcionan una vez que se haya barrido para los APs disponibles
# A veces se registra más de un AP, así que hará falta definir
# un orden de preferencia para conectarse
preferred_aps="'ESSID1' 'ESSID2'"
Ajuste fino en la selección de AP
Puede agregar opciones adicionales para afinar la selección de APs, pero normalmente esto no hace falta.
Puede decidirse por conectarse solamente a APs preferidos o no. Por defecto, si falla todo lo configurado y nos podemos conectar a un AP no encriptado, entonces se hará. Esto puede ser controlado con la variable associate_order (orden para asociación). Sigue una tabla de valores y como estos ejercen este control.
Valor | Descripción |
---|---|
any | (cualquiera) Comportamiento por defecto |
preferredonly | (solo preferidos) Solamente nos conectaremos a PAs visibles en la lista de preferidos |
forcepreferred | (obligado a preferidos) Nos conectaremos obligatoriamente a los PAs en el orden preferido aunque no se encuentren en un barrido |
forcepreferredonly | (solamente preferidos obligados) No barrer buscando PAs - solo tratar de conectar a cada uno en orden |
forceany | (obligar a cualquiera) Igual que forcepreferred y además se conecta a cualquier otro disponible |
Finalmente podemos hacer una lista negra de PAs (blacklist_aps) y seleccionar un único PA (unique_ap). blacklist_aps funciona de manera similar a preferred_aps. unique_ap es un valor si o no (yes o no) que determina si un segundo interfaz inalámbrico se puede conectar al mismo punto de acceso que el primer interfaz.
# A veces nunca queremos conectarnos a algunos PAs
blacklist_aps="'ESSID3' 'ESSID4'"
# Si tiene más de una tarjeta inalámbrica, puede determinar
# que cada interfaz se asocie al mismo PA o no
# Los valores son "yes" y "no"
# El valor por defecto es "yes"
unique_ap="yes"
Modos Ad-Hoc y Master
Si desea establecerse como un nodo Ad-Hoc al no lograr conectarse a algún PA en modo gestionado, puede hacerlo también.
adhoc_essid_eth0="Nodo Adhoc"
También es posible conectarse a redes ad-hoc o funcionar en modo master para convertirse en PA.
# Establezca el modo - que puede ser managed (por defecto), ad-hoc o master
# No todos los drivers soportan todos los modos
mode_eth0="ad-hoc"
# Establezca el ESSID del interfaz
# En modo gestionado, esto obliga a la interfaz a intentar conectarse al
# ESSID especificado solamente
essid_eth0="Nodo Adhoc"
# Se usaría el canal 3 si no se estableciera otro como a continuación
channel_eth0="9"
A continuación citamos la BSD documentación de wavelan encontrada en la documentación de NetBSD. Existen 14 canales posibles; Se nos informa que los canales 1-11 son legales para Norteamérica , los canales 1-13 para la mayor parte de Europa, los canales 10-13 para Francia y sólo el canal 14 para Japón. En caso de duda, por favor eche un vistazo a la documentación que acompaña la tarjeta o punto de acceso. Asegúrese que el canal que selecciona es el mismo qu el del PA (o de la otra tarjeta en caso de ser red ad-hoc). Para las tarjetas vendidas en Norteamérica y la mayor parte de Europa, es el canal 3 por defecto; en Francia el 11 y en el Japón es el 14.
Solucionar problemas con wireless tools
Existen más variables que sirven para ayudar a configurar y operar una red inalámbrica por problemas ambientales o del driver. Aquí presentamos una tabla de otras cosas para intentar.
Nombre de la variable | Valor por defecto | Descripción |
---|---|---|
iwconfig_eth0 | Vea la página man de iwconfig para detalles acerca de qué enviar a iwconfig | |
iwpriv_eth0 | Vea la página man de iwpriv para detalles acerca de qué enviar a iwpriv | |
sleep_scan_eth0 | 0 | La cantidad en segundos a dormir antes de intentar un barrido. Esto hace falta cuando el driver/firmware requiere de más tiempo para activarse antes de poder usarlos. |
sleep_associate_eth0 | 5 | La cantidad en segundos a esperar para que el interfaz se asocie con el PA antes de continuar al siguiente. |
associate_test_eth0 | MAC | Algunos drivers no resetean la dirección MAC asociada a una inválida cuando pierden la señal o intentan asociarse. Algunos drivers no resetean el nivel de calidad cuando pierden la señal o intentan asociarse. La configuraciones válidas son MAC, quality y all. |
scan_mode_eth0 | Algunos drivers tienen que hacer el barrido en modo ad-hoc, así que, si falla el barrido, intente configurar aquí como ad-hoc. | |
iwpriv_scan_pre_eth0 | Envía algunas órdenes iwpriv al interfaz antes del barrido. Consulte la página man de iwpriv para más detalles. | |
iwpriv_scan_post_eth0 | Envía algunas órdenes iwpriv al interfaz después del barrido. Vea la página man de iwpriv para más detalles. |
Definir la configuración de la red por ESSID
A veces, se necesita una dirección IP estática cuando se conecta a un ESSID1 y cuando lo hace a ESSID2, se utiliza DHCP.
Esto funciona sin importar si usa WPA Supplicant o Wireless Tools
Necesitará consultar la documentación variable name.
config_ESSID1="192.168.0.3/24 brd 192.168.0.255"
routes_ESSID1="default via 192.168.0.1"
config_ESSID2="dhcp"
fallback_ESSID2="192.168.3.4/24"
fallback_route_ESSID2="default via 192.168.3.1"
# Podemos definir servidores DNS y otras cosas también
# NOTA: DHCP reemplazará esta configuración a menos que se le indique que no debe hacerlo
dns_servers_ESSID1="192.168.0.1 192.168.0.2"
dns_domain_ESSID1="algun.dominio"
dns_search_domains_ESSID1="buscador.este.dominio buscador.aquel.dominio"
# Reemplace usando la dirección MAC del PA
# Esto es muy útil si usa distintas ubicaciones con el mismo ESSID
config_001122334455="dhcp"
dhcpcd_001122334455="-t 10"
dns_servers_001122334455="192.168.0.1 192.168.0.2"
Conectar con las funciones estándar
Four functions can be defined in /etc/conf.d/net:
preup()
, called before an interface is brought up;predown()
, called before an interface is brought down;postup()
, called after an interface is brought up; andpostdown()
, called after an interface is brought down.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preup()
and predown()
functions should be:
- 0 to indicate success, and that configuration or de-configuration of the interface can continue.
- A non-zero value otherwise.
If preup()
returns a non-zero value, interface configuration will be aborted. If predown()
returns a non-zero value, the interface will not be allowed to continue de-configuration.
Return values for the postup()
and postdown()
functions are ignored since there's nothing to do if they indicate failure.
${IFACE} es el interfaz que será encendido/apagado, ${IFVAR} es ${IFACE} convertido a un nombre de variable válido según bash.
preup() {
# Comprobación del enlace de la interfaz antes de activarla.
# Esto solamente funciona con algunos interfaces de red y necesita
# que el paquete ethtool este instalado.
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "${IFACE} no tiene enlace, configuración abortada"
return 1
fi
# Recordar devolver 0 si todo fue correcto
return 0
}
predown() {
# Por defecto en el guión de inicio se comprueba si el sistema (root) está montado por NFS y en ese caso
# no permitir que las interfaces se desactiven. Tenga en cuenta que, si
# especifica una función predown() sobreescribirá está regla.
# Aquí la tiene en caso de que todavía quiera utilizarla...
if is_net_fs /; then
eerror "El sistema de archivos raiz (root) está montado desde la red -- no se puede detener ${IFACE}"
return 1
fi
# Recordar devolver 0 si todo fue correcto
return 0
}
postup() {
# Esta función podría utilizarse, por ejemplo, para
# registrarse en un servicio dinámico de DNS. Otra posibilidad
# sería enviar un correo cada vez que la interfaz se conecta.
return 0
}
postdown() {
# Esta función está aquí mayormente para redondear ...
# ún no hemos pensado en algo interesante que pueda hacer
return 0
}
Para mayor información acerca de escribir sus propias funciones, agradecemos lea /usr/share/doc/netifrc-*/net.example.bz2.
Conectar con las funciones de wireless tools
Esto no funcionará con WPA Supplicant aunque las variables ${ESSID} y ${ESSIDVAR} están disponibles en la función
postup()
.Two functions can be defined in /etc/conf.d/net:
preassociate()
, called before association.postassociate()
, called after association.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preassociate() function should be:
- 0 to indicate success, and to continue configuration.
- A non-zero value otherwise.
If preassociate()
returns a non-zero value, interface configuration will be aborted.
El valor devuelto por la función postassociate()
se ignora, ya que no hay nada que hacer si llegase a indicarse una falla.
A ${ESSID} se le asigna el ESSID exacto del PA al cual se está conectando, ya que ${ESSIDVAR} es ${ESSID}, convertido a un nombre de variable permitido por bash.
preassociate() {
# A continuación se agregan 2 variables de configuración leap_user_ESSID
# y leap_pass_ESSID. Cuando ambos estén configurados para el ESSID
# ejecutamos el guión LEAP de CISCO.
local user pass
eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "Para tener soporte LEAP, haga emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Esperando autenticación LEAP en \"${ESSID//\\\\//}\""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Error al conetactar con ${user}"
return 1
fi
fi
return 0
}
postassociate() {
# Esta función existe mayormente para completar ...
# no he pensado en algo interesante para hacer aquí todavía
return 0
}
Las variables ${ESSID} y ${ESSIDVAR} no están disponibles en las funciones
predown()
y postdown()
.Para mayor información acerca de cómo escribir sus propias funciones, agradecemos lea /usr/share/doc/netifrc-*/net.example.bz2.
Gestión de la red
Si el ordenador está en continuo movimiento, no siempre tendrá un cable ethernet conectado o un punto de acceso disponible. También, puede querer que la red funcione automáticamente cuando un cable ethernet se conecte o se encuentre un punto de acceso.
En este capítulo veremos como se puede hacer esto.
Esto documento solamente habla sobre ifplugd, pero hay alternativas como netplug. netplug es una alternativa ligera a ifplugd, pero confía en que tus controladores de red del núcleo funcionen correctamente, cosa que muchas veces no es así.
ifplugd
ifplugd es un demonio que arranca y para las interfaces de red cuando un cable se conecta o se desconecta. También puede gestionar la detección de asociación a un punto de acceso o cuando uno nuevo entra dentro del radio de detección.
root #
emerge --ask sys-apps/ifplugd
La configuración de ifplugd es bastante clara. El archivo de configuración se encuentra en /etc/conf.d/net. Ejecute man ifplugd para obtener más detalles sobre las variables disponibles. Además, puede consultar más ejemplos en /usr/share/doc/netifrc-*/net.example.bz2.
# Sustituya eth0 con la interfaz que quiera monitorizar
ifplugd_eth0="..."
# Para monitorizar una interfaz inalámbrica
ifplugd_eth0="--api-mode=wlan"
Además, para manejar múltiples conexiones de red, quizá quiera instalar una herramienta que facilita el trabajo con múltiples configuraciones y servidores DNS. Es realmente útil cuando se recibe la dirección IP via DHCP.
root #
emerge --ask net-dns/openresolv
Consulte man resolvconf para aprender más cosas sobre sus características.
Warning: Display title "Manual Gentoo Linux amd64: Configuración de redes" overrides earlier display title "Manual:AMD64/Todo/Redes".