N2N è un'applicazione VPN di livello 2/3 open source. A differenza di molti altri programmi VPN, N2N può connettere computer che si trovano dietro un router NAT. Ciò offre un enorme vantaggio per la connessione a un ambiente cloud senza dover fare affidamento su protocolli speciali come il protocollo ESP (utilizzato da ipsec). Per ottenere questa connessione, N2N utilizza un supernodo che può instradare le informazioni tra i nodi NAT. Questa connessione VPN può essere utilizzata per connettere più istanze Vultr tra regioni diverse.
Prerequisiti
- Tre istanze del server Ubuntu 16.04 LTS x64. (Qualsiasi dimensione funzionerà)
- Un utente sudo (o account root) .
In questo esempio utilizzeremo tre nodi in più zone:
Installazione del software
I seguenti comandi verranno eseguiti su ogni istanza.
Inizia installando build-essential
dal repository e anche libssl-dev
, poiché costruiremo dal codice sorgente più recente.
apt-get install -y build-essential libssl-dev
Quindi, scarica il codice sorgente da github.
cd /tmp
git clone https://github.com/ntop/n2n.git
Compila tutti i binari.
cd n2n
make
make install
Il make install
comando avrà creato i binari supernode
e edge
nella /usr/sbin
directory. Termina pulendo i file.
rm -rf /tmp/n2n
Installazione - Nodo Parigi
Il primo nodo sarà il nostro cosiddetto supernodo. Questo supernodo avvierà il servizio di supernodi che ascolterà sulla porta UDP 1200
. Per impostazione predefinita, l'applicazione N2N non crea un file di servizio. Quindi dovremo fornire il nostro.
Creare il file di servizio 'n2n_supernode':
nano /etc/systemd/system/n2n_supernode.service
Aggiungi il seguente contenuto:
[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 direttiva '-l' definisce la porta UDP 1200
. Questa è la porta su cui il supernodo ascolterà. Per assicurarsi che tutto funzioni, avviare il servizio di supernodi:
systemctl start n2n_supernode
Controlla lo stato del supernodo.
systemctl status n2n_supernode
Questo mostrerà uno stato simile al seguente.
● 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
Successivamente creeremo il servizio perimetrale. Questo servizio perimetrale rivendica un IP privato per la comunicazione tra gli altri contorni in altre zone Vultr.
Come per il servizio supernodi, anche questo avrà bisogno del proprio file di servizio.
nano /etc/systemd/system/n2n_edge.service
Aggiungi il seguente contenuto:
[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
In questo file di servizio abbiamo definito le seguenti opzioni della riga di comando:
-l localhost:1200
: Questo si connetterà a localhost sulla porta UDP 1200
.
-c Vultr
: Questa è la community alla quale si unirà il bordo. Tutti i bordi all'interno della stessa comunità vengono visualizzati sulla stessa LAN (segmento di rete di livello 2). I bordi che non fanno parte della stessa comunità non comunicheranno tra loro.
-a 192.168.1.1
: L'IP assegnato a questa interfaccia. Questo è l'indirizzo IP della LAN virtuale N2N richiesto.
-k mypassword
: La password utilizzata per ciascun bordo. Tutti i bordi che comunicano devono utilizzare la stessa chiave e lo stesso nome di comunità.
-f
: Disabilita la modalità demone e causa l'esecuzione di edge in primo piano. Ciò è necessario per il file di servizio, altrimenti systemctl
il servizio non verrà avviato.
Per assicurarsi che tutto funzioni, avviare il servizio.
systemctl start n2n_edge
Quindi, interrogare lo stato del servizio.
systemctl status n2n_edge
L'output sarà simile al seguente.
● 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
Se controlliamo 'ifconfig', vedrai l'IP virtuale N2N rivendicato edge0
dall'interfaccia.
ifconfig
L'output sarà simile al seguente.
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)
Fatto ciò, abilitare e creare le regole del firewall. Assicurati di sostituire il node_miami_ip
e il node_sydney_ip
testo con l'IP pubblico dell'istanza di Sydney e Miami. (Li useremo più avanti).
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
L'ultima cosa da fare con questo nodo è abilitare entrambi i servizi all'avvio.
systemctl enable n2n_supernode.service
systemctl enable n2n_edge.service
Installazione - Nodo Miami
Il nodo Miami si collegherà al super nodo attualmente in esecuzione nella zona di Parigi. Per raggiungere questo obiettivo, dobbiamo solo creare un file di servizio per l' edge
applicazione.
Inizia creando un file di servizio perimetrale.
nano /etc/systemd/system/n2n_edge.service
Aggiungi il seguente contenuto.
[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
Nota : sostituire il node_paris_ip
con l'IP pubblico dell'istanza in esecuzione a Parigi
Questo si connetterà al nodo di Parigi sulla porta UDP 1200
, si unirà alla comunità ' Vultr
', rivendicherà l'IP 192.168.1.2
e si autenticherà con ' mypassword
'.
Quindi, avviare il servizio.
systemctl start n2n_edge
Controllare lo stato per un'indicazione che il servizio è stato avviato correttamente ed è in esecuzione.
systemctl status n2n_edge
Quindi, assicurarsi che l' edge0
IP venga richiesto.
ifconfig
Mostrerà l' 192.168.1.2
indirizzo 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 prossima cosa da fare è abilitare il servizio all'avvio.
systemctl enable n2n_edge.service
Facoltativamente, abilitare il firewall e aggiungere le regole SSH.
ufw allow 22/tcp
ufw enable
Ora saremo in grado di eseguire il ping di entrambi i bordi in esecuzione nelle nostre istanze.
A Parigi, esegui il ping dell'istanza Vultr a Miami
ping 192.168.1.2
A Miami, fai un rumore metallico a Parigi
ping 192.168.1.1
Installazione - Nodo Sydney
Alla fine aggiungeremo il nostro ultimo continente al mix: l'Australia. Ricominciare creando un servizio perimetrale, questo servizio perimetrale si connetterà anche al precedente supernodo configurato a Parigi.
nano /etc/systemd/system/n2n_edge.service
Aggiungi il seguente contenuto.
[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
Nota : sostituire il node_paris_ip
con l'IP pubblico dell'istanza in esecuzione a Parigi.
Questo si connetterà al nodo di Parigi sulla porta UDP 1200
, si unirà alla comunità ' Vultr
', rivendicherà l'IP 192.168.1.3
e si autenticherà con ' mypassword
'.
systemctl start n2n_edge
Controllare lo stato per assicurarsi che il servizio sia avviato.
systemctl status n2n_edge
Assicurarsi che l' edge0
IP venga richiesto.
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)
Ancora una volta, abilitare questo servizio all'avvio.
systemctl enable n2n_edge.service
Facoltativamente, abilitare il firewall e aggiungere le regole SSH.
ufw allow 22/tcp
ufw enable
Ora saremo in grado di eseguire il ping di ogni istanza Vultr da ciascun nodo.
ping 192.168.1.1
ping 192.168.1.2
ping 192.168.1.3
Se si desidera testare la connessione tra ciascun bordo del nodo, abilitare le regole del firewall sulle istanze di Miami e Parigi. Ciò consentirà la comunicazione tra i bordi.
A Miami, aggiungi le seguenti regole. (Assicurati di sostituire il node_paris_ip
e il node_sydney_ip
testo con gli IP pubblici delle istanze di Sydney e Parigi.)
ufw allow from node_paris_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
A Sydney, aggiungi le seguenti regole.
ufw allow from node_paris_ip to any port 1200
ufw allow from node_miami_ip to any port 1200
Ora puoi arrestare o riavviare il supernodo. Le connessioni di rete continueranno ad esistere. Solo i nuovi edge subiranno problemi di connettività mentre il servizio di supernodi è inattivo.
Conclusione
Abbiamo configurato correttamente una connessione VPN tra più zone. Ciò dovrebbe offrire molte nuove possibilità per scenari ad alta disponibilità al nostro ambiente appena configurato.