mrlesmithjr.frr

Tabla de Contenidos generada con DocToc

ansible-frr

Rol de Ansible para instalar/configurar FRR.

NOTA: FRRouting (FRR) es un conjunto de protocolos de enrutamiento IP para plataformas Linux y Unix, que incluye demonios de protocolo para BFD, BGP, IS-IS, LDP, OSPF, PIM y RIP.

Estado de Construcción

Acciones de GitHub

Prueba de Molécula

Travis CI

Estado de Construcción

Requisitos

Para cualquier rol de Ansible requerido, revisa: requirements.yml

Variables del Rol

defaults/main.yml

Dependencias

Ejemplo de Playbook

playbook.yml

Mapas de Rutas y Listas de Prefijos

Mapas de Rutas

Configuración de Mapas de Rutas

A continuación, se muestra un ejemplo de Configuración de Mapas de Rutas:

frr_route_map:
  RTBH:
    permit 10:
      interface: blackhole
      prefix_list: Bad_IPs
      origin: igp
      community: "12345:100"
      src: 2001:db8::bf03
  RTBH_IN:
    deny 10: []

Opciones Generales

Reenvío de IP/IPv6

A continuación, se muestra un ejemplo de habilitar el reenvío de ip e ipv6:

frr_ip_forwarding: true
frr_ipv6_forwarding: true

Para habilitar el reenvío del kernel, el rol establece las variables de sysctl net.ipv4.ip_forward y net.ipv6.conf.all.forwarding. Para personalizar la ubicación de la configuración de sysctl, se puede usar la siguiente variable:

frr_sysctl_file: /etc/sysctl.d/100-ansible-frr.conf

Seguimiento de siguiente salto a través de default

Resolver nexthops usando la ruta por defecto; útil si el par BGP es alcanzable solo a través de la puerta de enlace por defecto (deshabilitado por defecto).

Para habilitar:

frr_nht_resolve_default: true

Listas de Prefijos

Configuración de Listas de Prefijos

A continuación, se muestra un ejemplo de Configuración de Listas de Prefijos:

frr_prefix_list:
  Bad_IPs:
    05 permit:
      prefix: 192.168.88.0/24
      match: ge 32
    10 permit:
      prefix: 172.16.0.0/16
      match: le 32
frr_prefix_list_v6:
  Bad_IPs:
    05 permit:
      prefix: 1234:5678::/32
      match: ge 128

Listas de Acceso

Configuración de Listas de Acceso

A continuación, se muestra un ejemplo:

frr_access_list:
  - "10 permit 10.10.10.21/32"
  - "10 permit 192.168.0.0/17"
  - "101 permit ip 10.0.0.0 0.0.0.255 any"

Detección de Reenvío Bidireccional (BFD)

Habilitar BFD

Para habilitar BFD, asegúrese de que bfdd: true esté configurado bajo:

frr_daemons:
  bfdd: true
  bgpd: false
  isisd: false
  ldpd: false
  nhrpd: false
  ospf6d: false
  ospfd: false
  pimd: false
  ripd: false
  ripngd: false
  zebra: true

Configuración de BFD

La configuración de BFD se realiza en la configuración del vecino BGP. BFD para OSPF no es compatible todavía.

Protocolos de Enrutamiento Soportados

Protocolo Implementado Notas
BGP X Solo configuración inicial
OSPF X Solo configuración inicial
ESTÁTICO X Solo configuración inicial

BGP

Habilitar BGP

Para habilitar el enrutamiento BGP, asegúrese de que bgpd: true esté configurado bajo:

frr_daemons:
  bfdd: false
  bgpd: false
  isisd: false
  ldpd: false
  nhrpd: false
  ospf6d: false
  ospfd: false
  pimd: false
  ripd: false
  ripngd: false
  zebra: true

Configuración de BGP

Para configurar BGP, defina lo siguiente según sus necesidades:

