VPN IPSec tra Amazon VPC e Linux Server


9

Sto cercando di configurare una connessione VPN IPSec tra la nostra rete aziendale e il Virtual Private Cloud di Amazon, usando il loro sistema VPN e un server Linux. Sfortunatamente, l'unica guida che ho trovato discute su come impostare il tunnel usando una macchina Linux host e ottenere quella macchina linux per accedere alle istanze VPC, ma non c'è discussione che posso trovare online su come ottenere l'istanza per accedere alla rete aziendale (o il resto di Internet tramite quella rete).

Informazioni sulla rete

Local subnet: 10.3.0.0/25
Remote subnet: 10.4.0.0/16

Tunnel 1:
  Outside IP Addresses:
    - Customer Gateway:        : 199.167.xxx.xxx
    - VPN Gateway              : 205.251.233.121

  Inside IP Addresses
    - Customer Gateway         : 169.254.249.2/30
    - VPN Gateway              : 169.254.249.1/30

Tunnel 2:
  Outside IP Addresses:
    - Customer Gateway:        : 199.167.xxx.xxx
    - VPN Gateway              : 205.251.233.122

  Inside IP Addresses
    - Customer Gateway         : 169.254.249.6/30
    - VPN Gateway              : 169.254.249.5/30

Ecco il mio /etc/ipsec-tools.conf:

flush;
spdflush;

spdadd 169.254.249.2/30 169.254.249.1/30 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 169.254.249.1/30 169.254.249.2/30 any -P in ipsec
   esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;

spdadd 169.254.249.6/30 169.254.249.5/30 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 169.254.249.5/30 169.254.249.6/30 any -P in ipsec
   esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;



spdadd 169.254.249.2/30 10.4.0.0/16 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 10.4.0.0/16 169.254.249.2/30 any -P in ipsec
   esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;

spdadd 169.254.249.6/30 10.4.0.0/16 any -P out ipsec
   esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 10.4.0.0/16 169.254.249.6/30 any -P in ipsec
   esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;

Ecco il mio /etc/racoon/racoon.conf:

remote 205.251.233.122 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

sainfo address 169.254.249.2/30 any address 169.254.249.1/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 169.254.249.6/30 any address 169.254.249.5/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

BGP funziona bene, quindi non pubblicherò queste configurazioni.

Ecco cosa funziona

  • Dalla scatola di Linux, posso eseguire il ping degli endpoint locali (169.254.249.2/169.254.249.6) e dei loro equivalenti remoti (169.254.249.1/169.254.249.5).
  • Posso anche eseguire il ping delle istanze in VPC, SSH, ecc.
  • Dalle istanze remote in VPC, posso eseguire il ping anche degli endpoint locali e remoti
  • Non riesco a eseguire il ping dei server locali sulla sottorete 10.3.0.0/25

Presumo che mi manchi qualcosa di semplice, ma ho provato ad aggiungere voci a ipsec-tools.conf per rispecchiare {endpoint locale} <-> {sottorete remota}, usando {sottorete locale} <-> {endpoint remoto}, ma non sembra funzionare.

Quando eseguo il ping da {istanza remota} a {server locale}, il timeout del ping. I pacchetti sono visibili sull'interfaccia eth0 (anche se la rete locale è su eth1).

Google è stato di scarso aiuto; mostra solo le persone che tentano di utilizzare OpenSwan o che hanno problemi simili ma con router hardware o utilizzando strumenti meno recenti.


Non sono un esperto, ma sembra che da qui wiki.debian.org/IPsec che devi aggiungere manualmente percorsi alla rete locale remota quando usi ipsec, potrei sbagliarmi però ..
user993553

Risposte:


3

Bene, ho tradito :) Ho installato il gateway Astaro che è ufficialmente supportato da Amazon e poi l'ho usato per modellare il mio. Puoi semplicemente SSH nell'unità Astaro e vedere come hanno impostato tutto. Ovviamente, potresti restare fedele all'unità Astaro se hai voglia di pagarla.


