Prérequis Lab Ansible automation réseau

1. Installation de GNS3 Server sur un serveur (distant)

Installation de GNS3 Server sur un serveur (distant).

cd /tmp
curl https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh \
> gns3-remote-install.sh
bash gns3-remote-install.sh --with-openvpn

Il sera nécessaire de redémarrer matériellement le serveur.

On charge une topologie mise à disposition et on attaque la gestion directement à partir de l’hôte de virtualisation ou à partir d’un hôte dans la topologie.

2. Préparation des périphériques

Les noeuds gérés, s’ils sont en Linux/Unix, doivent disposer de Python 2.6 ou version ultérieure, mais de préférence aujourd’hui le pré-requis est Python 3. SSH est alors le mode de connexion préféré.

Depuis sa version 1.7, Ansible peut également gérer les noeuds Windows. Dans ce cas, on utilise PowerShell à distance de manière native au lieu de SSH.

Le matériel d’infrastructure réseau (constructeurs), pare-feux, serveurs de stockage, fournisseurs IaaS, solutions de virtualisation sont supportés via SSH, NETCONF/YANG ou encore via API HTTP REST.

On trouvera ici un propos sur les Plugins de connexion.

Fonctionnement Ansible

Source : How Network Automation is Different

Ansible peut gérer des périphériques :

  • Arista (EOS),
  • Cisco (IOS, IOS XR, NX-OS),
  • Juniper (JunOS),
  • Open vSwitch
  • VyOS

3. Topologie de travail

Toplogy

4. Configuration des routeurs

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

5. Installation Ansible sur le contrôleur

Les machines de contrôle doivent être un hôte Linux / Unix (par exemple, Red Hat Enterprise Linux, Debian, CentOS, OS X, BSD, Ubuntu), et Python 2.6 ou 2.7 est requis (le support Python 3 est disponible en tant que “tech preview” depuis ansible 2.2). Avec une version Windows 10 Pro, il est possible d’utiliser de commander Ansible avec WSL, voir Can Ansible run on Windows?

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
pip install ansible

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

Le logiciel Ansible y est fraîchement installé (avec la libraire python netaddr) avec pip ou à partir de repos.

La station de contrôle offre un service DHCP avec enregistrement dynamique des noms d’hôte dans un serveur DNS (dnsmasq).

En Centos 7 :

hostnamectl set-hostname controller
yum -y remove ansible
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
pip install --upgrade pip
pip install ansible
pip install ansible-lint
pip install netaddr
yum -y install 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 disable systemd-resolved
systemctl stop systemd-resolved
rm -f /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver 1.1.1.1" >> /etc/resolv.conf
chattr +i /etc/resolv.conf
systemctl enable dnsmasq
shutdown -r now

En Ubuntu 18.04 :

hostnamectl set-hostname controller
apt-get update && apt-get -y install python3-pip
pip3 install --upgrade pip
pip3 install ansible
pip3 install ansible-lint
pip3 install netaddr
systemctl disable systemd-resolved
systemctl stop systemd-resolved
rm -f /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver 1.1.1.1" >> /etc/resolv.conf
apt -y install 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/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 11.12.13.1/24
      nameservers:
          addresses: [127.0.0.1, 1.1.1.1]
    eth1:
      dhcp4: yes
EOF
netplan apply
systemctl restart dnsmasq
systemctl enable dnsmasq

6. Fichiers source

Les fichiers sources du support de présentation sont disponible sur https://github.com/goffinet/networking-workshop.

git clone https://github.com/goffinet/networking-workshop