Créer un réseau local de VE OpenVZ avec accès à Internet sans IP publique
Cachez ces serveurs que je ne saurais voir
Tous les serveurs n'ont pas besoin d'être accessibles directement depuis Internet. C'est le rôle dédié aux frontaux et autres passerelles.
Exposer un serveur Web ou un proxy a du sens, alors qu'un serveur de données a rarement besoin d'être publique. De plus, les adresses IP publiques sont payantes.
Rien de plus simple que de créer un réseau de machines virtuelles locales ou publiques sous OpenVZ.
Cachez ce qui doit être caché
Dans cet exemple, nous allons créer 3 machines :
- un frontal avec une adresse IP publique et une adresse IP locale
- deux serveurs avec seulement des adresses IP locales
Pour les néophytes, une adresse IP publique est visible depuis Internet alors qu'une adresse IP locale est inaccessible depuis Internet. Pour en savoir plus : public IP adress
Le pré-requis est de posséder une machine hôte avec un noyau Linux OpenVZ. Pour en savoir plus sur OpenVZ.
Créez les machines virtuelles
Ouvrez une console sur la machine hôte et exécutez les commandes qui suivent.
Créez le serveur frontal avec une adresse publique et une adresse locale :
# vzctl create 101 --hostname public1 --ostemplate ubuntu-9.04-x86 --ipadd 192.168.0.101
# vzctl set 101 --ipadd mon_adresse_IP_publique --nameserver mon_DNS --save
où mon_adresse_IP_publique doit être remplacé par une adresse IP publique qui vous appartient et mon_DNS par un DNS accessible pour cette machine.
Créez les deux serveurs avec seulement des adresses IP locales :
# vzctl create 201 --hostname local1 --ostemplate ubuntu-9.04-x86 --ipadd 192.168.0.201
# vzctl create 202 --hostname local2 --ostemplate ubuntu-9.04-x86 --ipadd 192.168.0.202
Ces deux machines sont inaccessibles depuis Internet puisque qu'il n'y a pas de chemin pour atteindre les adresses locales. Pour y accéder, l'utilisateur devra passer par un service géré par le serveur hôte.
Démarrez les serveurs :
# vzctl start 101
# vzctl start 201
# vzctl start 202
Testez le réseau depuis l'hôte
Vérifiez que l'hôte est accès à toutes ces machines.
# ping -c 1 -n 192.168.0.101
PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data.
64 bytes from 192.168.0.101: icmp_seq=1 ttl=64 time=0.034 ms
--- 192.168.0.101 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.034/0.034/0.034/0.000 ms
De même pour les autres adresses :
# ping -c 1 -n 192.168.0.201
# ping -c 1 -n 192.168.0.202
# ping -c 1 -n <mon adresse IP publique>
Autorisez le forwarding et le masquering sur l'hôte
Par défaut, les machines virtuelles locales n'accèdent pas à Internet.
Pour ce faire, le serveur hôte doit autoriser le transfert des paquets réseaux entre Interet et celle-ci via son interface réseau. Les machines virtuelles auront alors accès au reste du réseau.
Toute l'activité réseau semblera venir de l'hôte, avec son adresse IP.
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Testez l'accès à Internet des machines virtuelles
# vzctl exec 101 ping -c 1 -n google.com
PING google.com (74.125.67.100) 56(84) bytes of data.
64 bytes from 74.125.67.100: icmp_seq=1 ttl=54 time=95.0 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 95.011/95.011/95.011/0.000 ms
Les autres machines virtuelles doivent retourner un résultat similaire avec les commandes suivantes :
# vzctl exec 201 ping -c 1 -n google.com
# vzctl exec 202 ping -c 1 -n google.com
Testez le réseau entre les machines virtuelles
# vzctl exec 101 ping -c 1 -n 192.168.0.201
# vzctl exec 101 ping -c 1 -n 192.168.0.202
# vzctl exec 202 ping -c 1 -n 192.168.0.101
# vzctl exec 202 ping -c 1 -n 192.168.0.201
# vzctl exec 201 ping -c 1 -n 192.168.0.101
# vzctl exec 201 ping -c 1 -n 192.168.0.202
Voir la configuration réseau des machines virtuelles
ifconfig va vous permettre de voir la différence entre la configuration réseau d'une machine virtuelle qui a seulement une adresse locale :
# vzctl exec 202 ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:336 (336.0 B) TX bytes:336 (336.0 B)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2236 (2.2 KB) TX bytes:3064 (3.0 KB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.0.202 P-t-P:192.168.0.202 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
et la machine virtuelle qui a une adresse IP locale et une adresse IP publique :
# vzctl exec 101 ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:417306 errors:0 dropped:0 overruns:0 frame:0
TX packets:417306 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:238302810 (238.3 MB) TX bytes:238302810 (238.3 MB)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: ::1/128 Scope:Host
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:2646027 errors:0 dropped:0 overruns:0 frame:0
TX packets:2545726 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:335743962 (335.7 MB) TX bytes:1884848792 (1.8 GB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:<IP publique> P-t-P:<IP publique> Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
venet0:1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.0.101 P-t-P:192.168.0.101 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
La 2ème machine a deux adresses IP, dont l'adresse IP publique accessible directement depuis Internet.
Voilà. Vous avez un réseau de 3 machines virtuelles communiquant entre-elles.
La machine virtuelle 101 est accessible depuis Internet grâce à son adresse publique. Elle peut être utilisé pour héberger un serveur proxy Web, alors que les deux machines virtuelles privées peuvent héberger un serveur d'application ou une base de données.
Faiblesse du système
La sécurité des machines locales dépend de celle de la passerelle.
Si la passerelle est compromise, les attaquants accédent au réseau local. Ajoutez un firewall sur l'ensemble des machines pour limiter les dégats, ne stockez aucun mot de passe en clair.
La sécurité des VPS OpenVZ dépend de la machine hôte.
Si la machine hôte est compromise, toutes les machines virtuelles le sont. Sécurisez la machine hôte et surveillez les tentatives d'intrusion pour pouvoir intervenir au plus tôt.
- Ajouter un commentaire
- 3225 lectures