frr_bgp:
  asns:
    65000:
      log_neighbor_changes: true
      no_ebgp_requires_policy: true
      timers: '3 9'
      other:
        - "bgp bestpath as-path multipath-relax"
        - "no bgp network import-check"
      neighbors:
        group1:
          asn: 66000
          is_peer_group: true
          multihop: 255
        192.168.250.11:
          asn: 65000
          default_originate: false
          description: node1
          next_hop_self: true
          timers_connect: 5
          v6only: true
          bfd_peer: true
          bfd_peer_detect_multiplier: 3
          bfd_peer_receive_interval: 50
          bfd_peer_transmit_interval: 50
          bfd_peer_echo_interval: 50
          bfd_peer_passive_mode: true
          bfd_peer_minimum_ttl: 253
          other:
            - "capability dynamic"
        192.168.250.12:
          asn: 65000
          default_originate: false
          description: node2
          next_hop_self: true
          v4_route_reflector_client: true
          password: secret
          bfd_peer: true
          bfd_peer_transmit_interval: 2000
          bfd_peer_echo_mode: true
          other:
            - "prefix-list Bad_IPs in"
        192.168.250.12:
          peer_group: group1
          description: far_away
      listen_range:
        192.168.250.0/24: group1
      networks:
        - "{{ frr_router_id }}/32"
        - "{{ hostvars[inventory_hostname]['ansible_enp0s8']['ipv4']['address'] }}/24"
      redistribute:
        - bgp
        - connected
        - kernel
        - ospf
        - static
      redistribute_v6:
        - bgp
        - connected
        - kernel

Ejemplo de BGP

A continuación, se muestra un ejemplo de configuración de BGP:

frr_bgp:
  asns:
    65000:
      log_neighbor_changes: true
      af_v4:
        - "maximum-paths 2"
      af_v6:
        - "maximum-paths 2"
      af_evpn:
        - "advertise-all-vni"
        - "rd {{ frr_router_id }}:1"
      neighbors:
        192.168.250.11:
          asn: 65000
          default_originate: false
          description: node1
          next_hop_self: true
          af_v4:
            - "soft-reconfiguration inbound"
        192.168.250.12:
          asn: 65000
          default_originate: false
          description: node2
          next_hop_self: true
        "::1":
          asn: 65000
          default_originate: false
          description: node1
          next_hop_self: true
          af_v6:
            - "activate"
            - "soft-reconfiguration inbound"
        172.16.250.10:
          asn: internal
          timers_connect: 5
          description: "L2VPN EVPN neighbor"
          af_evpn:
            - "activate"
          other:
            - "capability extended-nexthop"
      networks:
        - "{{ frr_router_id }}/32"
        - "{{ hostvars[inventory_hostname]['ansible_enp0s8']['ipv4']['address'] }}/24"
        - "{{ hostvars[inventory_hostname]['ansible_enp0s9']['ipv4']['address'] }}/24"
        - "{{ hostvars[inventory_hostname]['ansible_enp0s10']['ipv4']['address'] }}/24"
        - "{{ hostvars[inventory_hostname]['ansible_enp0s16']['ipv4']['address'] }}/24"
      networks_v6:
        - "1::3/64"

A continuación, se muestra un ejemplo de un resumen de BGP basado en la configuración anterior:

La versión de la tabla BGP es 13, el ID local del router es 1.1.1.1
Códigos de estado: s suprimido, d amortiguado, h historial, * válido, > mejor, = múltiplo,
              i interno, r fallo RIB, S Obsoleto, R Eliminado
Códigos de origen: i - IGP, e - EGP, ? - incompleto

   Red              Siguiente Salto      Métrica LocPrf Peso Ruta
*> 1.1.1.1/32       0.0.0.0                  0         32768 i
*>i2.2.2.2/32       192.168.250.11           0    100      0 i
*>i3.3.3.3/32       192.168.250.12           0    100      0 i
*> 192.168.10.0     0.0.0.0                  0         32768 i
*>i192.168.11.0     192.168.250.11           0    100      0 i
*>i192.168.12.0     192.168.250.12           0    100      0 i
*> 192.168.20.0     0.0.0.0                  0         32768 i
*>i192.168.21.0     192.168.250.11           0    100      0 i
*>i192.168.22.0     192.168.250.12           0    100      0 i
*> 192.168.30.0     0.0.0.0                  0         32768 i
*>i192.168.31.0     192.168.250.11           0    100      0 i
*>i192.168.32.0     192.168.250.12           0    100      0 i
* i192.168.250.0    192.168.250.11           0    100      0 i
* i                 192.168.250.12           0    100      0 i
*>                  0.0.0.0                  0         32768 i

Se mostraron  13 rutas y 15 caminos en total

OSPF

Habilitar OSPF

Para habilitar el enrutamiento OSPF, asegúrese de que ospfd: true esté configurado bajo:

