Creer un réseau privé avec Gandi CLI (VLAN)

Créez un réseau privé pour faire communiquer vos applications et base de donnée au moyen de GandiCLI, et adapter les performances à leur croissance.

Introduction

L'objectif de ce tutoriel est de vous aider à créer votre premier réseau privé en utilisant Gand CLI.

On considère donc que nous avons un serveur utilisé par notre applicatif et notre système de gestion de base de donnée. Notre application grossit, la charge aussi, et certaines limites du serveur sont atteintes. Nous décidons donc de déporter le service de gestion de base de donnée, de le séparer du serveur applicatif.

De cette manière, nous pourrons par exemple avoir plusieurs instances de notre application se connectant à la même base de donnée, chacune pouvant avoir ses ressources modifiées au besoin indépendamment. Pour cela, créons un nouveau serveur pour accueillir le SGBD, connecté à un réseau privé auquel seuls nos serveurs applicatifs peuvent se connecter.

Nous allons commencer par créer le réseau privé, auquel on associera notre serveur, qui jouera d'ailleurs le rôle de passerelle pour le besoin de ce tutoriel.

Ensuite, on créera un nouveau serveur (SGBD) que nous associerons aussi à réseau privé. Afin de tester la connectivité de bout en bout à chaque étape, on définira aussi une stratégie d'accès SSH', ce qui nous permettra de nous assurer que tout fonctionne comme voulu. Vous trouverez à propos des liens utiles à la fin de ce tuto, si vous souhaitez continuer votre architecture, ou approfondir certains points.

Etape 1 - Création du réseau privé

Here are some of the aspects we'll have to take into consideration: Considérons d'abord quelques aspects essentiels :

  • Il est nécessaire de définir un plan d'adressage cohérent
  • Toutes les VM et le réseau doivent être localisés sur le même Centre de données
  • On ne peut pas accéder directement à une VM uniquement reliée au réseau privé. Il faudra donc se connecter à une autre machine disposant d'une ip publique comme machine de rebond (à condition qu'elle ai une interface dans le réseau privé donc).
$ gandi vlan create --name mynetwork --datacenter LU \
--subnet 192.168.0.0/24 \
--gateway 192.168.0.10

Nous avons choisi le réseau 192.168.0.0 avec un masque à 24 bits, ce qui signifie que toutes nos adresses de machines seront des variations du dernier octet. C'est à dire, de la forme 192.168.0.1, 192.168.0.2, 192.168.0.3 jusqu'à “192.168.0.254”.

Nous avons aussi choisi comme adresse de passerelle “192.168.0.10”. Donc notre serveur applicatif accédera à Internet par le biais de son ip publique, et jouera le rôle de passerelle vers l'extérieur pour les machines du réseau privé (même s'il ne s'agit que d'accéder aux miroirs de paquets Gandi).

Vous trouverez plus d'informations sur le fonctionnement des VLAN chez Gandi ici :
Les réseaux privés.

Etape 2 - définir une stratégie d'accès

Attention, actuellement vous ne pouvez pas utiliser la console d'urgence sur des serveur n'ayant pas d'interface réseau publique. Il vous faut donc vous assurer que votre configuration SSH est correcte.

Les serveurs n'étant accessible qu'au travers du réseau privé (n'ayant donc qu'une interface réseau privée) ne peuvent être joints que par le biais d'un serveur passerelle ayant lui une interface et donc une adresse ip publique.

On utilisera donc notre serveur applicatif pour se connecter au serveur de gestion de base de donnée via SSH. Pour cela, il est nécessaire de définir la méthode d'authentification qui sera utilisée : mot de passe ou clé SSH.

La méthode d'authentification par clé SSH est en générale privilégiée, car plus sécurisée et plus pratique. C'est celle que nous allons choisir.
Donc, il faut placer notre clé publique sur les serveurs, et disposer de la clé privée associée sur notre poste de travail.

On recommande d'utiliser le transfert de connexion de l'agent d'authentification (SSH Agent Forwarding) pour l'authentification sur la passerelle.

$ gandi vm info appserver01

La commande ci-dessus vous permettra d'obtenir l'adresse ip de votre serveur qui sera utilisée pour configurer votre agent SSH.

L'idée est d'autoriser la connexion par clé depuis 'appserver01' pour accéder aux serveurs privés, sans avoir à y copier votre clé privée
Assurez vous juste d'utiliser le transfert de connexion SSH dans la configuration de votre client, et d'y avoir ajouté votre clé privée.

