VPN IPSec entre Amazon VPC et Linux Server

9

J'essaie de mettre en place une connexion VPN IPSec entre notre réseau d'entreprise et le cloud privé virtuel d'Amazon, en utilisant leur système VPN et un serveur Linux. Malheureusement, le seul guide que j'ai trouvé explique comment configurer le tunnel à l'aide d'une machine Linux hôte et obtenir que cette machine Linux accède aux instances VPC, mais je ne trouve aucune discussion en ligne sur la façon d'obtenir l'instance pour accéder au réseau d'entreprise (ou le reste d'Internet via ce réseau).

Informations sur le réseau

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

Voici mon /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;

Voici mon /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 fonctionne bien, donc je ne vais pas publier ces configurations.

Voici ce qui fonctionne

  • Depuis la boîte Linux, je peux exécuter une commande ping sur les points de terminaison locaux (169.254.249.2/169.254.249.6) et leurs équivalents distants (169.254.249.1/169.254.249.5).
  • Je peux également envoyer une requête ping aux instances VPC, SSH, etc.
  • À partir des instances distantes dans VPC, je peux également envoyer une requête ping aux points de terminaison locaux et distants
  • Je ne peux pas envoyer de requête ping aux serveurs locaux sur le sous-réseau 10.3.0.0/25

Je suppose qu'il me manque quelque chose de simple, mais j'ai essayé d'ajouter des entrées à ipsec-tools.conf pour mettre en miroir le {point de terminaison local} <-> {sous-réseau distant}, en utilisant {sous-réseau local} <-> {point de terminaison distant}, mais cela ne semblait pas fonctionner.

Lorsque j'exécute une commande ping depuis {instance distante} vers {serveur local}, le délai d'attente des pings. Les paquets sont visibles sur l'interface eth0 (même si le réseau local est sur eth1).

Google n'a pas été d'une grande aide; il montre uniquement les personnes essayant d'utiliser OpenSwan, ou ayant des problèmes similaires mais avec des routeurs matériels ou utilisant des outils plus anciens.

Dan Udey
la source
Je ne suis pas un expert mais il semble qu'à partir d'ici wiki.debian.org/IPsec que vous devez ajouter manuellement des itinéraires au réseau local distant lors de l'utilisation d'ipsec, je peux me tromper cependant.
user993553

Réponses:

3

Eh bien, j'ai triché :) J'ai installé la passerelle Astaro qui est officiellement prise en charge par Amazon, puis je l'ai utilisée pour modéliser la mienne. Vous pouvez simplement SSH dans l'unité Astaro et voir comment ils ont tout configuré. Bien sûr, vous pouvez rester avec l'unité Astaro si vous avez envie de payer pour cela.

Petter
la source
1
Pourriez-vous développer votre solution? Que voulez-vous dire par "modéliser le mien"? Je suis coincé sur le même problème et je serais intéressé par la façon dont vous l'avez résolu, merci!
Max
3

Deviner. J'ai dû changer mon ipsec-tools.conf en ceci:

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;

Et changez mon racoon.conf en ceci:

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;
}

Cependant, cette configuration, si je comprends bien, acheminera uniquement le trafic entre 10.3.0.0/25 et 10.4.0.0/16 sur le premier tunnel (via xxx121). Je mettrai à jour la réponse quand je le comprendrai.

Dan Udey
la source
J'ai également été coincé avec ce problème pendant un certain temps et votre réponse a vraiment aidé. Avez-vous trouvé une solution pour effectuer le routage sur les deux tunnels? J'ai ajouté les parties «Acheminement générique» avec l'autre IP de tunnel mais je ne l'ai pas testé.
Will
Je n'ai pas trouvé de bonne solution pour le routage sur les deux tunnels, mais je pense que cela a du sens dans un contexte. L'idée ici est de fournir une redondance, et idéalement, cela inclurait la redondance aux deux extrémités. Vous pouvez configurer un serveur distinct sur le deuxième tunnel et fournir deux routes vers vos VPN (par exemple en fournissant à vos serveurs standard deux routes, une vers chaque boîtier). Soit cela, soit vous déclenchez un basculement manuel avec une sorte de système de surveillance. Aucune des deux solutions n'est vraiment «optimale», mais la première offre également une redondance de votre côté.
Dan Udey
0

Connaissez-vous la raison d'utiliser "require" au lieu de "use" pour la configuration de setkey? Savez-vous également si cela importe dans quel ordre je place les déclarations dans les sections distantes et sainfo et que je reproduis par erreur certaines déclarations? Par exemple:

#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;
}

contre

#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
}

Avez-vous également compris comment faire circuler le trafic sur les deux tunnels?

Merci pour tout conseil.

DPfiler
la source
Bienvenue dans Serverfault. On dirait que vous essayez de poser une question dans la section réponse de la question d'une autre affiche. Si vous avez une nouvelle question, veuillez la poster en tant que nouvelle question en allant sur serverfault.com et en cliquant sur le gros bouton rouge "Poser une question".
vjones
Je le ferai, merci pour le suivi.
DPfiler