mrlesmithjr.frr
Table des Matières générée avec DocToc
- ansible-frr
- Statut de Construction
- Exigences
- Variables de Rôle
- Dépendances
- Exemple de Playbook
- Cartes de Routes et Listes de Préfixes
- Détection de Transfert Bidirectionnel
- Protocoles de Routage Supportés
- Configuration des Interfaces
- Mise à Niveau/Dégrada
- Configuration de Quagga
- Licence
- Informations sur l'Auteur
ansible-frr
Rôle Ansible pour installer/configurer FRR
REMARQUE : FRRouting (FRR) est un ensemble de protocoles de routage IP pour Linux et les plateformes Unix, qui inclut des démons de protocole pour BFD, BGP, IS-IS, LDP, OSPF, PIM et RIP.
Statut de Construction
Actions GitHub
Travis CI
Exigences
Pour les rôles Ansible requis, consultez : requirements.yml
Variables de Rôle
Dépendances
Exemple de Playbook
Cartes de Routes et Listes de Préfixes
Cartes de Routes
Configuration des Cartes de Routes
Voici un exemple de configuration des Cartes de Routes :
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: []
Options Générales
Transfert IP/IPv6
Voici un exemple d'activation du transfert IP et IPv6 :
frr_ip_forwarding: true
frr_ipv6_forwarding: true
Pour activer le transfert kernel, le rôle définit les variables sysctl net.ipv4.ip_forward
et net.ipv6.conf.all.forwarding
. Pour personnaliser l'emplacement de la configuration sysctl, la variable suivante peut être utilisée :
frr_sysctl_file: /etc/sysctl.d/100-ansible-frr.conf
Suivi du prochain saut via la route par défaut
Résoudre les prochains sauts en utilisant la route par défaut ; cela est utile si le pair BGP est uniquement accessible via la passerelle par défaut (désactivé par défaut).
Pour activer :
frr_nht_resolve_default: true
Listes de Préfixes
Configuration des Listes de Préfixes
Voici un exemple de configuration des Listes de Préfixes :
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
Listes d'Accès
Configuration des Listes d'Accès
Voici un exemple :
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"
Détection de Transfert Bidirectionnel (BFD)
Activer BFD
Pour activer BFD, assurez-vous que bfdd: true
est configuré sous :
frr_daemons:
bfdd: true
bgpd: false
isisd: false
ldpd: false
nhrpd: false
ospf6d: false
ospfd: false
pimd: false
ripd: false
ripngd: false
zebra: true
Configuration de BFD
La configuration de BFD se fait sous les paramètres voisins BGP. BFD pour OSPF n'est pas encore pris en charge.
Protocoles de Routage Supportés
Protocole | Implémenté | Remarques |
---|---|---|
BGP | X | Seulement la config initiale |
OSPF | X | Seulement la config initiale |
STATIC | X | Seulement la config initiale |
BGP
Activer BGP
Pour activer le routage BGP, assurez-vous que bgpd: true
est configuré sous :
frr_daemons:
bfdd: false
bgpd: false
isisd: false
ldpd: false
nhrpd: false
ospf6d: false
ospfd: false
pimd: false
ripd: false
ripngd: false
zebra: true
Configuration de BGP
Pour configurer BGP, définissez ce qui suit en fonction de vos besoins :
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
Exemple BGP
Voici un exemple de configuration 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: "Voisin L2VPN EVPN"
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"
Voici un exemple de résumé BGP basé sur la configuration ci-dessus :
La version de la table BGP est 13, l'ID du routeur local est 1.1.1.1
Codes d'état : s supprimé, d amorti, h historique, * valide, > meilleur, = multipath,
i interne, r échec du RIB, S obsolète, R supprimé
Codes d'origine : i - IGP, e - EGP, ? - incomplet
Réseau Prochain saut Métrique LocPrf Poids Chemin
*> 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
Affichés 13 routes et 15 chemins au total
OSPF
Activer OSPF
Pour activer le routage OSPF, assurez-vous que ospfd: true
est configuré sous :
frr_daemons:
bfdd: false
bgpd: false
isisd: false
ldpd: false
nhrpd: false
ospf6d: false
ospfd: false
pimd: false
ripd: false
ripngd: false
zebra: true
Configuration de OSPF
Pour configurer OSPF, définissez ce qui suit selon vos besoins :
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: # Une liste d'interfaces à rendre passives
- default
redistribute: # Une liste de protocoles à redistribuer
- bgp
- connected
- kernel
- ospf
- static
distribute_list:
- name: 10
dir: out
protocol: connected
OSPF sensible au VRF
Chaque clé sous frr_ospf_vrf_enabled
représente le nom de 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
Configuration des Routes STATIC
Pour configurer des routes statiques, définissez ce qui suit selon vos besoins :
frr_static: # Un dictionnaire. clé = destination, valeur = prochain saut
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 dictionnaire. clé = destination, valeur = prochain saut
2001:0db8:85a3:8a2e::/64 2001::1
Configuration des Interfaces
Interfaces
frr_interfaces: # Un dictionnaire. clé = nom de l'interface, valeur = données de l'interface
lo:
ip: 10.0.0.0/32 # ip peut être une seule valeur ou une liste
ipv6: 2001:0db8:85a3:8a2e::1/64 # ipv6 peut être une seule valeur ou une liste
description: loopback
eth0:
ip: # ip peut être une seule valeur ou une liste
- 10.0.0.0/32
- 172.16.0.0/32
ipv6: # ipv6 peut être une seule valeur ou une liste
- 2001:0db8:85a3:8a2e::1/64
- 2001:0db8:85a3:8a2e::2/64
vrf: management # mettre l'interface dans le VRF 'management'
auth:
id: 1
key: supersecret
other:
- "no ipv6 nd suppress-ra"
- "link-detect"
REMARQUE : Le dispositif doit avoir l'attribution correcte de VRF sur chaque interface consciente du VRF :
ip link set dev ${IFACE} master ${VRF}
Mise à Niveau/Dégrada
REMARQUE : FRR ne peut pas être dégradé à partir de 6.0.2 en utilisant ce rôle.
Vous pouvez mettre à niveau ou dégrader FRR en définissant la variable suivante :
frr_version: 6.0.2
depuis frr_version: 6.0
Configuration de Quagga
REMARQUE : Quagga doit être installé à partir des dépôts locaux de l'OS.
Vous pouvez configurer Quagga au lieu de FRR en utilisant la variable suivante :
routing_type: quagga
Configurations supplémentaires spécifiques à Quagga
frr_bgp:
asns:
65000:
neighbors:
swp1:
**interface: true**
Licence
MIT
Informations sur l'Auteur
Larry Smith Jr.
REMARQUE : Le dépôt a été créé/mis à jour en utilisant https://github.com/mrlesmithjr/cookiecutter-ansible-role comme modèle.
Ansible role to install/configure [FRR](https://frrouting.org/)
ansible-galaxy install mrlesmithjr.frr