Ansible Cisco CCNA

https://github.com/goffinet/ansible-ccna-lab/blob/master/README.md

1. Mise en place minimale

Note pour les utilisateur de la topologie GNS3 fournie en classe, sur tous les périphériques, il sera peut-être nécessaire de re-générer les clés RSA des périphériques Cisco :

enable
configure terminal
crypto key generate rsa modulus 2048
exit
wr

1.1. Images GNS3

  • image IOSv (kvm)
  • image IOSv-L2 (kvm)
  • image Centos (kvm)

1.2. Routeurs

On utilise des IOSv pour les routeurs L3 avec 8 interfaces GigabitEthernet.

L’interface GigabitEthernet0/7 sert de console de contrôle TCP/IP et ne participe pas au routage.

SSH est activé de la manière suivante, sur R1 par exemple :

hostname R1
int GigabitEthernet0/7
 ip address dhcp
 no shutdown
 no cdp enable
ip domain-name lan
username root privilege 15 password testtest
crypto key generate rsa modulus 2048
ip ssh version 2
ip scp server enable
line vty 0 4
 login local
 transport input ssh
end
wr

1.3. Commutateurs

On utilise des IOSv-L2 pour les commutateurs multicouches.

L’interface GigabitEthernet3/3 sert de console de contrôle TCP/IP et ne participe pas au routage.

SSH est activé de la manière suivante, sur AS1 par exemple :

hostname AS1
int GigabitEthernet3/3
 ip address dhcp
 no shutdown
 no cdp enable
ip domain-name lan
username root privilege 15 password testtest
crypto key generate rsa modulus 2048
ip ssh version 2
ip scp server enable
line vty 0 4
 login local
 transport input ssh
end
wr

1.4. Station de contrôle

La station de contrôle connecte tous les périphériques en SSH.

Elle offre un service DHCP avec enregistrement dynamique des noms d’hôte dans un serveur DNS (dnsmasq).

Le logiciel Ansible est fraîchement installé.

yum -y install dnsmasq
yum -y install ansible git dnsmasq
cat << EOF > /etc/dnsmasq.conf
interface=lo0
interface=eth0
dhcp-range=11.12.13.100,11.12.13.150,255.255.255.0,512h
dhcp-option=3
EOF
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
IPADDR=11.12.13.1
PREFIX=24
IPV4_FAILURE_FATAL=no
DNS1=127.0.0.1
EOF
systemctl enable dnsmasq
hostnamectl set-hostname controller
shutdown -r now

Il est nécessaire de cloner sur la machine de contrôle de dépot.

git clone https://github.com/goffinet/ansible-ccna-lab

2. Topologie tripod

2.1. Topologie logique

Topologie Tripod

2.2. Brève description

Trois périphériques IOSv interconnectés entre eux :

  • R1
  • R2
  • R3
RouteurInterfaceAdresse IPv4Adresses IPv6Description
R1G0/0192.168.1.1/24fe80::1, fd00:fd00:fd00:1::1/64LAN de R1
R1G0/2192.168.225.1/24fe80::1Connexion vers R2
R1G0/3192.168.227.1/24fe80::1Connexion vers R3
R2G0/0192.168.33.1/24fe80::2, fd00:fd00:fd00:2::1/64LAN de R2
R2G0/1192.168.225.2/24fe80::2Connexion vers R1
R2G0/3192.168.226.1/24fe80::2Connexion vers R3
R3G0/0192.168.65.1/24fe80::3, fd00:fd00:fd00:3::1/64LAN de R3
R3G0/1192.168.227.2/24fe80::3Connexion vers R1
R3G0/2192.168.226.2/24fe80::3Connexion vers R2
  • On activera un service DHCP sur chaque réseau local (GigabitEthernet0/0).
  • Le routeur R1 connecte l’Internet. Le service NAT est activé.

3. Topologie Switchblock

3.1. Topologie avec redondance de passerelle HSRP

Topologie avec redondance de passerelle HSRP

3.2. VLANs

VLANPorts Access (AS1 et AS2)plage d’adressePasserelle par défaut
VLAN 10g2/0172.16.10.0/24172.16.10.254
VLAN 20g2/1172.16.20.0/24172.16.10.254
VLAN 30g2/2172.16.30.0/24172.16.10.254
VLAN 40g2/3172.16.40.0/24172.16.10.254
VLAN 99VLAN natifManagement

3.3. Ports Etherchannel et Trunk VLANs

PortChannelports physiquesCommutateurs
po1g0/0,g1/0AS1 - DS1
po2g0/1,g1/1AS1 - DS2
po3g0/2,g1/2DS1 - DS2
po4g0/0,g1/0AS2 - DS2
po5g0/1,g1/1AS2 - DS1

3.4. Spanning-Tree

VLANsDS1DS2
VLANs 1,10,30,99root primaryroot secondary
VLANs 20,40root secondaryroot primary

3.5.Plan d’adressage

CommutateurInterfaceAdresse IPv4Adresse(s) IPv6
DS1VLAN10172.16.10.252/24fd00:1ab:10::1/64
DS1VLAN20172.16.20.252/24fd00:1ab:20::1/64
DS1VLAN30172.16.30.252/24fd00:1ab:30::1/64
DS1VLAN40172.16.40.252/24fd00:1ab:40::1/64
DS2VLAN10172.16.10.253/24fd00:1ab:10::2/64
DS2VLAN20172.16.20.253/24fd00:1ab:20::2/64
DS2VLAN30172.16.30.253/24fd00:1ab:30::2/64
DS2VLAN40172.16.40.253/24fd00:1ab:40::2/64

3.6. HSRP