$ vim ~/.ssh/config
# Ajoutez l'entrée suivante à la configuration de votre client SSH
Host appserver01 <ip of appserver01>
IdentityFile </path/to/your/key>
ForwardAgent yes

$ ssh-add -c </path/to/your/key>

Vous pouvez désormais utiliser la commande suivante
ssh -A root@<ip of appserver01>
l'option -A spécifie l'activation du transfert d'agent sur cette session. Il est nécessaire d'associer votre clé privée donc.

Etape 3 - Configurer et associer la passerelle

Pour qu'un serveur puisse être relié à un réseau privé, il faut créer une interface privée et l'attacher à ce serveur.

$ gandi ip create --vlan mynetwork --ip 192.168.0.10 --attach appserver01

Parfait ! Maintenant notre serveur possède 2 interfaces : une publique et une privée, le reliant à notre VLAN. Lors de la création du VLAN, nous utiliserons cette ip comme adresse de passerelle. Dans notre scénario, ce serveur pourra être amener à être modifié, il sera probablement plus judicieux d'utiliser un serveur dédié à la supervision par exemple, comme serveur de rebond/passerelle.

Maintenant, pour terminer la configuration de cette passerelle, il faut activer le relais IP et la translation d'adresse (NAT: Network Address Translation).
Par exemple, sur Debian/Ubuntu, vous pouvez utiliser les commandes suivantes :

local $> gandi vm ssh appserver01

# Activer le relais d'ip
appserver01 #> cp /etc/gandi/sysctl.conf /etc/sysctl.d/gandi
appserver01 #> vim /etc/sysctl.d/gandi 
# Définissez les paramètres suivants dans le fichier  /etc/sysctl.d/gandi 
# net.ipv4.ip_forward = 0
net.ipv4.ip_forward = 1

appserver01 #> vim /etc/default/gandi
# Passez cette directive à 0 pour éviter la modification des paramètres précedents au démarrage
CONFIG_SYSCTL=0

appserver01 #> /etc/init.d/networking restart

# Utilisez iptables pour mettre en place le NAT
appserver01 #> apt-get install iptables
appserver01 #> iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

Cette configuration permet donc aux serveurs privés d'envoyer leurs requêtes à cette machine pour accéder à l'extérieur, comme par exemple pour joindre les miroirs et effectuer des installations ou mises à jours de paquets.
Maintenant, continuons et créons un nouveau serveur pour notre SGBD et associons le à notre VLAN avec l'ip de notre choix (inclue dans le sous réseau du VLAN, bien entendu).

Etape 4 - Créer un nouveau serveur, et l'associer au réseau privé

$ gandi vm create --name dbserver01 --datacenter LU \
--vlan "mynetwork" --ip 192.168.0.9 \
--sshkey </path/to/your/key>

Avec cette simple commande, on crée un nouveau serveur, et on l'associe au VLAN, avec l'ip '192.168.0.9' (faisant partie du réseau 192.168.0.0/24).

Une fois que notre nouveau serveur SGBD sera fonctionnel, nous pourrons nous y connecter via 'appserver01', notre machine ayant deux interfaces réseau.

Etape 5 - Finalisation de la configuration

Maintenant, nous pouvons nous connecter au serveur public, et joindre nos machines privées par son biais.

local $> gandi vm ssh appserver01 -- -A

appserver01 #> ssh root@192.168.0.9

dbserver01 #> # nous sommes connectés au serveur privé

Vous devez maintenant vous assurer que votre ip privée est configurée correctement et que vous utilisez effectivement votre serveur public comme passerelle.

dbserver01 #> ping gandi.net # devrait fonctionner

Si vous n'avez pas l'accès à Internet, il vous faudra peut être ajouter une route ou l'adresse de passerelle à la configuration de votre interface.

dbserver01 #> route add default gw 192.168.0.10

dbserver01 #> ping gandi.net # Là, ca devrait vraiment fonctionner !

Et voilà. Vous pouvez maintenant poursuivre, et configurer votre SGBD et potentiellement multiplier les serveurs applicatifs qui s'y connectent. Tout ce que vous aurez alors à faire sera de les intégrer au réseau privé en utilisant les commandes vues précédemment.

Pour aller plus loin

Dernière modification: le 02/02/2015 à 08:21 par Yann A. (Gandi)