ansibleguy.linux_networking

Rol de Ansible - Configuración de Red en Linux

Rol de Ansible para desplegar la configuración de red/interfaces en servidores Linux.

Invítame un café

Estado de Pruebas de Molecule Estado de Pruebas de YamlLint Estado de Pruebas de PyLint Estado de Pruebas de Ansible-Lint Ansible Galaxy

Probado en:

  • Debian 11

Instalación

# última versión
ansible-galaxy role install git+https://github.com/ansibleguy/linux_networking

# desde galaxy
ansible-galaxy install ansibleguy.linux_networking

# o para una ruta de rol personalizada
ansible-galaxy install ansibleguy.linux_networking --roles-path ./roles

# instalar dependencias
ansible-galaxy install -r requirements.yml
python3 -m pip install -r requirements.txt

Uso

¿Quieres una interfaz gráfica simple de Ansible? Mira mi Interfaz Web de Ansible

Configuración

Define la configuración de la red según sea necesario:

network:
  support:
    vlan: true
    bridge: true
    bonding: true
    traffic_forwarding: true
    ipv6: true

  purge_orphaned_interfaces: true
    
  interfaces:  # para más detalles de configuración ver: https://wiki.debian.org/NetworkConfiguration
    ens192:
      address: '192.168.142.90/24'
      gateway: '192.168.142.1'
      script_post-up: ['ip route add 172.16.100.0/24 dev ens192 src 192.168.142.90 via 192.168.142.10']
      aliases:
        - address: '2a09:cd41:f:42ee::1'
          gateway: '2a09:cd41:f:42ee::f'
        - '2a09:cd41:f:42ee::1'
    bridge01:
      bridge_ports: ['ens193', 'ens194']
      script_down: ['/usr/local/sbin/random_script.sh']
    ens195:  # inicializar interfaz padre
    ens195.85:
      vlan: true
      hotplug: false
      address: '10.0.85.90/24'
      gateway: '10.0.85.1'
      nameservers: ['10.0.85.1']
    # agregación de NIC
    bond01:
      bond-mode: '802.3ad'
      bond-lacp-rate: 1
      bond-miimon: 100
      address: '192.168.200.10/26'
      bond-slaves: ['ens196', 'ens197']  # no definir interfaces esclavas por separado
    #   agregación activa-pasiva
    bond02:
      bond-mode: 'active-passive'
      address: '192.168.210.10/26'
      bond-slaves: ['ens198', 'ens199']
      # bond-primary: 'ens198'  # si no se define un primario, se elegirá automáticamente

  validation:
    enable: true
    # pruebas a ejecutar cuando se realice un cambio en la red
    #   si la prueba falla; se restaurarán los cambios de la sesión actual
    tests:
      ping:
        google_dns: '8.8.8.8'
      port:  # probará si el puerto remoto es alcanzable (solo TCP)
        internal_web:
          host: 'someSite.internal'
          port: 443

  startup_service:
    enable: true
    interfaces:
      tunnel01:
        type: 'vti'
        args:
          key: 32
          local: '192.168.133.1'
          remote: '192.168.133.2'
    
    routes:
      '192.168.142.1':
        - net: '10.10.40.0/22'
          metric: 50
      tunnel01:
        - net: '10.10.52.0/24'
    
    routes_cmd:
      - 'ip route add 0.0.0.0/0 via 192.168.142.254 metric 200'

Ejecución

Ejecuta el playbook:

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml

También hay algunas etiquetas útiles disponibles:

  • base
  • interfaces
  • routing

Funcionalidad

  • Interfaces de red

    • puentes
    • agregación
    • vlans
    • ipv4 e ipv6
  • Enrutamiento estático

    • a través de scripts de inicio/parada de interfaces
    • a través del servicio de inicio
  • Opción predeterminada para incluir:

    • instalación de herramientas básicas de diagnóstico de red
    • purgado de interfaces huérfanas
    • soporte para:
      • ipv6
  • Opción predeterminada para excluir:

    • servicio de inicio de red para permitir configuraciones específicas
    • anti-bloqueo mediante script de validación de red
    • soporte para:
      • agregación de interfaces
      • puentes de interfaces
      • interfaces vlan
      • reenvío de tráfico (similar a router)

Información

  • Nota: este rol actualmente solo soporta sistemas Debian (Ubuntu en parte)

  • Nota: La mayor parte de la funcionalidad del rol se puede incluir o excluir.

    Para todas las opciones disponibles, consulta la configuración predeterminada ubicada en el archivo principal de defaults!

  • Advertencia: No todas las configuraciones/variables que proporciones serán verificadas por validez. Una mala configuración podría romper el rol!

  • Nota: La verificación del puerto para validación de red solo admite puertos objetivos TCP, ya que la conectividad UDP no puede ser verificada tan fácilmente.


Ejemplo

Básico, Agregación, Vlan

Configuración

