frr

Содержание сгенерировано с помощью DocToc

ansible-frr

Роль Ansible для установки/настройки FRR

ПРИМЕЧАНИЕ: FRRouting (FRR) — это набор протоколов маршрутизации IP для Linux и Unix, который включает в себя демон протоколов для BFD, BGP, IS-IS, LDP, OSPF, PIM и RIP.

Статус сборки

GitHub Actions

Molecule Test

Travis CI

Статус сборки

Требования

Для необходимых ролей Ansible просмотрите: requirements.yml

Переменные роли

defaults/main.yml

Зависимости

Пример рабочего сценария

playbook.yml

Маршруты и списки префиксов

Маршруты

Настройка маршрутов

Ниже приведен пример настройки маршрутов:

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: []

Общие параметры

Пересылка IP/IPv6

Ниже приведен пример включения пересылки IP и IPv6:

frr_ip_forwarding: true
frr_ipv6_forwarding: true

Чтобы включить пересылку ядра, роль настраивает переменные sysctl net.ipv4.ip_forward и net.ipv6.conf.all.forwarding. Чтобы настроить местоположение конфигурации sysctl, можно использовать следующую переменную:

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

Отслеживание следующего хопа через умолчание

Разрешайте следующих хопов, используя маршрут по умолчанию; полезно, если BGP-сосед доступен только через шлюз по умолчанию (по умолчанию отключено).

Чтобы включить:

frr_nht_resolve_default: true

Списки префиксов

Настройка списков префиксов

Ниже приведен пример настройки списков префиксов:

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

Списки доступа

Настройка списков доступа

Ниже приведен пример

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"

Обнаружение двусторонней пересылки (BFD)

Включение BFD

Чтобы включить BFD, убедитесь, что bfdd: true настроено в разделе:

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

Настройка BFD

Настройка BFD осуществляется в параметрах соседей BGP. Поддержка BFD для OSPF пока недоступна.

Поддерживаемые маршрутизирующие протоколы

Протокол Реализован Заметки
BGP X Только начальная конфигурация
OSPF X Только начальная конфигурация
STATIC X Только начальная конфигурация

BGP

Включение BGP

Чтобы включить маршрутизацию BGP, убедитесь, что bgpd: true настроено в разделе:

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

Настройка BGP

Чтобы настроить BGP, определите следующее в зависимости от ваших требований:

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

Пример BGP

Ниже приведен пример конфигурации 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"

Ниже приведен пример сводки BGP на основе вышеуказанной конфигурации:

BGP table version is 13, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
              i internal, r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 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

Displayed  13 routes and 15 total paths

OSPF

Включение OSPF

Чтобы включить маршрутизацию OSPF, убедитесь, что ospfd: true настроено в разделе:

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

Настройка OSPF

Чтобы настроить OSPF, определите следующее в зависимости от ваших требований:

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: # Список интерфейсов для пассивного режима
    - default
  redistribute: # Список протоколов для перераспределения
    - bgp
    - connected
    - kernel
    - ospf
    - static
  distribute_list:
    - name: 10
      dir: out
      protocol: connected

OSPF с учетом VRF

Каждый ключ под frr_ospf_vrf_enabled представляет имя 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

STATIC

Настройка статических маршрутов

Чтобы настроить статические маршруты, определите следующее в зависимости от ваших требований:

frr_static: # Словарь. ключ = назначение, значение = следующий хоп
  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: # Словарь. ключ = назначение, значение = следующий хоп
  2001:0db8:85a3:8a2e::/64 2001::1

Настройки интерфейса

Интерфейсы

frr_interfaces: # Словарь. ключ = имя интерфейса, значение = данные интерфейса
  lo:
    ip: 10.0.0.0/32 # ip может быть единственным значением или списком
    ipv6: 2001:0db8:85a3:8a2e::1/64 # ipv6 может быть единственным значением или списком
    description: loopback
  eth0:
    ip: # ip может быть единственным значением или списком
      - 10.0.0.0/32
      - 172.16.0.0/32
    ipv6: # ipv6 может быть единственным значением или списком
      - 2001:0db8:85a3:8a2e::1/64
      - 2001:0db8:85a3:8a2e::2/64
    vrf: management # поместите интерфейс в VRF 'management'
    auth:
      id: 1
      key: supersecret
    other:
      - "no ipv6 nd suppress-ra"
      - "link-detect"

ПРИМЕЧАНИЕ: У устройства должно быть правильное назначение VRF на каждом интерфейсе с учетом VRF:

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

Обновление/Понижение

ПРИМЕЧАНИЕ: FRR не может быть понижена с версии 6.0.2 с помощью этой роли.

Вы можете обновить или понизить FRR, установив следующую переменную:

frr_version: 6.0.2 с frr_version: 6.0

Настройка Quagga

ПРИМЕЧАНИЕ: Quagga должен быть установлен из локальных репозиториев ОС

Вы можете настроить Quagga вместо FRR, используя следующую переменную:

routing_type: quagga

Дополнительные настройки, специфичные для Quagga

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

Лицензия

MIT

Информация об авторе

Ларри Смит младший.

Купите мне кофе

ПРИМЕЧАНИЕ: Репозиторий был создан/обновлен с использованием https://github.com/mrlesmithjr/cookiecutter-ansible-role в качестве шаблона.

О проекте

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

Установить
ansible-galaxy install mrlesmithjr/ansible-frr
Лицензия
mit
Загрузки
102230
Владелец
Doing my thang with #automation #DevOps and cloudy things! Providing hopefully valuable content for others to consume easily and also learn from.