linux-system-roles.network

linux-system-roles/red

ansible-lint.yml ansible-test.yml codeql.yml integration.yml markdownlint.yml python-unit-test.yml shellcheck.yml tft.yml tft_citest_bad.yml woke.yml Coverage Status Code Style: black Language grade: Python

Resumen

El rol de network permite a los usuarios configurar la red en las máquinas objetivo. Este rol se puede usar para configurar:

  • Interfaces Ethernet
  • Interfaces de puente
  • Interfaces agrupadas
  • Interfaces VLAN
  • Interfaces MacVLAN
  • Interfaces Infiniband
  • Interfaces inalámbricas (WiFi)
  • Configuración IP
  • Autenticación 802.1x

Introducción

El rol de network admite dos proveedores: nm y initscripts. nm se utiliza de manera predeterminada desde RHEL7 y initscripts en RHEL6. El proveedor initscripts requiere el paquete network-scripts, que está obsoleto en RHEL8 y se eliminó en RHEL9. Estos proveedores se pueden configurar por host a través de la variable network_provider. Si no hay una configuración explícita, se autodetecta según la distribución. Sin embargo, hay que tener en cuenta que nm o initscripts no están vinculados a una distribución específica. El rol de network funciona donde esté disponible la API requerida. Esto significa que nm requiere al menos la versión 1.2 de la API de NetworkManager, y ciertas configuraciones también requieren versiones más altas de la API de NetworkManager desde que se introdujeron esas configuraciones.

El rol de network admite dos módulos: network_connections y network_state.

Para cada host se puede configurar una lista de perfiles de red a través de la variable network_connections.

  • Para initscripts, los perfiles corresponden a archivos ifcfg en el directorio /etc/sysconfig/network-scripts/, y esos archivos ifcfg deben tener la línea NM_CONTROLLED=no.
  • Para nm, los perfiles corresponden a perfiles de conexión que son manejados por NetworkManager, y solo se admiten perfiles en formato de archivo de clave de NetworkManager en /etc/NetworkManager/system-connections/ desde RHEL9.

Para cada host, la configuración del estado de la red también se puede aplicar a la interfaz directamente a través de la variable network_state, y solo el proveedor nm admite el uso de la variable network_state.

Ten en cuenta que el rol de network opera tanto en los perfiles de conexión de los dispositivos (a través de la variable network_connections) como en los dispositivos directamente (a través de la variable network_state). Al configurar los perfiles de conexión a través del rol, por defecto se utiliza el nombre del perfil como el nombre de la interfaz. También es posible crear perfiles genéricos, por ejemplo, creando un perfil con una determinada configuración IP sin activar el perfil. Para aplicar la configuración a la interfaz de red real, usa los comandos nmcli en el sistema objetivo.

Advertencia: El rol de network actualiza o crea todos los perfiles de conexión en el sistema objetivo tal como se especifica en la variable network_connections. Por lo tanto, el rol de network elimina opciones de los perfiles especificados si las opciones solo están presentes en el sistema pero no en la variable network_connections. Las excepciones se mencionan a continuación. Sin embargo, la configuración de red parcial se puede lograr al especificar la configuración del estado de red en la variable network_state.

Requisitos

Ver más abajo.

Requisitos de colección

El rol requiere colecciones externas solo para la gestión de nodos rpm-ostree. Por favor, ejecuta el siguiente comando para instalarlas si necesitas gestionar nodos rpm-ostree:

ansible-galaxy collection install -vv -r meta/collection-requirements.yml

Variables

El rol de network se configura a través de variables que comienzan con el prefijo network_. Lista de variables:

  • network_provider - La variable network_provider permite establecer un proveedor específico (nm o initscripts). Al configurarlo como {{ network_provider_os_default }}, el proveedor se establece según el sistema operativo. Esto es generalmente nm, exceptuando sistemas RHEL 6 o CentOS 6. Cambiar el proveedor para un perfil existente no está soportado. Para cambiar de proveedores, se recomienda primero eliminar perfiles con el proveedor antiguo y luego crear nuevos perfiles con el nuevo proveedor.
  • network_connections - Los perfiles de conexión se configuran como network_connections, que es una lista de diccionarios que incluyen opciones específicas.
  • network_allow_restart - Por defecto es false. Para cargar plugins de NetworkManager después de la instalación, es necesario reiniciar NetworkManager. Por ejemplo, si se configura una conexión inalámbrica y NetworkManager-wifi no está instalado, NetworkManager debe reiniciarse antes de que se configure la conexión. El reinicio puede resultar en pérdida de conectividad y, por lo tanto, el rol no lo permite sin consentimiento explícito. El usuario puede consentirlo configurando network_allow_restart a true. Configurar network_allow_restart a false impedirá que el rol reinicie NetworkManager.
  • network_state - La configuración del estado de la red se puede configurar en el host gestionado, y el formato y la sintaxis de la configuración deben ser consistentes con los ejemplos de estado de nmstate (YAML).

