Configuration de Netplan
Vue d'ensemble
OmniCore peut configurer automatiquement les interfaces réseau sur les VMs déployées en utilisant netplan. Cela est utile pour :
- Configurer l'interface de gestion principale (eth0)
- Ajouter des interfaces secondaires pour des IP publiques, des connexions de peering ou du trafic dédié
- Configurer des routes statiques pour des destinations spécifiques
Activation de la Configuration Netplan
Pour activer la configuration automatique de netplan pour un hôte, ajoutez la variable netplan_config pointant vers un modèle Jinja2 dans votre dossier group_vars :
dra:
hosts:
<hostname>:
ansible_host: 10.0.1.100
gateway: 10.0.1.1
netplan_config: netplan.yaml.j2
Le modèle sera récupéré depuis hosts/<customer>/group_vars/netplan.yaml.j2.
Référence du Modèle
Voici le modèle complet netplan.yaml.j2 avec des commentaires expliquant chaque section :
network:
version: 2
ethernets:
# Interface principale - utilise ansible_host et gateway de l'inventaire
eth0:
addresses:
- "{{ ansible_host }}/{{ mask_cidr | default(24) }}"
nameservers:
addresses:
{% if 'dns' in group_names %}
# Si cet hôte EST un serveur DNS, utilisez un DNS externe pour éviter une dépendance circulaire
- 8.8.8.8
{% else %}
# Sinon, utilisez les serveurs DNS du groupe 'dns' dans l'inventaire
{% for dns_host in groups['dns'] | default([]) %}
- {{ hostvars[dns_host]['ansible_host'] }}
{% endfor %}
{% endif %}
search:
- slice
routes:
- to: "default"
via: "{{ gateway }}"
{% if secondary_ips is defined %}
# Interfaces secondaires - boucle à travers le dictionnaire secondary_ips de l'inventaire
# Nommage des interfaces : ens19, ens20, ens21... (18 + loop.index)
{% for nic_name, nic_config in secondary_ips.items() %}
ens{{ 18 + loop.index }}:
addresses:
- "{{ nic_config.ip_address }}/{{ mask_cidr | default(24) }}"
{% if nic_config.routes is defined %}
# Routes statiques pour cette interface - chaque route utilise la passerelle de cette interface
routes:
{% for route in nic_config.routes %}
- to: "{{ route }}"
via: "{{ nic_config.gateway }}"
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
Points clés :
ansible_hostetgatewayproviennent de l'entrée d'inventaire de l'hôte- Les serveurs DNS sont extraits dynamiquement des hôtes dans le groupe
dns - Les interfaces secondaires sont nommées
ens19,ens20, etc. pour correspondre à la nomenclature des NIC Proxmox - Chaque IP secondaire peut avoir sa propre passerelle et des routes statiques
Configuration de l'Interface Principale
L'interface principale (eth0) est configurée automatiquement en utilisant :
ansible_host- L'adresse IPgateway- La passerelle par défautmask_cidr- Masque réseau (par défaut 24)
Les serveurs DNS sont automatiquement définis sur :
- Hôtes dans le groupe
dns(utilise leurs IPansible_host) - Revertit à
8.8.8.8si l'hôte est lui-même un serveur DNS
Interfaces Secondaires
Pour les hôtes nécessitant des interfaces réseau supplémentaires (IP publiques, peering, etc.), utilisez la configuration secondary_ips.
Schéma
secondary_ips:
<logical_name>:
ip_address: <ip_address>
gateway: <gateway_ip>
host_vm_network: <proxmox_bridge>
vlanid: <vlan_id>
routes: # Optionnel - routes statiques via cette interface
- '<destination_cidr>'
- '<destination_cidr>'
Nommage des Interfaces
Les interfaces secondaires sont automatiquement nommées en utilisant le schéma de nommage prévisible d'Ubuntu :
- Première interface secondaire :
ens19 - Deuxième interface secondaire :
ens20 - Troisième interface secondaire :
ens21 - Et ainsi de suite...
Cela correspond aux noms d'interface attribués par Proxmox lors de l'ajout de NIC supplémentaires à une VM.
Exemple de Configuration
dra:
hosts:
<hostname>:
ansible_host: 10.0.1.100
gateway: 10.0.1.1
host_vm_network: "ovsbr1"
vlanid: "100"
netplan_config: netplan.yaml.j2
secondary_ips:
public_ip:
ip_address: 192.0.2.50
gateway: 192.0.2.1
host_vm_network: "vmbr0"
vlanid: "200"
routes:
- '198.51.100.0/24'
- '203.0.113.0/24'
peering_ip:
ip_address: 172.16.50.10
gateway: 172.16.50.1
host_vm_network: "ovsbr2"
vlanid: "300"
routes:
- '172.17.0.0/16'
Sortie Netplan Générée
La configuration ci-dessus génère :
network:
version: 2
ethernets:
eth0:
addresses:
- "10.0.1.100/24"
nameservers:
addresses:
- 10.0.1.53
search:
- slice
routes:
- to: "default"
via: "10.0.1.1"
ens19:
addresses:
- "192.0.2.50/24"
routes:
- to: "198.51.100.0/24"
via: "192.0.2.1"
- to: "203.0.113.0/24"
via: "192.0.2.1"
ens20:
addresses:
- "172.16.50.10/24"
routes:
- to: "172.17.0.0/16"
via: "172.16.50.1"
Intégration Proxmox
Lors de l'utilisation du playbook proxmox.yml, les NIC secondaires sont automatiquement créées sur la VM :
- Nouvelles VMs : Les NIC secondaires sont ajoutées lors du provisionnement initial
- VMs Existantes : Les NIC secondaires sont ajoutées et la VM est redémarrée pour appliquer les changements
La configuration Proxmox utilise :
host_vm_network- Le pont auquel attacher la NICvlanid- Tag VLAN pour l'interface
Comment Ça Marche
- Les variables du fichier d'hôtes sont passées au modèle Jinja2
- Le modèle est rendu dans
/etc/netplan/01-netcfg.yaml - Toute configuration netplan existante est supprimée pour éviter les conflits
netplan applyactive la configuration- Les adresses IP sont vérifiées avec
ip addr show
Cas d'utilisation Courants
Diameter Edge Agent (DEA) avec IP Publique
<hostname>:
ansible_host: 10.0.1.100 # IP de gestion interne
gateway: 10.0.1.1
netplan_config: netplan.yaml.j2
secondary_ips:
diameter_roaming:
ip_address: 192.0.2.50 # IP publique pour les partenaires de roaming
gateway: 192.0.2.1
host_vm_network: "vmbr0"
vlanid: "200"
routes:
- '198.51.100.0/24' # Réseau des partenaires de roaming
PGW avec Interface S5/S8
<hostname>:
ansible_host: 10.0.2.20 # IP interne
gateway: 10.0.2.1
netplan_config: netplan.yaml.j2
secondary_ips:
s5s8_interface:
ip_address: 203.0.113.17 # IP publique S5/S8
gateway: 203.0.113.1
host_vm_network: "vmbr0"
vlanid: "50"
Serveur Multi-hébergé avec Réseaux de Gestion et de Données Séparés
<hostname>:
ansible_host: 10.0.1.100 # Réseau de gestion
gateway: 10.0.1.1
netplan_config: netplan.yaml.j2
secondary_ips:
data_network:
ip_address: 10.0.2.100 # Réseau de données
gateway: 10.0.2.1
host_vm_network: "ovsbr2"
vlanid: "200"
backup_network:
ip_address: 10.0.3.100 # Réseau de sauvegarde
gateway: 10.0.3.1
host_vm_network: "ovsbr3"
vlanid: "300"
Référencement des IPs Secondaires dans les Modèles
Vous pouvez référencer les adresses IP secondaires dans d'autres modèles Jinja2 et fichiers de configuration.
Sur le Même Hôte
Lors de la configuration d'un service sur le même hôte qui a des IP secondaires, vous pouvez référencer directement ou utiliser inventory_hostname :
# Référence directe (la plus simple)
{{ secondary_ips.diameter_public_ip.ip_address }}
# Ou explicitement via inventory_hostname (même résultat)
{{ hostvars[inventory_hostname]['secondary_ips']['diameter_public_ip']['ip_address'] }}
# Accéder à d'autres propriétés
{{ secondary_ips.diameter_public_ip.gateway }}
{{ secondary_ips.diameter_public_ip.vlanid }}
D'un Autre Hôte
Lorsque vous devez référencer une IP secondaire d'un autre hôte (par exemple, configurer une connexion de pair), utilisez hostvars avec le nom d'hôte cible :
# Référence du premier hôte dans le groupe dra
{{ hostvars[groups['dra'][0]]['secondary_ips']['diameter_public_ip']['ip_address'] }}
# Boucle à travers tous les hôtes DRA et obtenez leurs IP publiques
{% for host in groups['dra'] %}
{% if hostvars[host]['secondary_ips'] is defined %}
- {{ hostvars[host]['secondary_ips']['diameter_public_ip']['ip_address'] }}
{% endif %}
{% endfor %}
Exemple : Configuration de Pair DRA
Configurer un pair de diamètre pour se lier à sa propre IP publique :
# Dans dra_config.yaml.j2 - utilisez inventory_hostname pour l'hôte actuel
peers:
- name: external_peer
# Lier à l'IP publique de diamètre de cet hôte
local_ip: {{ hostvars[inventory_hostname]['secondary_ips']['diameter_public_ip']['ip_address'] }}
remote_ip: 198.51.100.50
port: 3868
Vérification de l'Existence des IPs Secondaires
Vérifiez toujours si la variable existe avant de l'utiliser :
{% if secondary_ips is defined and secondary_ips.diameter_public_ip is defined %}
public_ip: {{ secondary_ips.diameter_public_ip.ip_address }}
{% else %}
public_ip: {{ ansible_host }}
{% endif %}
Dépannage
Vérifier les Noms des Interfaces
SSH sur la VM et vérifiez les noms des interfaces :
ip link show
Sortie attendue pour une VM avec deux interfaces secondaires :
1: lo: <LOOPBACK,UP,LOWER_UP> ...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
4: ens20: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
Vérifier la Configuration de Netplan
cat /etc/netplan/01-netcfg.yaml
Appliquer Netplan Manuellement
netplan apply
Déboguer Netplan
netplan --debug apply
Vérifier les Routes
ip route show
Documentation Connexe
- Configuration du Fichier Hosts - Configuration de l'inventaire des hôtes
- Déploiement Proxmox VM/LXC - Provisionnement de VM
- Référence de Configuration - Toutes les variables de configuration