CommutateurInterfaceAdresse IPv4 virtuelleAdresse IPv6 virtuelleGroupPriorité
DS1VLAN10172.16.10.254/24fe80::d:1/641016150, prempt
DS1VLAN20172.16.20.254/24fe80::d:1/642026default
DS1VLAN30172.16.30.254/24fe80::d:1/643036150, prempt
DS1VLAN40172.16.40.254/24fe80::d:1/644046default
DS2VLAN10172.16.10.254/24fe80::d:2/641016default
DS2VLAN20172.16.20.254/24fe80::d:2/642026150, prempt
DS2VLAN30172.16.30.254/24fe80::d:2/643036default
DS2VLAN40172.16.40.254/24fe80::d:2/644046150, prempt

3.7. Ressources requises

  • 4 commutateurs (vios_l2 Software (vios_l2-ADVENTERPRISEK9-M), Experimental Version 15.2(20170321:233949))
  • 8 PCs (Centos 7 KVM ou Ubuntu Docker)
  • (Câbles de console pour configurer les périphériques Cisco IOS via les ports de console)
  • Câbles Ethernet conformément à la topologie

3.8. Explication

Dans l’exercice de laboratoire “Lab répartition de charge avec Rapid Spanning-Tree”, nous avons appris à déployer Rapid Spanning-Tree entre la couche Distribution et la couche Access. Il manque manifestement une sûreté au niveau de la passerelle par défaut que constitue le commutateur de Distribution. Afin d’éviter ce point unique de rupture, on apprendra à configurer et vérifier HSRP. Dans cette topologie une passerelle devient routeur “Active” pour certains VLANs et reste en HSRP “Standby” pour d’autres VLANs et inversément.

On trouvera plus bas les fichiers de configuration qui déploient la solution VLANs, Trunking, Etherchannel, Rapid Spanning-Tree, SVI IPv4 et IPv6 et DHCP. Par rapport à l’exercice de laboratoire “Lab répartition de charge avec Rapid Spanning-Tree”, tout reste identique sauf le paramètre de passerelle.

4. Toplogie CCNA R&S

5. Utilisation

Se rendre dans le dossier des livres de jeux :

git clone https://github.com/goffinet/ansible-ccna-lab
cd ansible-ccna-lab

Tester la connectivité vers les périphériques :

ansible all -m ping

Inventaire et variables d’inventaire

L’inventaire est défini comme suit (fichier inventories/main/hosts) :

[all:vars]
#method=modules # modules or templating
#dynamic_ipv4_routing=rip # rip, eigrp4, ospfv2

[core]
R1
R2
R3

[distribution]
DS1
DS2

[access]
AS1
AS2

[blocks:children]
distribution
access

[cisco:children]
core
distribution
access

[cisco:vars]
ansible_user=root
ansible_ssh_pass=testtest
ansible_port=22
ansible_connection=network_cli
ansible_network_os=ios

Les configurations sont définies en YAML dans les fichiers de variables d’inventaire (dossiers inventories/main/group_vars et inventories/main/host_vars).

inventories/main
├── group_vars
│   ├── all       --> ipv6 activé, protocoles de routage ipv4/ipv6
│   └── blocks    --> variables vlans, switchports et stp mode
├── hosts         --> fichier d'inventaire
└── host_vars     --> variables propres à chaque périphérique
    ├── AS1
    ├── AS2
    ├── DS1
    ├── DS2
    ├── R1
    ├── R2
    └── R3

5.1. Livres de jeu

Les livres de jeu font appel à des rôles qui trouvent la valeur des variables dans l’inventaire

Le playbook core.yml configure la topologie tripod :

ansible-playbook core.yml -v

Le playbook blocks.yml configure la topologie switchblock :

ansible-playbook blocks.yml -v

Le playbook site.yml configure l’ensemble :

ansible-playbook site.yml -v

5.2. Diagnostic de base

Diagnostic du routage sur R1 :

ansible R1 -m ios_command -a "commands='show ip route'"

Diagnostic à partir des routeurs Core :

ansible core -m ios_command -a "commands='traceroute 192.168.1.1 source GigabitEthernet0/0 probe 1 numeric'"
ansible core -m ios_command -a "commands='traceroute 172.16.10.1 source GigabitEthernet0/0 probe 1 numeric'"

6. Rôles / Tags

  • l2
  • full-ipv4
  • full-ipv6
  • ipv4
  • ipv6
  • etherchannel
  • vlan
  • eigrp4
  • eigrp6
  • ospfv2
  • ospfv3
  • fhrp
  • dhcp-server
  • rdnss
  • syslog
  • ntp
  • snmpv2c
  • snmpv3
  • zbf
  • dhcp-relay
  • ra-config
  • dhcpv6 stateless
  • dhcpv6 stateful
  • save
  • write

7. Historical Todo

Phase 0 : Écriture de playbooks avec les modules ios_*

Archivé.

Phase I

Portage en rôles.

  • Revoir la structure des données
  • dependencies
  • tags**
  • tasks by jinja2 templating
  • fhrp4
  • fhrp6
  • rdnss
  • syslog
  • dhcp-relay
  • ntp (auth)
  • auth eigrp4/6 ospfv2/v3
  • snmpv2c / snmpv3
  • zbf
  • ra-config / dhcpv6 stateless / dhcpv6 stateful + (dns)
  • ppp / chap / pap
  • gre ipv6
  • gre ipv4

Phase II

Infrastructure “immutable”

“Immutable” roles by templating one config file based on infrastructure choices (variables) and pushed by config replace flash:XXX force procedure to the devices.

Phase III

  • Reporting