Ejemplos de Variables

Configurando las variables:

network_provider: nm
network_connections:
  - name: eth0
    #...
network_allow_restart: true
network_provider: nm
network_state:
  interfaces:
    - name: eth0
    #...
  routes:
    config:
      #...
  dns-resolver:
    config:
      #...

Opciones de network_connections

La variable network_connections es una lista de diccionarios que incluyen las siguientes opciones. Lista de opciones:

name (usualmente requerida)

La opción name identifica el perfil de conexión que se va a configurar. No es el nombre de la interfaz de red a la que aplica el perfil, aunque podemos asociar el perfil con una interfaz y darles el mismo nombre. Ten en cuenta que puedes tener múltiples perfiles para el mismo dispositivo, pero solo un perfil puede estar activo en el dispositivo a la vez. Para NetworkManager, una conexión puede estar activa solo en un dispositivo a la vez.

  • Para NetworkManager, la opción name corresponde a la propiedad connection.id. Aunque NetworkManager admite múltiples conexiones con el mismo connection.id, el rol de network no puede manejar un name duplicado. Especificar un name varias veces se refiere al mismo perfil de conexión.

  • Para initscripts, la opción name determina el nombre del archivo ifcfg /etc/sysconfig/network-scripts/ifcfg-$NAME. Ten en cuenta que el name no especifica el DEVICE sino un nombre de archivo. Como consecuencia, '/' no es un carácter válido para el name.

También puedes usar el mismo perfil de conexión varias veces. Por lo tanto, es posible crear un perfil y activarlo por separado.

Nota: El rol de red solo cambiará los perfiles que se especifican en la variable network_connections. Por lo tanto, si solo se especifican los puertos de un perfil para ser eliminados del controlador y el controlador no se especifica, entonces el perfil del controlador permanecerá en el sistema. Esto puede suceder, por ejemplo, si todos los puertos son eliminados de una interfaz de enlace.

Nota: Para eliminar todos los perfiles en un sistema que no están especificados en la variable network_connections, agrega una entrada sin un nombre y persistent_state: absent. Esto coincidirá y eliminará todos los perfiles restantes:

network_connections:
  - name: eth0  # perfiles a mantener/configurar en el sistema
    [...]

  - persistent_state: absent  # eliminar todos los demás perfiles

state

La opción state identifica cuál es el estado de ejecución de cada perfil de conexión. La opción state (opcional) se puede establecer en los siguientes valores:

  • up - el perfil de conexión está activado
  • down - el perfil de conexión está desactivado

state: up

  • Para NetworkManager, esto corresponde a nmcli connection id {{name}} up.

  • Para initscripts, esto corresponde a ifup {{name}}.

Cuando la opción de state se establece en up, también puedes especificar la opción wait (opcional):

  • wait: 0 - inicia solo la activación, pero no espera hasta que el dispositivo esté completamente conectado. La conexión se completará en segundo plano, por ejemplo, después de que se haya recibido un arrendamiento DHCP.
  • wait: <seconds> es un tiempo de espera que permite decidir cuánto tiempo se le da al dispositivo para activar. El valor predeterminado es utilizar un tiempo de espera adecuado. Ten en cuenta que la opción wait solo es compatible con NetworkManager.

Ten en cuenta que state: up siempre re-activa el perfil y posiblemente cambia la configuración de red, incluso si el perfil ya estaba activo antes. Como consecuencia, state: up siempre cambia el sistema.

state: down

  • Para NetworkManager, corresponde a nmcli connection id {{name}} down.

  • Para initscripts, corresponde a llamar a ifdown {{name}}.

Puedes desactivar un perfil de conexión, incluso si no está activo en este momento. Como consecuencia, state: down siempre cambia el sistema.

Ten en cuenta que si la opción state no está establecida, el estado de ejecución del perfil de conexión no se cambiará.

persistent_state

