Connessione di due reti VPC tra regioni differenti in Amazon AWS
da Davide Riboldi · pubblicato il 8 novembre, 2017 · modificato il 8 novembre, 2017

La VPC (virtual private cloud) è un servizio che ci permette di gestire una rete privata in cui configurare tutte le nostre risorse e le loro caratteristiche di networking. Per definizione una VPC è confinata ad una singola regione geografica ed opera tramite delle subnet di rete. Le connessioni tra le risorse avvengono nell’ambito di una o diverse subnet tramite delle regole di route. Tramite le (peering connections) è possibile connettere due VPC diverse anche se su diversi account però sempre con il limite delle stessa regione geografica.

Introduzione

Il limite di confinamento ad una singola regione geografica è legato a molti fattori, tra cui quello della sicurezza, in quanto si uscirebbe da una rete privata per attraversare internet, a quello più di carattere legale amministrativo legato alla memorizzazione e alla gestione di dati. Però è anche vero che esistono delle situazioni dove questa connessione potrebbe essere molto utile, sia per funzioni di replica, ad esempio una directory AD un database o un flusso di lavoro.

Al momento per eseguire la connessione tra due VPC in regioni diverse dobbiamo usare delle configurazioni particolari, installare dei software di routing e mettere a disposizione alcune risorse computazionali dedicate allo svolgimento di questa operazione. Nella nostra soluzione useremo due istanze EC2, un software chiamato (strongSwan), delle route statiche e l’utilizzo di due indirizzi IP statici associati al nostro account tramite il servizio di Amazon Elastic IP.

Schema di riferimento

Qui di seguito vi indico una situazione classica per configurare una connessione VPC in diverse regioni geografiche. Ovviamente voi cambiate le <info> rispetto alla vostra situazione.

Le operazioni che andiamo ad eseguire sono state testate su due istanze EC2 avviate con le AMI standard di Amazon che riguardano Ubuntu 16.04 LTS. Alcuni comandi usati potrebbero essere diversi in base al sistema operativo utilizzato, leggere la documentazione del proprio sistema operativo nel caso si riscontrino differenze sul risultato del comando eseguito.

Avviare due istanze EC2

Il primo passo è avviare due istanze EC2 nelle rispettive subnet di ogni regione, le subnet usate devono essere pubbliche e quindi avere un internet gateway per la connessione internet. Le due istanze dovranno essere configurate in modo tale da avere rispettivamente gli indirizzi IP locali e quelli internet corrispondenti alla configurazione presente nello schema precedente.

aws ec2 run-instances --count 1 
    --image-id ami-add175d4
    --instance-type t2.micro 
    --key-name <keypair> 
    --security-group-ids <securitygroup> 
    --private-ip-address 10.81.31.101
    --subnet-id <subnet-id-publica>
    --region eu-west-1

aws ec2 run-instances --count 1
    --image-id ami-da05a4a0
    --instance-type t2.micro 
    --key-name <keypair> 
    --security-group-id <securitygroup> 
    --private-ip-address 10.82.31.101
    --subnet-id <subnet-id-publica>
    --region us-east-1

Nell’esempio sono state scelte le regioni geografiche di Europa (Irlanda) e US Virginia, cambiate gli endpoint secondo le vostre necessità. Anche la dimensione delle istanze dipenderà dal vostro traffico e quindi dalla banda associata al tipo di istanza che si va a scegliere. Guardare la scheda tecniche delle diverse istanze sulla documentazione ufficiale di Amazon EC2.

Amazon Elastic IP

Una volta che le due istanze risultano avviate possiamo associare i due indirizzi IP pubblici, se non abbiamo ancora allocato gli indirizzi IP possiamo farlo tramite linea di comandi o usando semplicemente la console AWS dalla pagina del servizio EC2 e dal menu Elastic IP.

aws ec2 allocate-address --domain vpc --region eu-west-1
aws ec2 allocate-address --domain vpc --region us-east-1

Una volta allocati gli indirizzi IP pubblici li dobbiamo associare alle nostre istanze, nel nostro caso gli indirizzi sono stati indicati nella schema generale ed eseguiremo i seguenti comandi:

aws ec2 associate-address --instance-id <instance>
    --public-ip 53.15.21.157 --region eu-west-1

aws ec2 associate-address --instance-id <instance>
    --public-ip 34.18.42.128 --region us-east-1

Assicurarsi che nei security group associati alle istanze ci siano le regole di accesso necessarie alla connessione delle due istanze tra di loro e alla possibilità di eseguire una connessione SSH in entrambe in modo da poter eseguire la prossima configurazione del software.

Cambiare Dest/Check

