frr
Содержание сгенерировано с помощью DocToc
- ansible-frr
ansible-frr
Роль Ansible для установки/настройки FRR
ПРИМЕЧАНИЕ: FRRouting (FRR) — это набор протоколов маршрутизации IP для Linux и Unix, который включает в себя демон протоколов для BFD, BGP, IS-IS, LDP, OSPF, PIM и RIP.
Статус сборки
GitHub Actions
Travis CI
Требования
Для необходимых ролей Ansible просмотрите: requirements.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-galaxy install mrlesmithjr/ansible-frr