La opción persistent_state identifica si un perfil de conexión es persistente (guardado en disco). La opción persistent_state se puede establecer en los siguientes valores:

persistent_state: present (predeterminado)

Ten en cuenta que si persistent_state está present y el perfil de conexión contiene la opción type, el perfil se creará o actualizará. Si el perfil de conexión está incompleto (sin opción type), el comportamiento es indefinido. Además, el valor present no resulta directamente en un cambio en la configuración de red. Si la opción state no se establece en up, el perfil solo se crea o modifica, no se activa.

Para NetworkManager, el nuevo perfil de conexión se crea con la opción autoconnect habilitada por defecto. Por lo tanto, NetworkManager puede activar el nuevo perfil en un dispositivo desconectado actualmente. (rh#1401515).

persistent_state: absent

El valor absent asegura que el perfil no esté presente en el host objetivo. Si existe un perfil con el nombre dado, será eliminado. En este caso:

  • NetworkManager elimina todos los perfiles de conexión con el correspondiente connection.id. Eliminar un perfil generalmente no cambia la configuración de red actual, a menos que el perfil estuviera actualmente activo en un dispositivo. Eliminar el perfil de conexión actualmente activo desconecta el dispositivo. Eso hace que el dispositivo sea elegible para autoconectar otra conexión (para más detalles, ver rh#1401515).

  • initscripts elimina el archivo ifcfg en la mayoría de los casos sin impacto en el estado de ejecución del sistema a menos que algún componente esté observando el directorio sysconfig.

Nota: Para perfiles que solo contienen una opción de state, el rol de network solo activa o desactiva la conexión sin cambiar su configuración.

type

La opción type se puede establecer en los siguientes valores:

  • ethernet
  • bridge
  • bond
  • team
  • vlan
  • macvlan
  • infiniband
  • wireless
  • dummy

type: ethernet

Si el tipo es ethernet, entonces puede haber un diccionario adicional ethernet con los siguientes elementos (opciones): autoneg, speed y duplex, que corresponden a la configuración de la utilidad ethtool con el mismo nombre.

  • autoneg: true (predeterminado) o false [si la auto-negociación está habilitada o deshabilitada]
  • speed: velocidad en Mbit/s
  • duplex: half o full

Ten en cuenta que los ajustes de enlace speed y duplex son requeridos cuando la auto-negociación está deshabilitada (autoneg: false).

type: bridge, type: bond, type: team

Los tipos de dispositivo bridge, bond, team funcionan de manera similar. Ten en cuenta que team no es compatible con los núcleos de RHEL6, y ha sido desaprobado en RHEL9.

Para los puertos, se deben establecer las propiedades port_type y controller. Ten en cuenta que los puertos no deberían tener configuraciones ip, lo que significa que los puertos activos no tendrán direcciones IP asignadas.

El controller se refiere al name de un perfil en el playbook de Ansible. No es un nombre de interfaz ni un id de conexión de NetworkManager.

  • Para NetworkManager, controller se convertirá en el connection.uuid del perfil correspondiente.

  • Para initscripts, se busca el controlador como el DEVICE del archivo ifcfg correspondiente.

Dado que el controller se refiere a otros perfiles del mismo o de otro play, el orden de la lista connections importa. Los perfiles que son referenciados por otros perfiles necesitan ser especificados primero. Además, --check ignora el valor del controller y asume que estará presente durante una ejecución real. Esto significa que, en presencia de un controller inválido, --check puede señalar éxito pero la ejecución real del play falla.

Si solo se baja el perfil del controller, entonces los perfiles de puerto se bajarán automáticamente. Si se baja la conexión en algunos o todos los puertos, entonces el perfil del controlador permanecerá activo.

El tipo team utiliza roundrobin como la configuración de runner. No se admite ninguna configuración adicional en este momento.

type: vlan

De manera similar a controller, el parent hace referencia al perfil de conexión en el rol de ansible. Se puede especificar el ID de VLAN utilizando la configuración de VLAN anidada, el valor válido del ID de VLAN varía de 0 a 4094. Así es como se especifica el ID de VLAN:

type: vlan
vlan:
  id: 6

type: macvlan

De manera similar a controller y vlan, el parent hace referencia al perfil de conexión en el rol de ansible.

type: infiniband

Para la conexión infiniband, actualmente solo se admite para el proveedor nm, y las siguientes opciones son compatibles:

  • p_key: La P_Key de infiniband que se usará para el dispositivo. Cuando no se especifica, la conexión se crea en las fábricas de infiniband físicas. De lo contrario, es un entero sin signo de 16 bits y se creará una conexión ipoib (IP sobre Infiniband), el bit alto debe estar configurado si es un P_Key de "membresía completa". Los valores especiales p_key 0x0000 y 0x8000 son inválidos ya que el kernel no los admite.
  • transport_mode: El modo de operación de la conexión ipoib (IP sobre Infiniband). Los modos posibles son datagram (predeterminado) y connected.

Nota: Si se especifica p_key, entonces interface_name debe estar sin establecer.

type: wireless

El tipo wireless admite autenticación WPA-PSK (contraseña), autenticación WPA-EAP (802.1x), autenticación WPA3-Personal SAE (contraseña) y Enhanced Open (OWE).

nm (NetworkManager) es el único proveedor network_provider admitido para este tipo.

Si se utiliza WPA-EAP, se deben definir configuraciones ieee802_1x en la opción ieee802_1x.

Las siguientes opciones son compatibles:

  • ssid: el SSID de la red inalámbrica (requerido)

  • key_mgmt (requerido)

    Cualquier clave de la siguiente lista de claves:

    • owe
    • sae
    • wpa-eap
    • wpa-psk
  • password: contraseña para la red (obligatorio si se utiliza wpa-psk o sae)

type: dummy

Interfaz de red dummy, nm (NetworkManager) es el único proveedor network_provider compatible para este tipo.

autoconnect

De forma predeterminada, los perfiles se crean con autoconexión habilitada.

  • Para NetworkManager, esto corresponde a la propiedad connection.autoconnect.

  • Para initscripts, esto corresponde a la propiedad ONBOOT.

mac

La dirección mac es opcional y restringe el perfil a ser utilizable solo en dispositivos con la dirección MAC dada. mac solo se permite para type ethernet o infiniband para coincidir un dispositivo no virtual con el perfil. El valor de la dirección mac debe especificarse en notación hexadecimal utilizando dos puntos (por ejemplo: mac: "00:00:5e:00:53:5d"). Para evitar que YAML analice las direcciones mac como enteros en notación sexagesimal (base 60) (ver https://yaml.org/spec/1.1/#id858600), se recomienda siempre poner el valor entre comillas dobles y a veces es necesario.

  • Para NetworkManager, mac es la dirección MAC permanente, ethernet.mac-address.

  • Para initscripts, mac es la dirección MAC configurada actualmente del dispositivo (HWADDR).

cloned_mac

La dirección cloned_mac es opcional y permite especificar la estrategia para obtener la dirección mac predeterminada o establecer tu propia mac. El valor de la dirección cloned_mac debe especificarse en notación hexadecimal como la propiedad mac. Además de especificar explícitamente el valor como dirección MAC con notación hexadecimal, también se admiten los siguientes valores especiales:

  • default: honrar el comportamiento predeterminado en NetworkManager
  • permanent: usar la dirección MAC permanente del dispositivo
  • preserve: no cambiar la dirección MAC del dispositivo al activarse
  • random: generar un valor aleatorio en cada conexión
  • stable: generar una dirección MAC hasheada y estable

mtu

La opción mtu denota la unidad máxima de transmisión para el dispositivo del perfil. El valor máximo depende del dispositivo. Para dispositivos virtuales, el valor máximo de la opción mtu depende del dispositivo subyacente.

interface_name

Para los tipos ethernet e infiniband, la opción interface_name restringe el perfil a la interfaz dada por nombre. Este argumento es opcional y por defecto se utiliza el nombre del perfil a menos que se especifique una dirección mac utilizando la clave mac. Especificar una cadena vacía ("") significa que el perfil no está restringido a ninguna interfaz de red.

Nota: Con nombres de interfaz persistentes, la interfaz es predecible según la configuración de hardware. De lo contrario, la dirección mac podría ser una opción.

Para tipos de interfaz virtual como puentes, el interface_name es el nombre de la interfaz creada. Si falta un interface_name, se utiliza el name del perfil.

Nota: El name (el nombre del perfil) y el interface_name (el nombre del dispositivo) pueden ser diferentes o el perfil puede no estar vinculado a ninguna interfaz.

match

Configuraciones para especificar dispositivos o sistemas que coincidan con un perfil. Actualmente, solo se ha implementado la configuración de path.

Las configuraciones admiten una lista de patrones que soportan los siguientes modificadores y comodines:

Modificadores especiales para configuraciones match:

  • |, el elemento es una alternativa; la coincidencia se evalúa como verdadera si al menos una de las alternativas coincide (OR lógico). Por defecto, un elemento es una alternativa. Esto significa que un elemento foo se comporta de la misma manera que |foo.

  • &, el elemento es obligatorio; la coincidencia se evalúa como verdadera si todos los elementos coinciden (AND lógico).

  • !, un elemento también puede invertirse con un signo de exclamación (!) entre el símbolo de barra (o el ampersand) y antes del patrón. Ten en cuenta que !foo es un atajo para la coincidencia obligatoria &!foo.

  • \, se puede usar una barra invertida al principio del elemento (después de los caracteres especiales opcionales) para escapar el inicio del patrón. Por ejemplo, &\!a es una coincidencia obligatoria para literalmente !a.

Patrones comodines para configuraciones match: De manera general, funcionan como globos de shell.

  • *, coincide con cero o más de cualquier carácter.
  • ?, coincide con cualquier carácter individual.
  • [fo] - coincide con cualquier carácter individual f o o - también admite rangos - [0-9] coincidirá con cualquier carácter numérico.

path

La configuración de path es una lista de patrones para coincidir con la propiedad ID_PATH de udev de los dispositivos. La propiedad ID_PATH de udev representa la ruta persistente de un dispositivo. Consiste en una cadena de subsistema (pci, usb, platform, etc.) y un identificador específico de subsistema. El ID_PATH de un dispositivo se puede obtener con el comando udevadm info /sys/class/net/$dev | grep ID_PATH= o mirando la propiedad path exportada por NetworkManager (nmcli -f general.path device show $dev). La configuración de path es opcional y restringe el perfil para activarse solo en dispositivos con un ID_PATH coincidente. La configuración de path solo es compatible con perfiles ethernet o infiniband. Soporta modificadores y comodines según lo descrito para configuraciones match.

zone

La opción zone establece la zona de firewalld para la interfaz.

Los puertos de los dispositivos de puente, enlace o agrupados no pueden especificar una zona.

ip

La configuración IP admite las siguientes opciones:

  • address Manualmente se pueden especificar direcciones a través de una lista de direcciones bajo la opción address.

  • auto_gateway

    Si se habilita, se configurará una ruta predeterminada utilizando la puerta de enlace predeterminada. Si se desactiva, se eliminará la ruta predeterminada.

    Si esta variable no se especifica, el rol utilizará el comportamiento predeterminado del network_provider seleccionado.

    Establecer esta opción en false es equivalente a:

    • DEFROUTE = no en initscripts, o
    • ipv4.never-default/ipv6.never-default yes en nmcli.
  • dhcp4, auto6, e ipv6_disabled

    Además, se pueden especificar direcciones manuales configurando dhcp4 o auto6. La clave dhcp4 es para DHCPv4 y auto6 para La Configuración Automática de Direcciones sin Estado (SLAAC). Ten en cuenta que las claves dhcp4 y auto6 se pueden omitir y la clave predeterminada depende de la presencia de direcciones manuales. ipv6_disabled se puede configurar para deshabilitar ipv6 para la conexión.

  • dhcp4_send_hostname

    Si dhcp4 está habilitado, se puede configurar si la solicitud DHCPv4 incluye el nombre de host a través de la opción dhcp4_send_hostname. Ten en cuenta que dhcp4_send_hostname solo es compatible con el proveedor nm y corresponde a la propiedad ipv4.dhcp-send-hostname.

  • dns

    La configuración manual de DNS se puede especificar a través de una lista de direcciones dadas en la opción dns.

  • dns_search

    La configuración manual de DNS se puede especificar a través de una lista de dominios a buscar dados en la opción dns_search.

  • dns_options

    dns_options solo es compatible con el proveedor de NetworkManager. Se puede configurar la configuración manual de DNS a través de una lista de opciones DNS en dns_options. La lista de opciones de DNS compatibles para servidores de nombres IPv4 se describe en man 5 resolv.conf. Actualmente, la lista de opciones de DNS compatibles es:

    • attempts:n
    • debug
    • edns0
    • inet6
    • ip6-bytestring
    • ip6-dotint
    • ndots:n
    • no-aaaa
    • no-check-names
    • no-ip6-dotint
    • no-reload
    • no-tld-query
    • rotate
Instalar
ansible-galaxy install linux-system-roles.network
Licencia
bsd-3-clause
Descargas
263.3k
Propietario