frr_daemons:
  bfdd: false
  bgpd: false
  isisd: false
  ldpd: false
  nhrpd: false
  ospf6d: false
  ospfd: false
  pimd: false
  ripd: false
  ripngd: false
  zebra: true

Configuración de OSPF

Para configurar OSPF, defina lo siguiente según sus requisitos:

frr_ospf:
  areas:
    0:
      networks:
        - "{{ frr_router_id }}/32"
    1:
      networks:
        - "{{ hostvars[inventory_hostname]['ansible_enp0s8']['ipv4']['address'] }}/24"
      auth: true

    2:
      networks:
        - "{{ hostvars[inventory_hostname]['ansible_enp0s9']['ipv4']['address'] }}/24"
      type: nssa

  log_adjacency_changes: true
  passive_interfaces: # Una lista de interfaces para establecer como pasivas
    - default
  redistribute: # Una lista de protocolos para redistribuir
    - bgp
    - connected
    - kernel
    - ospf
    - static
  distribute_list:
    - name: 10
      dir: out
      protocol: connected

OSPF consciente de VRF

Cada clave bajo frr_ospf_vrf_enabled representa el nombre de la VRF:

frr_ospf_vrf_enabled:
  public:
    redistribute:
    - bgp
    - connected
    passive_interfaces:
     - lo
    log_adjacency_changes: true
    areas:
      1:
        networks:
          - "{{ hostvars[inventory_hostname]['ansible_ens3']['ipv4']['address'] }}/30"
        auth: true
  mgmt:
    redistribute:
      - kernel
    areas:
      0:
        networks:
          - 172.16.0.0/12
      2:
        networks:
          - 192.168.0.0/16
        type: nssa

ESTÁTICO

Configuración de rutas ESTÁTICAS

Para configurar rutas estáticas, defina lo siguiente según sus requisitos:

frr_static: # Un diccionario. clave = destino, valor = siguiente salto
  10.0.0.0/8: 192.168.1.1
  1.1.1.1: 192.168.1.1
  1.1.1.2: blackhole
frr_static_v6: # Un diccionario. clave = destino, valor = siguiente salto
  2001:0db8:85a3:8a2e::/64 2001::1

Configuración de Interfaces

Interfaces

frr_interfaces: # Un diccionario. clave = nombre de la interfaz, valor = datos de la interfaz
  lo:
    ip: 10.0.0.0/32 # ip puede ser un solo valor o lista
    ipv6: 2001:0db8:85a3:8a2e::1/64 # ipv6 puede ser un solo valor o lista
    description: loopback
  eth0:
    ip: # ip puede ser un solo valor o lista
      - 10.0.0.0/32
      - 172.16.0.0/32
    ipv6: # ipv6 puede ser un solo valor o lista
      - 2001:0db8:85a3:8a2e::1/64
      - 2001:0db8:85a3:8a2e::2/64
    vrf: management # poner la interfaz en la VRF de 'management'
    auth:
      id: 1
      key: supersecret
    other:
      - "no ipv6 nd suppress-ra"
      - "link-detect"

NOTA: El dispositivo debe tener la asignación de VRF correcta en cada interfaz consciente de VRF:

ip link set dev ${IFACE} master ${VRF}

Actualizar/Downgradear

NOTA: FRR no se puede hacer downgrade de 6.0.2 usando este rol.

Puede actualizar o degradar FRR configurando la siguiente variable:

frr_version: 6.0.2 desde frr_version: 6.0

Configuración de Quagga

NOTA: Quagga debe ser instalado desde los repositorios locales del sistema operativo.

Puede configurar Quagga en lugar de FRR utilizando la siguiente variable:

routing_type: quagga

Configuraciones adicionales específicas de Quagga

frr_bgp:
  asns:
    65000:
      neighbors:
        swp1:
          **interface: true**

Licencia

MIT

Información del Autor

Larry Smith Jr.

Buy Me Un Café

NOTA: El repositorio ha sido creado/actualizado usando https://github.com/mrlesmithjr/cookiecutter-ansible-role como plantilla.

Acerca del proyecto

Ansible role to install/configure [FRR](https://frrouting.org/)

Instalar
ansible-galaxy install mrlesmithjr.frr
Licencia
mit
Descargas
102.6k
Propietario
Doing my thang with #automation #DevOps and cloudy things! Providing hopefully valuable content for others to consume easily and also learn from.