Ansible hat sich in der IT-Automatisierung als ein starkes und vielseitiges Werkzeug etabliert. Neben der Verwaltung von Servern und virtuellen Maschinen ist Ansible auch hervorragend geeignet, um Netzwerkkomponenten wie Router, Switches, Firewalls und andere Geräte zu konfigurieren. In diesem Blog-Beitrag zeige ich, wie du mit Ansible die Netzwerkinfrastruktur automatisieren und konfigurieren kannst. Dies spart nicht nur Zeit, sondern reduziert auch menschliche Fehler bei der Verwaltung komplexer Netzwerke.
Warum Ansible für die Netzwerkkonfiguration?
Ansible ist eine agentenlose Lösung, was bedeutet, dass keine zusätzliche Software auf den Netzwerkgeräten installiert werden muss. Stattdessen kommuniziert Ansible über Standardprotokolle wie SSH oder API mit den Geräten. Dies macht es besonders nützlich in heterogenen Netzwerken, in denen Geräte von verschiedenen Anbietern wie Cisco, Juniper, Arista, F5 und anderen verwendet werden.
Einige der Vorteile von Ansible für die Netzwerkkonfiguration:
- Agentenlos: Keine zusätzliche Software auf den Netzwerkgeräten notwendig.
- Multi-Vendor-Unterstützung: Unterstützung für eine Vielzahl von Netzwerkherstellern.
- Idempotenz: Ansible sorgt dafür, dass Konfigurationen nur dann geändert werden, wenn sie nicht mit der Zielkonfiguration übereinstimmen.
- Einfache Syntax: Die Playbooks sind in YAML geschrieben, was eine klare und verständliche Darstellung der Konfigurationen ermöglicht.
Voraussetzungen
Bevor wir beginnen, benötigen wir einige grundlegende Anforderungen:
- Ansible-Steuerknoten: Ansible wird auf einem Linux-Steuerknoten ausgeführt.
- Netzwerkgeräte mit SSH oder API: Netzwerkgeräte müssen SSH oder eine API (z. B. REST oder NETCONF) unterstützen, um mit Ansible zu kommunizieren.
- Ansible Network Collections: Ansible verwendet spezifische Sammlungen (Collections), um mit Netzwerkgeräten verschiedener Hersteller zu interagieren.
Installation der Ansible Network Collections
Ansible stellt Network Collections bereit, die speziell für die Automatisierung von Netzwerkgeräten entwickelt wurden. Um die notwendigen Sammlungen zu installieren, kannst du den folgenden Befehl verwenden:
ansible-galaxy collection install cisco.ios ansible.netcommon
In diesem Beispiel installieren wir die cisco.ios
-Collection, die für die Verwaltung von Cisco IOS-Geräten verwendet wird. Die Collection ansible.netcommon
bietet allgemeine Netzwerkmodule, die für verschiedene Geräte verwendet werden können.
Beispiel: Konfiguration eines Cisco-IOS-Routers
In diesem Abschnitt konfigurieren wir einen Cisco-IOS-Router mithilfe von Ansible. Dabei werden wir eine grundlegende Konfiguration vornehmen, um das Gerät zu initialisieren, Netzwerkschnittstellen zu konfigurieren und Routing-Protokolle zu aktivieren.
Inventory-Datei für Netzwerkgeräte
In der inventory
-Datei definieren wir die Netzwerkgeräte, die wir konfigurieren möchten. Im Gegensatz zu Servern verwenden wir die Gruppe network
:
[network]
router01 ansible_host=192.168.1.1 ansible_network_os=cisco.ios ansible_user=cisco ansible_password=cisco ansible_become=yes
In dieser Datei wird festgelegt:
ansible_host
: Die IP-Adresse des Routers.ansible_network_os
: Das Betriebssystem des Netzwerkgeräts (hier Cisco IOS).ansible_user
undansible_password
: Die Anmeldeinformationen für das Gerät.ansible_become=yes
: Wechselt in den privilegierten Modus (enable mode).
Einfaches Playbook für Cisco-IOS-Konfiguration
Nun erstellen wir ein Playbook, um grundlegende Konfigurationen auf dem Router vorzunehmen. Erstelle eine Datei namens router_config.yml
mit folgendem Inhalt:
---
- name: Konfiguriere Cisco IOS Router
hosts: network
gather_facts: no
tasks:
- name: Setze den Hostnamen
cisco.ios.ios_config:
lines:
- hostname Router01
- name: Konfiguriere Loopback-Schnittstelle
cisco.ios.ios_config:
lines:
- interface Loopback0
- ip address 192.168.10.1 255.255.255.0
- name: Setze statische Route
cisco.ios.ios_config:
lines:
- ip route 0.0.0.0 0.0.0.0 192.168.1.254
Erklärung der Aufgaben:
- Setze den Hostnamen: Mit dem Modul
ios_config
können wir Konfigurationsbefehle auf einem Cisco-IOS-Gerät ausführen. In diesem Fall setzen wir den Hostnamen des Routers auf „Router01“. - Konfiguriere Loopback-Schnittstelle: Die
Loopback0
-Schnittstelle wird konfiguriert und mit einer IP-Adresse versehen. - Setze statische Route: Wir konfigurieren eine statische Route, um den gesamten Verkehr über das Gateway
192.168.1.254
zu routen.
Playbook ausführen
Um das Playbook auszuführen, verwende folgenden Befehl:
ansible-playbook -i inventory router_config.yml
Wenn alles korrekt eingerichtet ist, wird Ansible die Konfiguration auf dem Cisco-Router vornehmen.
Fortgeschrittenes Netzwerk-Playbook: VLAN-Konfiguration
Nun schauen wir uns ein fortgeschritteneres Szenario an: die Konfiguration von VLANs auf einem Netzwerk-Switch. In diesem Beispiel konfigurieren wir ein VLAN und fügen es zu einer bestimmten Schnittstelle hinzu.
Beispiel-Playbook zur VLAN-Konfiguration auf einem Cisco-Switch
---
- name: Konfiguriere VLAN auf einem Cisco-Switch
hosts: network
gather_facts: no
tasks:
- name: Erstelle VLAN 10
cisco.ios.ios_config:
lines:
- vlan 10
- name Management
- name: Weise VLAN zu einer Schnittstelle zu
cisco.ios.ios_config:
lines:
- interface GigabitEthernet1/0/1
- switchport mode access
- switchport access vlan 10
Erklärung:
- Erstelle VLAN 10: Wir erstellen ein VLAN mit der ID 10 und weisen ihm den Namen „Management“ zu.
- Weise VLAN zu einer Schnittstelle zu: Wir konfigurieren die Schnittstelle
GigabitEthernet1/0/1
als Access-Port und ordnen ihr das VLAN 10 zu.
Dieses Playbook kann verwendet werden, um VLANs auf einem Cisco-Switch zu erstellen und zu konfigurieren.
Weitere Netzwerkmodule in Ansible
Ansible bietet eine Vielzahl von Modulen für verschiedene Netzwerkgeräte und Aufgaben. Hier eine Auswahl nützlicher Module für die Netzwerkkonfiguration:
ios_command
: Führt beliebige Befehle auf Cisco IOS-Geräten aus.ios_facts
: Sammelt Fakten und Statusinformationen von Cisco IOS-Geräten.nxos_config
: Konfiguriert Cisco NX-OS-Geräte.juniper_junos_config
: Konfiguriert Juniper-JUNOS-Geräte.vyos_config
: Konfiguriert VyOS-Router.
Diese Module decken eine Vielzahl von Geräten und Herstellern ab und ermöglichen eine flexible Automatisierung der Netzwerkinfrastruktur.
Tipps zur Netzwerkkonfiguration mit Ansible
- Verwende
gather_facts: no
: Standardmäßig sammelt Ansible Fakten von den Hosts. Bei Netzwerkgeräten ist dies oft nicht notwendig, daher solltest du dies deaktivieren, um die Ausführungszeit zu reduzieren. - Konfigurationsänderungen testen: Verwende die
check_mode
-Option, um Konfigurationsänderungen zu testen, bevor du sie anwendest. Dies ermöglicht es dir, sicherzustellen, dass die Änderungen wie erwartet funktionieren, ohne die Netzwerkkonfiguration sofort zu ändern. - Backups erstellen: Es ist ratsam, vor der Anwendung von Änderungen ein Backup der aktuellen Konfiguration zu erstellen. Du kannst das Modul
ios_command
verwenden, um die laufende Konfiguration zu sichern.
- name: Erstelle ein Backup der Konfiguration
cisco.ios.ios_command:
commands: show running-config
register: running_config
- name: Speichere die Konfiguration in einer Datei
copy:
content: "{{ running_config.stdout[0] }}"
dest: "/backups/router01_running_config.txt"
Fazit
Ansible bietet eine flexible und leistungsstarke Möglichkeit zur Automatisierung und Verwaltung von Netzwerkkomponenten. Durch die Verwendung von spezifischen Netzwerkmodulen und der Agentenlosigkeit wird die Verwaltung von Netzwerkgeräten einfacher und effizienter. Egal, ob du Router, Switches oder Firewalls verwalten möchtest – Ansible ermöglicht eine einfache und wiederholbare Netzwerkkonfiguration.
Durch die Kombination von Ansible mit Netzwerk-Playbooks kannst du Aufgaben wie die VLAN-Konfiguration, Routing, Firmware-Upgrades und vieles mehr automatisieren, was zu einer robusteren und effizienteren Netzwerkinfrastruktur führt.