N2N est une application VPN open source de couche 2/3. Contrairement à de nombreux autres programmes VPN, N2N peut connecter des ordinateurs situés derrière un routeur NAT. Cela offre un énorme avantage pour se connecter à un environnement cloud sans avoir à s'appuyer sur des protocoles spéciaux tels que le protocole ESP (utilisé par ipsec). Pour réaliser cette connexion, N2N utilise un supernœud qui peut acheminer les informations entre les nœuds NAT. Cette connexion VPN peut être utilisée pour connecter plusieurs instances Vultr à travers les régions ensemble.
Conditions préalables
- Trois instances de serveur Ubuntu 16.04 LTS x64. (N'importe quelle taille fonctionnera)
- Un utilisateur sudo (ou compte root) .
Dans cet exemple, nous utiliserons trois nœuds dans plusieurs zones:
Installation du logiciel
Les commandes suivantes seront exécutées sur chaque instance.
Commencez par installer le build-essential
depuis le dépôt et aussi libssl-dev
, car nous allons construire à partir du code source le plus récent.
apt-get install -y build-essential libssl-dev
Ensuite, téléchargez le code source depuis github.
cd /tmp
git clone https://github.com/ntop/n2n.git
Compilez tous les binaires.
cd n2n
make
make install
La make install
commande aura créé les fichiers binaires supernode
et edge
dans le /usr/sbin
répertoire. Terminez en nettoyant les fichiers.
rm -rf /tmp/n2n
Installation - Node Paris
Le premier nœud sera notre soi-disant supernode. Ce supernode démarrera le service de supernode qui écoutera sur le port UDP 1200
. Par défaut, l'application N2N ne crée pas de fichier de service. Nous devrons donc fournir les nôtres.
Créez le fichier de service 'n2n_supernode':
nano /etc/systemd/system/n2n_supernode.service
Ajoutez le contenu suivant:
[Unit]
Description=n2n supernode
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/supernode -l 1200
[Install]
WantedBy=multi-user.target
La directive «-l» définit le port UDP 1200
. Il s'agit du port sur lequel le supernode écoutera. Pour vous assurer que tout fonctionne, démarrez le service de supernœuds:
systemctl start n2n_supernode
Vérifiez l'état du supernode.
systemctl status n2n_supernode
Cela affichera un statut similaire au suivant.
● n2n_supernode.service - n2n supernode
Loaded: loaded (/etc/systemd/system/n2n_supernode.service; disabled; vendor prese
Active: active (running) since Wed 2018-08-15 17:07:46 UTC; 5s ago
Main PID: 4711 (supernode)
Tasks: 1
Memory: 80.0K
CPU: 1ms
CGroup: /system.slice/n2n_supernode.service
└─4711 /usr/sbin/supernode -l 1200
Nous allons ensuite créer le service Edge. Ce service de périphérie revendiquera une adresse IP privée pour la communication entre les autres périphéries dans d'autres zones Vultr.
Comme pour le service supernode, il aura également besoin de son propre fichier de service.
nano /etc/systemd/system/n2n_edge.service
Ajoutez le contenu suivant:
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target n2n_supernode.service
[Service]
ExecStart=/usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypassword -f
[Install]
WantedBy=multi-user.target
Dans ce fichier de service, nous avons défini les options de ligne de commande suivantes:
-l localhost:1200
: Ceci se connectera à localhost sur le port UDP 1200
.
-c Vultr
: Il s'agit de la communauté à laquelle le bord se joindra. Tous les bords d'une même communauté apparaissent sur le même LAN (segment de réseau de couche 2). Les bords qui ne sont pas dans la même communauté ne communiqueront pas entre eux.
-a 192.168.1.1
: L'adresse IP attribuée à cette interface. Il s'agit de l'adresse IP du réseau local virtuel N2N revendiquée.
-k mypassword
: Mot de passe utilisé pour chaque tronçon. Tous les bords qui communiquent doivent utiliser la même clé et le même nom de communauté.
-f
: Désactive le mode démon et entraîne l'exécution de edge au premier plan. Cela est nécessaire pour le fichier de service, sinon systemctl
ne démarre pas le service.
Pour vous assurer que tout fonctionne, démarrez le service.
systemctl start n2n_edge
Ensuite, interrogez l'état du service.
systemctl status n2n_edge
La sortie sera similaire à la suivante.
● n2n_edge.service - n2n edge
Loaded: loaded (/etc/systemd/system/n2n_edge.service; disabled; vendor preset: en
Active: active (running) since Wed 2018-08-15 17:10:46 UTC; 3s ago
Main PID: 4776 (edge)
Tasks: 1
Memory: 396.0K
CPU: 8ms
CGroup: /system.slice/n2n_edge.service
└─4776 /usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypass
Si nous vérifions «ifconfig», vous verrez l'IP virtuelle N2N revendiquée par l' edge0
interface.
ifconfig
La sortie sera similaire à la suivante.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Une fois cela fait, activez et créez les règles de pare-feu. Assurez-vous de remplacer le texte node_miami_ip
et node_sydney_ip
par l'adresse IP publique de l'instance de Sydney et de Miami. (Nous les utiliserons plus tard).
ufw allow 22/tcp
ufw allow from node_miami_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
ufw enable
La dernière chose à faire avec ce nœud est d'activer les deux services au démarrage.
systemctl enable n2n_supernode.service
systemctl enable n2n_edge.service
Installation - Node Miami
Le nœud de Miami se connectera au super nœud qui fonctionne actuellement dans la zone parisienne. Pour cela, il suffit de créer un fichier de service pour l' edge
application.
Commencez par créer un fichier de service Edge.
nano /etc/systemd/system/n2n_edge.service
Ajoutez le contenu suivant.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.2 -k mypassword -f
[Install]
WantedBy=multi-user.target
Remarque : remplacez le node_paris_ip
par l'adresse IP publique de l'instance exécutée à Paris
Cela se connectera au nœud à Paris sur le port UDP 1200
, rejoindra la communauté ' Vultr
', revendiquera l'IP 192.168.1.2
et s'authentifiera avec ' mypassword
'.
Ensuite, démarrez le service.
systemctl start n2n_edge
Vérifiez l'état pour une indication que le service a démarré correctement et est en cours d'exécution.
systemctl status n2n_edge
Ensuite, assurez-vous que l' edge0
IP est réclamée.
ifconfig
Il affichera l' 192.168.1.2
adresse IP.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
La prochaine chose à faire est d'activer le service au démarrage.
systemctl enable n2n_edge.service
Facultativement, activez le pare-feu et ajoutez les règles SSH.
ufw allow 22/tcp
ufw enable
Nous allons maintenant pouvoir envoyer une requête ping aux deux bords exécutés dans nos instances.
A Paris, ping sur l'instance Vultr à Miami
ping 192.168.1.2
A Miami, cingler le bord à Paris
ping 192.168.1.1
Installation - Node Sydney
Enfin, nous ajouterons notre dernier continent au mix: l'Australie. Recommencez en créant un service Edge, ce service Edge se connectera également au précédent supernode configuré à Paris.
nano /etc/systemd/system/n2n_edge.service
Ajoutez le contenu suivant.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.3 -k mypassword -f
[Install]
WantedBy=multi-user.target
Remarque : Remplacez le node_paris_ip
par l'adresse IP publique de l'instance exécutée à Paris.
Cela se connectera au nœud à Paris sur le port UDP 1200
, rejoindra la communauté ' Vultr
', revendiquera l'IP 192.168.1.3
et s'authentifiera avec ' mypassword
'.
systemctl start n2n_edge
Vérifiez l'état pour vous assurer que le service est démarré.
systemctl status n2n_edge
Assurez-vous que l' edge0
IP est réclamée.
edge0 Link encap:Ethernet HWaddr 46:56:b0:e9:8f:8a
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4456:b0ff:fee9:8f8a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Encore une fois, activez ce service au démarrage.
systemctl enable n2n_edge.service
Facultativement, activez le pare-feu et ajoutez les règles SSH.
ufw allow 22/tcp
ufw enable
Nous allons maintenant pouvoir envoyer une requête ping à chaque instance Vultr depuis chaque nœud.
ping 192.168.1.1
ping 192.168.1.2
ping 192.168.1.3
Si vous souhaitez tester la connexion entre chaque bord de nœud, activez les règles de pare-feu sur les instances de Miami et Paris. Cela permettra la communication entre les bords.
À Miami, ajoutez les règles suivantes. (Assurez-vous de remplacer le texte node_paris_ip
et node_sydney_ip
par les adresses IP publiques des instances de Sydney et de Paris.)
ufw allow from node_paris_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
À Sydney, ajoutez les règles suivantes.
ufw allow from node_paris_ip to any port 1200
ufw allow from node_miami_ip to any port 1200
Vous pouvez maintenant arrêter ou redémarrer le supernode. Les connexions réseau continueront d'exister. Seuls les nouveaux bords subiront des problèmes de connectivité pendant que le service de supernœuds est en panne.
Conclusion
Nous avons réussi à configurer une connexion VPN entre plusieurs zones. Cela devrait offrir beaucoup de nouvelles possibilités de scénarios de haute disponibilité à notre environnement nouvellement configuré.