network:
  support:
    vlan: true
    bridge: true
    bonding: true
    ipv6: false

  interfaces:
    ens192:
      address: '10.48.2.90/24'
      gateway: '10.48.2.254'
    bond01:
      bond-mode: 'balance-tlb'
      address: '10.48.2.92/24'
      bond-slaves: ['ens224', 'ens256']
    ens161:
    ens161.5:
      vlan: true
      hotplug: false
      address: '10.10.55.10/24'
      nameservers: ['10.0.55.1']
      script_post-up: ['ip route add 192.168.4.0/22 via 10.10.55.1 metric 50']

Resultado:

guy@ansible:~# ip a
> 2: ens192:
>     altname enp11s0
>     inet 10.48.2.90/24 brd 10.48.2.255 scope global ens192
> 3: bond01 <MASTER,UP>
>     inet 10.48.2.92/24 brd 10.48.2.255 scope global bond01
> 4: ens256: <SLAVE,UP>
>     altname enp27s0
> 5: ens224: <SLAVE,UP>
>     altname enp19s0
> 6: ens161:
>     altname enp4s0
> 7: ens161.5@ens161:
>     inet 10.10.55.10/24 brd 10.10.55.255 scope global ens161.5

guy@ansible:~# ip route show
> default via 10.48.2.254 dev ens192 onlink 
> 10.10.55.0/24 dev ens161.5 proto kernel scope link src 10.10.55.10 
> 10.48.2.0/24 dev bond01 proto kernel scope link src 10.48.2.92 linkdown 
> 10.48.2.0/24 dev ens192 proto kernel scope link src 10.48.2.90
> 192.168.4.0/22 via 10.10.55.1 dev ens161.5 metric 50

guy@ansible:~# cat /proc/net/bonding/bond01
> Controlador de Agregación de Ethernet: v5.10.0-8-amd64
> 
> Modo de Agregación: balanceo de carga de transmisión
> Esclavo Primario: Ninguno
> Esclavo Activo Actual: ens224
> Estado MII: activo
> Intervalo de Sondeo MII (ms): 100
> Retraso Inicial (ms): 200
> Retraso de Caída (ms): 200
> Retraso de Notificación de Pares (ms): 0
> 
> Interfaz Esclava: ens224
> Estado MII: activo
> Velocidad: 10000 Mbps
> Dúplex: completo
> Conteo de Fallos de Enlace: 0
> Dirección HW Permanente: xx:xx:xx:xx:xx:xx
> ID de Cola de Esclavo: 0
> 
> Interfaz Esclava: ens256
> Estado MII: activo
> Velocidad: 10000 Mbps
> Dúplex: completo
> Conteo de Fallos de Enlace: 0
> Dirección HW Permanente: xx:xx:xx:xx:xx:xx
> ID de Cola de Esclavo: 0

IPv6 & Alias

Configuración

network:
  validation:
    enable: true
  interfaces:
    eth0:
      address: '10.0.85.90/24'
      gateway: '10.0.85.1'
      aliases:
        - address: '2a09:cd41:f:42ee::1/124'
          gateway: '2a09:cd41:f:42ee::f'
        - '2a09:cd41:f:42ee::2'

Resultado:

guy@ansible:~# ping -6 one.one.one.one -I 2a09:cd41:f:42ee::2
> PING one.one.one.one(one.one.one.one (2606:4700:4700::1111)) from 2a09:cd41:f:42ee::2 : 56 bytes de datos
> 64 bytes desde one.one.one.one (2606:4700:4700::1111): icmp_seq=1 ttl=58 tiempo=14.7 ms

guy@ansible:~# ip a
> 1: lo: <LOOPBACK,UP,LOWER_UP>
> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
>     inet 10.0.85.90/24 brd 10.0.85.255 scope global eth0
>     inet6 2a09:cd41:f:42ee::2/128 scope global deprecated 
>     inet6 2a09:cd41:f:42ee::1/124 scope global deprecated 

guy@ansible:~# cat /etc/network/interfaces.d/eth0
> # Gestionado por Ansible
> # ansibleguy.linux_networking
> 
> # para más detalles de configuración ver: https://wiki.debian.org/NetworkConfiguration
> 
> auto eth0
> allow-hotplug eth0
> 
> iface eth0 inet static
>     address 194.32.76.202/24
>     gateway 194.32.76.1
>     dns-nameservers 8.8.8.8 1.1.1.1
> 
> # Alias de interfaz (IPs adicionales)
> auto eth0:1
> allow-hotplug eth0:1
> iface eth0:1 inet6 static
>     address 2a09:cd41:f:42ee::1/124
>     gateway 2a09:cd41:f:42ee::f
> 
> auto eth0:2
> allow-hotplug eth0:2
> iface eth0:2 inet6 static
>     address 2a09:cd41:f:42ee::2
Acerca del proyecto

Role to configure network interfaces and routing on linux servers

Instalar
ansible-galaxy install ansibleguy.linux_networking
Licencia
other
Descargas
2.5k
Propietario
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg