linux-system-roles.network
linux-system-roles/red
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íneaNM_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 variablenetwork_provider
permite establecer un proveedor específico (nm
oinitscripts
). Al configurarlo como{{ network_provider_os_default }}
, el proveedor se establece según el sistema operativo. Esto es generalmentenm
, 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 comonetwork_connections
, que es una lista de diccionarios que incluyen opciones específicas.network_allow_restart
- Por defecto esfalse
. 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 configurandonetwork_allow_restart
atrue
. Configurarnetwork_allow_restart
afalse
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ónname
corresponde a la propiedadconnection.id
. Aunque NetworkManager admite múltiples conexiones con el mismoconnection.id
, el rol denetwork
no puede manejar unname
duplicado. Especificar unname
varias veces se refiere al mismo perfil de conexión.Para
initscripts
, la opciónname
determina el nombre del archivo ifcfg/etc/sysconfig/network-scripts/ifcfg-$NAME
. Ten en cuenta que elname
no especifica elDEVICE
sino un nombre de archivo. Como consecuencia,'/'
no es un carácter válido para elname
.
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á activadodown
- el perfil de conexión está desactivado
state: up
Para
NetworkManager
, esto corresponde anmcli connection id {{name}} up
.Para
initscripts
, esto corresponde aifup {{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ónwait
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 anmcli connection id {{name}} down
.Para
initscripts
, corresponde a llamar aifdown {{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 correspondienteconnection.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) ofalse
[si la auto-negociación está habilitada o deshabilitada]speed
: velocidad en Mbit/sduplex
:half
ofull
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 elconnection.uuid
del perfil correspondiente.Para
initscripts
, se busca el controlador como elDEVICE
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 especialesp_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 sondatagram
(predeterminado) yconnected
.
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 utilizawpa-psk
osae
)
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 propiedadconnection.autoconnect
.Para
initscripts
, esto corresponde a la propiedadONBOOT
.
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 NetworkManagerpermanent
: usar la dirección MAC permanente del dispositivopreserve
: no cambiar la dirección MAC del dispositivo al activarserandom
: generar un valor aleatorio en cada conexiónstable
: 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 elementofoo
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 individualf
oo
- 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ónaddress
.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, oipv4.never-default/ipv6.never-default yes
en nmcli.
dhcp4
,auto6
, eipv6_disabled
Además, se pueden especificar direcciones manuales configurando
dhcp4
oauto6
. La clavedhcp4
es para DHCPv4 yauto6
para La Configuración Automática de Direcciones sin Estado (SLAAC). Ten en cuenta que las clavesdhcp4
yauto6
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óndhcp4_send_hostname
. Ten en cuenta quedhcp4_send_hostname
solo es compatible con el proveedornm
y corresponde a la propiedadipv4.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 endns_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
Configure networking
ansible-galaxy install linux-system-roles.network