1
Potresti per favore approfondire la tua soluzione? Cosa intendi con "modella il mio"? Sono bloccato sullo stesso problema e sarei interessato a come l'hai risolto, grazie!
Max

3

Capito. Ho dovuto cambiare il mio ipsec-tools.conf in questo:

flush;
spdflush;

# Generic routing
spdadd 10.4.0.0/16 10.3.0.0/25 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 10.3.0.0/25 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

# Tunnel 1
spdadd 169.254.249.1/30 169.254.249.2/30 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 169.254.249.2/30 169.254.249.1/30 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

spdadd 10.4.0.0/16 169.254.249.2/30 any -P in  ipsec esp/tunnel/205.251.233.121-199.167.xxx.xxx/require;
spdadd 169.254.249.2/30 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.121/require;

# Tunnel 2
spdadd 169.254.249.5/30 169.254.249.6/30 any -P in  ipsec esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;
spdadd 169.254.249.6/30 169.254.249.5/30 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

spdadd 10.4.0.0/16 169.254.249.6/30 any -P in  ipsec esp/tunnel/205.251.233.122-199.167.xxx.xxx/require;
spdadd 169.254.249.6/30 10.4.0.0/16 any -P out ipsec esp/tunnel/199.167.xxx.xxx-205.251.233.122/require;

E cambia il mio racoon.conf in questo:

path pre_shared_key "/etc/racoon/psk.txt";

remote 205.251.233.122 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

sainfo address 169.254.249.2/30 any address 169.254.249.1/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 169.254.249.6/30 any address 169.254.249.5/30 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

sainfo address 10.3.0.0/25 any address 10.4.0.0/16 any {
    pfs_group 2;
    lifetime time 3600 seconds;
    encryption_algorithm aes128;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

Tuttavia, questa configurazione, a quanto ho capito, instraderà il traffico solo tra il 10.3.0.0/25 e il 10.4.0.0/16 sul primo tunnel (tramite xxx121). Aggiornerò la risposta quando lo scoprirò.


Sono stato anche bloccato per un po 'di questo problema e la tua risposta mi ha davvero aiutato. Hai trovato una soluzione per effettuare il routing su entrambi i tunnel? Ho aggiunto le parti "Routing generico" con l'altro IP tunnel ma non l'ho testato.
Sarà l'

Non ho trovato alcuna buona soluzione per il routing su entrambi i tunnel, ma penso che abbia senso in un contesto. L'idea qui è quella di fornire ridondanza, e idealmente ciò dovrebbe includere la ridondanza su entrambi i lati. È possibile configurare un server separato sul secondo tunnel e fornire due route alle VPN (ad esempio fornendo ai server standard due route, una per ogni casella). O questo, oppure si attiva il failover manuale con un qualche tipo di sistema di monitoraggio. Nessuna delle due soluzioni è davvero "ottimale", ma la prima offre anche ridondanza dalla tua parte.
Dan Udey,

0

Conosci il motivo per usare "request" invece di "use" per la configurazione di setkey? Sai anche se è importante in quale ordine inserisco le istruzioni all'interno delle sezioni remote e sainfo e duplica erroneamente determinate istruzioni? Per esempio:

#original
remote 205.251.233.121 {
        exchange_mode main;
        lifetime time 28800 seconds;
        proposal {
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2;
        }
        generate_policy off;
}

vs

#edited
remote 205.251.233.121 {
        generate_policy off;                           #moved/duplicated
        lifetime time 28800 seconds;
        proposal {
                dh_group 2;                           #moved
                encryption_algorithm aes128;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
        }
         exchange_mode main;                      #moved
        generate_policy off;                   #duplicated/moved
}

Hai anche capito come far fluire il traffico su entrambi i tunnel?

Grazie per qualsiasi consiglio.


Benvenuti in Serverfault. Sembra che tu stia cercando di porre una domanda nella sezione di risposta della domanda di un altro poster. Se hai una nuova domanda, ti preghiamo di pubblicarla come nuova domanda andando su serverfault.com e facendo clic sul grande pulsante rosso "Poni domanda".
vjones,

Lo ringrazio per il seguito.
DPfiler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.