Un réseau privé virtuel est une plage d'adresses que vous réservez chez un fournisseur, et à l'intérieur de laquelle vos machines se parlent sans passer par Internet. Tout le reste, sous-réseaux, routes, pare-feu, se construit dedans. Cette page vous fait créer ce réseau, le découper, et comprendre la distinction public/privé qui est la source de malentendu la plus fréquente du sujet. Le lab se rejoue sans compte cloud ni carte bancaire.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un réseau privé virtuel et le découper en sous-réseaux.
- Comprendre ce qui rend un sous-réseau « public », qui n'est pas ce que son nom laisse croire.
- Répartir vos sous-réseaux sur plusieurs zones sans y perdre en disponibilité.
- Nommer vos ressources pour vous y retrouver dans deux ans.
- Reconnaître l'erreur de chevauchement d'adresses, et la voir échouer en vrai.
Prérequis
Section intitulée « Prérequis »La leçon précédente sur l'adressage et le routage. Pour le lab, une machine Linux et l'émulateur feint installé, ou un compte chez un fournisseur si vous préférez travailler en réel.
Le même objet, six noms
Section intitulée « Le même objet, six noms »Tous les fournisseurs vendent la même chose sous un nom différent. C'est le premier obstacle quand on lit deux documentations en parallèle, et il se lève en une ligne.
| Fournisseur | Le réseau privé | Le découpage interne |
|---|---|---|
| AWS | VPC | Subnet |
| Azure | VNet | Subnet |
| Google Cloud | VPC | Subnetwork |
| OUTSCALE | Net | Subnet |
| OVHcloud | Private Network | Subnet |
| Scaleway | VPC | Private Network |
Une différence de fond se cache derrière cette liste, et elle mérite d'être sue : chez AWS, OUTSCALE et Azure, le réseau est régional et le sous-réseau est attaché à une zone précise. Chez Google Cloud, le sous-réseau est lui-même régional et couvre toutes les zones. Cela change la façon de répartir les machines, comme on le verra plus bas.
Créer le réseau, et le dimensionner une bonne fois
Section intitulée « Créer le réseau, et le dimensionner une bonne fois »Renuméroter un réseau en production est l'une des opérations les plus coûteuses de l'infrastructure cloud, et la décision se prend en trente secondes, souvent sans y penser. Certains fournisseurs permettent d'ajouter une plage secondaire à un réseau existant, ce qui offre une porte de sortie, mais aucun ne permet de changer les adresses déjà attribuées sans toucher aux machines, aux règles de filtrage, aux enregistrements DNS et aux interconnexions. Vérifiez ce que permet votre fournisseur, puis dimensionnez comme si ce n'était pas possible.
Pour un laboratoire ou un premier environnement, un /16 découpé en /24 est
un bon point de départ. Ce dimensionnement ne coûte rien, les adresses privées
étant gratuites, et il laisse 256 sous-réseaux là où vous en utiliserez une
dizaine.
Et surtout, tenez un plan d'adressage écrit, même sommaire, dès le deuxième réseau. Un simple tableau dans le dépôt d'infrastructure suffit.
| Environnement | Plage réservée | Sous-réseaux prévus |
|---|---|---|
| Production | 10.20.0.0/16 | 10.20.1.0/24 public, 10.20.2.0/24 applicatif, 10.20.3.0/24 données |
| Préproduction | 10.30.0.0/16 | même découpage, autre tranche |
| Interconnexion future | 10.40.0.0/16 | réservé, non utilisé |
La troisième ligne est celle qui vous sauvera. Réserver une tranche que vous n'utilisez pas ne coûte rien et garantit qu'un futur VPN ou une future interconnexion trouvera de la place sans chevaucher l'existant.
Public ou privé : ce n'est pas une case à cocher
Section intitulée « Public ou privé : ce n'est pas une case à cocher »Chez AWS et OUTSCALE, un sous-réseau n'est pas « public » par nature : il l'est parce que sa table de routage contient une route vers une passerelle Internet. C'est le point le plus mal compris de ce modèle, et il explique quantité de tickets du type « ma machine a une adresse publique mais ne répond pas ».
Ce modèle est très répandu, et il n'est pas universel. Azure attribue longtemps un accès sortant par défaut et raisonne par groupes de sécurité réseau ; Google Cloud place le routage au niveau du réseau plutôt que du sous-réseau, et une machine sans adresse externe sort par Cloud NAT. Retenez donc l'intention, qui est commune, plutôt que la mécanique : il faut toujours réunir une adresse joignable, un chemin et une autorisation, mais chaque cloud répartit ces trois éléments sur des objets différents.
Reformulé simplement, il y a trois conditions pour qu'une machine soit joignable depuis Internet, et il faut les trois :
- une adresse publique attachée à la machine ;
- une route vers une passerelle Internet dans la table du sous-réseau ;
- une règle de pare-feu qui autorise le trafic entrant sur le port visé.
Enlevez la deuxième, et l'adresse publique ne sert à rien. Enlevez la troisième, et le paquet arrive jusqu'à la machine où il est jeté. Le vocabulaire courant appelle « sous-réseau public » celui qui remplit la deuxième condition, mais rien dans l'objet lui-même ne porte cette propriété.
La conséquence pratique est rassurante : un sous-réseau est privé par défaut. Vous ne l'exposez pas par accident, vous l'exposez en ajoutant une route. C'est l'inverse d'un pare-feu mal configuré, et c'est une bonne nouvelle pour qui débute.
Répartir sur plusieurs zones
Section intitulée « Répartir sur plusieurs zones »Une zone de disponibilité peut tomber ; c'est la raison d'être des autres. Répartir coûte souvent zéro euro de plus en infrastructure, et change tout en cas de panne.
La règle est simple chez AWS, Azure et OUTSCALE : un sous-réseau vit dans une seule zone. Pour couvrir trois zones, il faut donc trois sous-réseaux, avec trois plages distinctes.
| Zone | Sous-réseau public | Sous-réseau applicatif |
|---|---|---|
| Zone A | 10.20.1.0/24 | 10.20.11.0/24 |
| Zone B | 10.20.2.0/24 | 10.20.12.0/24 |
| Zone C | 10.20.3.0/24 | 10.20.13.0/24 |
Chez Google Cloud, le sous-réseau étant régional, un seul suffit pour couvrir les trois zones : vous placez simplement les machines dans des zones différentes. C'est plus simple, et c'est une vraie différence d'architecture, pas un détail de vocabulaire.
Nommer, pour se retrouver dans deux ans
Section intitulée « Nommer, pour se retrouver dans deux ans »Une convention de nommage est une décision de cinq minutes qui vous fait gagner des heures à chaque incident. Sans elle, une console affiche quarante ressources aux noms inventés au fil de l'eau, et personne n'ose rien supprimer.
Une convention qui a fait ses preuves tient en quatre champs :
<environnement>-<rôle>-<zone>-<numéro>, ce qui donne prod-app-a-01 ou
preprod-db-b-02. L'ordre compte : en commençant par l'environnement, le tri
alphabétique regroupe naturellement ce qui va ensemble.
Ajoutez-y des étiquettes, ces couples clé-valeur que tous les fournisseurs proposent. Trois suffisent pour commencer, et elles répondent aux trois questions qu'on se pose devant une ressource inconnue.
| Étiquette | Répond à | Exemple |
|---|---|---|
environnement | Puis-je y toucher sans risque ? | production |
equipe | Qui appelle-t-on ? | paiement |
projet | Qui paie ? | refonte-caisse |
La troisième est celle qui transforme une facture illisible en tableau de répartition par projet. Sans elle, la question « combien nous coûte la refonte » n'a pas de réponse.
Lab : créer un réseau sans compte cloud
Section intitulée « Lab : créer un réseau sans compte cloud »Ce lab se joue sur l'émulateur feint, qui sert les API en local. Aucune ressource n'est créée chez un fournisseur, aucune facture n'est émise, et vous pouvez tout casser sans conséquence.
-
Démarrer l'émulateur
Fenêtre de terminal feint serveLaissez ce terminal ouvert et travaillez dans un second.
-
Configurer le client officiel
Fenêtre de terminal eval "$(feint env scaleway)"Cette commande exporte l'adresse de l'émulateur et des identifiants factices dans votre terminal. Le CLI
scwofficiel n'y voit que du feu. -
Créer le réseau privé virtuel
Fenêtre de terminal scw vpc vpc create name=lab-reseauID b1269474-d962-4a37-b252-2f3ef9565a93Name lab-reseauOrganizationID 99999999-9999-4999-8999-999999999999ProjectID 11111111-1111-1111-1111-111111111111Region fr-parIsDefault falseNotez l'identifiant, la commande suivante en a besoin.
-
Créer deux sous-réseaux avec des plages distinctes
Fenêtre de terminal scw vpc private-network create name=lab-public vpc-id=<ID_DU_VPC> subnets.0=10.20.1.0/24scw vpc private-network create name=lab-prive vpc-id=<ID_DU_VPC> subnets.0=10.20.2.0/24 -
Provoquer volontairement l'erreur de chevauchement
Fenêtre de terminal scw vpc private-network create name=lab-doublon vpc-id=<ID_DU_VPC> subnets.0=10.20.1.0/24Invalid arguments 'subnets'Details:- 'subnets' does not respect constraintsHint:Subnet 10.20.1.0/24 overlaps 10.20.1.0/24Voilà le message. Il est explicite ici parce que le conflit est interne au même réseau ; entre deux réseaux distincts que l'on cherche à interconnecter, l'erreur arrive beaucoup plus tard et beaucoup moins clairement.
-
Relire ce que vous avez construit
Fenêtre de terminal scw vpc private-network listlab-public 10.20.1.0/24, fdba:fde8:9c04:f111::/64lab-prive 10.20.2.0/24, fdba:fde8:9c04:20a4::/64
Cette double surface explique pourquoi la manipulation qui suit reste un exercice d'API. Créer un découpage et lire les messages d'erreur enseigne le vocabulaire et les contraintes du fournisseur ; cela ne remplace pas l'observation du trafic réel, et il vaut mieux savoir précisément ce que l'exercice démontre avant d'en tirer des conclusions.
À retenir
Section intitulée « À retenir »- Le réseau privé virtuel, c'est le même objet partout, sous six noms différents. Retenez l'objet, pas le nom.
- La plage du réseau ne se change plus après création. Prévoyez un
/16, découpez en/24, et réservez une tranche pour l'avenir. - Deux réseaux qui se chevauchent ne seront jamais interconnectables. C'est l'erreur qui impose une renumérotation.
- Chez AWS et OUTSCALE, un sous-réseau est public par sa route, pas par une case à cocher. Ailleurs les primitives diffèrent, mais les trois conditions restent : adresse joignable, chemin, autorisation.
- Un sous-réseau vit dans une zone chez AWS, Azure et OUTSCALE ; il est régional chez Google Cloud.
- Le trafic entre zones est facturé et la passerelle NAT est facturée par zone : répartissez ce qui doit survivre, pas tout.
- Nommez et étiquetez dès la première ressource, sinon la facture restera illisible.