IPSec VPN zwischen Amazon VPC und Linux Server

9

Ich versuche, eine IPSec-VPN-Verbindung zwischen unserem Unternehmensnetzwerk und der Virtual Private Cloud von Amazon mithilfe des VPN-Systems und eines Linux-Servers einzurichten. Leider wird in der einzigen Anleitung, die ich gefunden habe, erläutert, wie der Tunnel mit einem Host-Linux-Computer eingerichtet und dieser Linux-Computer für den Zugriff auf VPC-Instanzen eingerichtet wird. Es gibt jedoch keine Online-Diskussion darüber, wie die Instanz auf das Unternehmensnetzwerk zugreifen kann (oder der Rest des Internets über dieses Netzwerk).

Netzwerkinformationen

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

Hier ist meine /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;

Hier ist meine /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 funktioniert einwandfrei, daher werde ich diese Konfigurationen nicht veröffentlichen.

Hier ist was funktioniert

  • Über die Linux-Box kann ich die lokalen Endpunkte (169.254.249.2/169.254.249.6) und ihre Remote-Entsprechungen (169.254.249.1/169.254.249.5) anpingen.
  • Ich kann ihnen auch die Instanzen in VPC, SSH usw. anpingen.
  • Über die Remote-Instanzen in VPC kann ich auch die lokalen und Remote-Endpunkte anpingen
  • Ich kann die lokalen Server im Subnetz 10.3.0.0/25 nicht anpingen

Ich gehe davon aus, dass mir etwas Einfaches fehlt, aber ich habe versucht, Einträge zu ipsec-tools.conf hinzuzufügen, um den {lokalen Endpunkt} <-> {entferntes Subnetz} mit {lokalem Subnetz} <-> {entferntem Endpunkt} zu spiegeln. aber es schien nicht zu funktionieren.

Wenn ich von {Remote-Instanz} zu {lokalem Server} pinge, tritt das Pings-Timeout auf. Die Pakete sind auf der eth0-Schnittstelle sichtbar (obwohl sich das lokale Netzwerk auf eth1 befindet).

Google war wenig Hilfe; Es werden nur Personen angezeigt, die versuchen, OpenSwan zu verwenden oder ähnliche Probleme haben, jedoch mit Hardware-Routern oder älteren Tools.

Dan Udey
quelle
Ich bin kein Experte, aber es scheint, dass Sie von hier aus wiki.debian.org/IPsec manuell Routen zum lokalen Remotenetzwerk hinzufügen müssen, wenn Sie ipsec verwenden. Ich könnte mich jedoch irren.
user993553

Antworten:

3

Nun, ich habe geschummelt :) Ich habe das Astaro-Gateway installiert, das offiziell von Amazon unterstützt wird, und es dann verwendet, um mein eigenes zu modellieren. Sie können einfach SSH in die Astaro-Einheit und sehen, wie sie alles einrichten. Natürlich können Sie bei der Astaro-Einheit bleiben, wenn Sie dafür bezahlen möchten.

Petter
quelle
1
Könnten Sie bitte Ihre Lösung näher erläutern? Was meinst du mit "model my own"? Ich bin auf das gleiche Problem fixiert und würde mich interessieren, wie Sie es gelöst haben, danke!
Max
3

Herausgefunden. Musste meine ipsec-tools.conf dazu ändern:

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;

Und ändere meine racoon.conf in folgende:

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

Diese Konfiguration leitet jedoch meines Wissens nur Verkehr zwischen 10.3.0.0/25 und 10.4.0.0/16 über den ersten Tunnel (über xxx121). Ich werde die Antwort aktualisieren, wenn ich das herausfinde.

Dan Udey
quelle
Ich habe mich auch eine Weile mit diesem Thema beschäftigt und Ihre Antwort hat wirklich geholfen. Haben Sie eine Lösung für das Routing über beide Tunnel gefunden? Ich habe die 'Generic Routing'-Teile mit der anderen Tunnel-IP hinzugefügt, sie aber nicht getestet.
Will
Ich habe keine gute Lösung für das Routing über beide Tunnel gefunden, aber ich denke, dass dies in einem Kontext sinnvoll ist. Die Idee hier ist, Redundanz bereitzustellen, und im Idealfall würde dies Redundanz an beiden Enden beinhalten. Sie können einen separaten Server im zweiten Tunnel einrichten und zwei Routen für Ihre VPNs bereitstellen (z. B. indem Sie Ihren Standardservern zwei Routen zur Verfügung stellen, eine für jede Box). Entweder das, oder Sie lösen ein manuelles Failover mit einer Art Überwachungssystem aus. Keine der beiden Lösungen ist wirklich "optimal", aber die erste bietet auch Redundanz auf Ihrer Seite.
Dan Udey
0

Kennen Sie den Grund für die Verwendung von "require" anstelle von "use" für die Setkey-Konfiguration? Wissen Sie auch, ob es darauf ankommt, in welcher Reihenfolge ich die Anweisungen in den Abschnitten remote und sainfo platziere und bestimmte Anweisungen fälschlicherweise dupliziere? Zum Beispiel:

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

Haben Sie auch herausgefunden, wie der Verkehr in beiden Tunneln fließen kann?

Vielen Dank für jede Anleitung.

DPfiler
quelle
Willkommen bei Serverfault. Es sieht so aus, als würden Sie versuchen, eine Frage im Antwortbereich der Frage eines anderen Posters zu stellen. Wenn Sie eine neue Frage haben, stellen Sie diese bitte als neue Frage, indem Sie auf serverfault.com auf die große rote Schaltfläche "Frage stellen" klicken.
Vjones
Ich werde mich bei Ihnen für das Follow-up bedanken.
DPfiler