Dato che le istanze devono essere usate come risorse di routing, per far in modo che siano abilitate come destinazioni sulle route statiche delle rispettive subnet collegate alle nostre VPC dobbiamo eseguire il comandi di disabilitazione Dest/Check.

aws ec2 modify-instance-attribute 
    --instance-id <instance>
    --source-dest-check "{\"Value\": false}"
    --region eu-west-1

aws ec2 modify-instance-attribute 
    --instance-id <instance>
    --source-dest-check "{\"Value\": false}"
    --region us-east-1

Questa operazione è anche possibile eseguirla facilmente dalla console AWS, basta selezionare l’istanza desiderata e scegliere l’opzione di menu Networking/Change Source/Dest e selezionare il pulsante di “Yes Disable”.  (come viene fatto per una istanza di NAT).

Abilitare la funzione IP forward

Dato che le istanze EC2 appena avviate dovranno eseguire funzioni di routing è bene accertarsi che abbiano l’opzione di ip forward abilitata. Quindi collegarsi in entrambe le istanze con una connessione SSH ed eseguire il seguente comando:

sudo sysctl -w net.ipv4.ip_forward=1

Per rendere la modifica permanente ed essere sicuri che venga impostata anche nei successivi avvii dell’istanza bisogna cambiare il file /etc/sysctl.conf e aggiungere net.ipv4.ip_forward=0.

Installazione di StrongSwan

Adesso che le nostre istanze sono pronte possiamo installare il software che eseguirà il routing delle richieste tramite una connessione IPSec. Il software si chiama StrongSwan ed è presente nei repository ufficiali di Ubuntu 16.04 LTS, quindi eseguite il seguente comando:

sudo apt-get update
sudo apt-get install strongswan

Una volta installato il software avremmo a disposizione un nuovo servizio strongswan che sarà possibile avviare/arrestare tramite il classico comando (sudo service strongswan restart).

Configurazione di StrongSwan

La configurazione del software è abbastanza semplice basta configurare due file per ogni istanza EC2 e riavviare il servizio su entrambi le macchine. Vi lascio qui di seguito gli esempi delle mie configurazioni in modo che potiate adattarle facilmente al vostro ambiente.

# Configurazione Macchina Europa (Irlanda)
# Modificare il file /etc/ipsec.conf in questo modo

config setup

conn %default
     ikelifetime=60m
     keylife=20m
     rekeymargin=3m
     keyingtries=1
     keyexchange=ikev2

conn us-east-1
     auto=start
     type=tunnel
     authby=secret
     left=10.81.31.101
     leftsubnet=10.81.0.0/16
     leftid=53.15.21.157
     leftauth=psk
     leftfirewall=yes
     right=34.18.42.128
     rightsubnet=10.82.0.0/16
     rightauth=psk

# Configurazione Macchina USA (Virginia)
# Modificare il file /etc/ipsec.conf in questo modo

config setup

conn %default
     ikelifetime=60m
     keylife=20m
     rekeymargin=3m
     keyingtries=1
     keyexchange=ikev2

conn eu-west-1
     auto=start
     type=tunnel
     authby=secret
     left=10.82.31.101
     leftsubnet=10.82.0.0/16
     leftid=34.18.42.128
     leftauth=psk
     leftfirewall=yes
     right=53.15.21.157
     rightsubnet=10.81.0.0/16
     rightauth=psk

# Tutte e due le macchine devo avere le chiavi
# di autorizzazione indicate in /etc/ipsec.secrets

34.18.42.128 : PSK "dskasdGKgiawser59780drxjkfowasvgiyqjvSDLTFR"
53.15.21.157 : PSK "ncsdSXDKfgjhhi8w923565SOfghd391cERFWWrckdiw"

Mi raccomando cambiate le chiavi indicate con una sequenza privata e non usate quelle indicate in questo esempio. Anche la lunghezza può essere variabile per rafforzare la sicurezza. A questo punto riavviate il servizio e controllate lo stato di comunicazione su entrambe le EC2.

sudo service strongswan restart
sudo ipsec statusall

ping 10.82.31.101 # Da EU a US
ping 10.81.31.101 # Da US a EU

Anche se adesso le istanze sono in comunicazione e posso connettersi tra i loro indirizzi privati non è detto che sia già possibile vedere tutta la rete presente nella VPC. Per eseguire questo si devono configurare le routing table delle subnet interessate.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services. Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

1 Commento

  1. Davide, neanche a farlo apposta proprio in questi giorni dopo due anni che usiamo questa tecnica e ci siamo decisi a fare un'articolo Amazon ha rilasciato una funzione nativa per eseguire la connessione Peering tra due VPC presenti in due regioni geografiche differenti. Ho appeno finito di provarla da un cliente e funziona bene, la configurazione è semplice.

    Annuncio: https://goo.gl/htHJAf

condividi