OpenStack bietet die Möglichkeit ein ‘VPN as a Service’ mit “ipsec” für den Zugriff zur Cloud einzurichten.

Um per VPN auf Ihre Instanzen zuzugreifen gehen Sie bitte wie folgt vor.

1. VPN Service im OpenStack Dashboard einrichten

Melden Sie sich mit Ihrem Benutzernamen und Passwort in dem Dashboard Ihrer Cloud an. Wählen Sie im Menü links den Punkt VPN.
vpn1

Erstellen Sie eine IKE Richtlinie und wählen Sie einen Namen für diese aus. Bis auf ‘IKE Version’ können alle Werte auf ihren Voreinstellung bleiben, diesen setzen Sie bitte auf ‘v2’.

vpn2

Fügen Sie eine IPSec Richtlinie hinzu.

vpn3

Geben Sie auch dieser einen passenden Namen. Hier können alle anderen Werte auf den Voreinstellungen verbleiben.

vpn4

Als nächstes erstellen Sie einen ‘VPN Dienst’.

vpn5

Vergeben Sie auch hier einen Namen und wählen Ihren Router sowie das gewünschte Subnet für die Verbindung aus.

vpn6_neu

Jetzt muss nur noch eine Verbindung angelegt werden.

vpn7

Zusätzlich zu einem Namen sind hier die eben erstellten Richtlinien und DIenste auszuwählen. Außerdem müssen hier die IP-Adressen des Ziels und ein Passwort als Preshared Key eingegeben werden.

vpn8_neu

Unter ‘Optionale Parameter’ wählen Sie bitte ‘response-only’ damit Ihr IPSec Client die Verbindung aufbaut und nicht der teutoStack IPSec Server.

vpn9

Schritt 2. IPSec Client konfigurieren

Linux Openswan

Unter Linux empfehlen wir Openswan als IPSec Client, welches auch vom teutoStack Server verwendet wird.

Passende ‘ipsec.conf’ und ‘ipsec.secrets’ Dateien haben wir für Sie vorbereitet.

# ipsec.conf - openSwan IPsec configuration file

# basic configuration
config setup
nat_traversal=yes
protostack=netkey
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off

conn openstack_demo
connaddrfamily=ipv4
left=<OStack-Router-IP>
leftid=<OStack-Router-IP>
auto=start
leftsubnet=<Subnet>
right=<Peer ID>
rightid=<Peer ID>
rightsubnet=<Remote peer subnet>
rightnexthop=%defaultroute
dpdaction=hold
dpddelay=30
dpdtimeout=120
authby=secret
ikev2=never
ike=aes128-sha1;modp1536
ikelifetime=3600s
auth=esp
phase2alg=aes128-sha1;modp1536
type=tunnel
lifetime=3600s
# ipsec.secrets
# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication.  See ipsec_pluto(8) manpage, and HTML documentation.

<OStack-Router-IP> <Peer ID> : PSK "Sehr-geheime-Zeichenkette"

Für die IPSec Config Dateien wird die öffentlich IP Ihres OpenStack Routers benötigt. Diese ermitteln Sie wie folgt. Verbinden Sie sich mit einer Instanz ohne Öffentliche IP (Floating IP), z.B. über einen Jumphost. Dort führen Sie das folgende Kommando aus.

$ wget -qO- http://ipecho.net/plain ; echo

Die ausgegebene IP ist die .

Nachdem Sie die beiden Dateien entsprechen angepasst haben, starten Sie den Dienst mit folgendem Befehl neu.

$ service ipsec restart

Mit den folgenden Anweiseung können Sie überprüfen ob die VPN Verbindung aufgebaut wurde.

$ sudo ipsec whack --status
000 using kernel interface: netkey
000 interface lo/lo ::1
000 interface eth0/eth0 2001:ae0:0:21:5054:ff:fe41:f01b
000 interface lo/lo 127.0.0.1
000 interface lo/lo 127.0.0.1
000 interface eth0/eth0 10.0.1.22
000 interface eth0/eth0 10.0.1.22
000 interface eth1/eth1 192.168.122.252
000 interface eth1/eth1 192.168.122.252
000 %myid = (none)
000 debug none
000
000 virtual_private (%priv):
000 - allowed 6 subnets: 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 25.0.0.0/8, fd00::/8, fe80::/10
000 - disallowed 0 subnets:
000 WARNING: Disallowed subnets in virtual_private= is empty. If you have
000          private address space in internal use, it should be excluded!
000
000 algorithm ESP encrypt: id=2, name=ESP_DES, ivlen=8, keysizemin=64, keysizemax=64
000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192
000 algorithm ESP encrypt: id=6, name=ESP_CAST, ivlen=8, keysizemin=40, keysizemax=128
000 algorithm ESP encrypt: id=7, name=ESP_BLOWFISH, ivlen=8, keysizemin=40, keysizemax=448
000 algorithm ESP encrypt: id=11, name=ESP_NULL, ivlen=0, keysizemin=0, keysizemax=0
000 algorithm ESP encrypt: id=12, name=ESP_AES, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=13, name=ESP_AES_CTR, ivlen=8, keysizemin=160, keysizemax=288
000 algorithm ESP encrypt: id=14, name=ESP_AES_CCM_A, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=15, name=ESP_AES_CCM_B, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=16, name=ESP_AES_CCM_C, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=18, name=ESP_AES_GCM_A, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=19, name=ESP_AES_GCM_B, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=20, name=ESP_AES_GCM_C, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=22, name=ESP_CAMELLIA, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=252, name=ESP_SERPENT, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP encrypt: id=253, name=ESP_TWOFISH, ivlen=8, keysizemin=128, keysizemax=256
000 algorithm ESP auth attr: id=1, name=AUTH_ALGORITHM_HMAC_MD5, keysizemin=128, keysizemax=128
000 algorithm ESP auth attr: id=2, name=AUTH_ALGORITHM_HMAC_SHA1, keysizemin=160, keysizemax=160
000 algorithm ESP auth attr: id=5, name=AUTH_ALGORITHM_HMAC_SHA2_256, keysizemin=256, keysizemax=256
000 algorithm ESP auth attr: id=6, name=AUTH_ALGORITHM_HMAC_SHA2_384, keysizemin=384, keysizemax=384
000 algorithm ESP auth attr: id=7, name=AUTH_ALGORITHM_HMAC_SHA2_512, keysizemin=512, keysizemax=512
000 algorithm ESP auth attr: id=8, name=AUTH_ALGORITHM_HMAC_RIPEMD, keysizemin=160, keysizemax=160
000 algorithm ESP auth attr: id=9, name=AUTH_ALGORITHM_AES_CBC, keysizemin=128, keysizemax=128
000 algorithm ESP auth attr: id=251, name=AUTH_ALGORITHM_NULL_KAME, keysizemin=0, keysizemax=0
000
000 algorithm IKE encrypt: id=0, name=(null), blocksize=16, keydeflen=131
000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, blocksize=8, keydeflen=192
000 algorithm IKE encrypt: id=7, name=OAKLEY_AES_CBC, blocksize=16, keydeflen=128
000 algorithm IKE hash: id=1, name=OAKLEY_MD5, hashsize=16
000 algorithm IKE hash: id=2, name=OAKLEY_SHA1, hashsize=20
000 algorithm IKE hash: id=4, name=OAKLEY_SHA2_256, hashsize=32
000 algorithm IKE hash: id=6, name=OAKLEY_SHA2_512, hashsize=64
000 algorithm IKE dh group: id=2, name=OAKLEY_GROUP_MODP1024, bits=1024
000 algorithm IKE dh group: id=5, name=OAKLEY_GROUP_MODP1536, bits=1536
000 algorithm IKE dh group: id=14, name=OAKLEY_GROUP_MODP2048, bits=2048
000 algorithm IKE dh group: id=15, name=OAKLEY_GROUP_MODP3072, bits=3072
000 algorithm IKE dh group: id=16, name=OAKLEY_GROUP_MODP4096, bits=4096
000 algorithm IKE dh group: id=17, name=OAKLEY_GROUP_MODP6144, bits=6144
000 algorithm IKE dh group: id=18, name=OAKLEY_GROUP_MODP8192, bits=8192
000 algorithm IKE dh group: id=22, name=OAKLEY_GROUP_DH22, bits=1024
000 algorithm IKE dh group: id=23, name=OAKLEY_GROUP_DH23, bits=2048
000 algorithm IKE dh group: id=24, name=OAKLEY_GROUP_DH24, bits=2048
000
000 stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,2,64} trans={0,2,3072} attrs={0,2,2048}
000
000 "openstack_demo": 10.0.1.22/32===10.0.1.22<10.0.1.22>---10.0.0.1...212.xx.xx.xx<212.xx.xx.xx>===172.16.9.0/24; erouted; eroute owner: #2
000 "openstack_demo":     myip=unset; hisip=unset;
000 "openstack_demo":   ike_life: 3600s; ipsec_life: 3600s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
000 "openstack_demo":   policy: PSK+ENCRYPT+TUNNEL+PFS+UP+SAREFTRACK+lKOD+rKOD; prio: 24,32; interface: eth0;
000 "openstack_demo":   dpd: action:hold; delay:30; timeout:120;
000 "openstack_demo":   newest ISAKMP SA: #1; newest IPsec SA: #2;
000 "openstack_demo":   IKE algorithms wanted: AES_CBC(7)_128-SHA1(2)_000-MODP1536(5); flags=-strict
000 "openstack_demo":   IKE algorithms found:  AES_CBC(7)_128-SHA1(2)_160-MODP1536(5)
000 "openstack_demo":   IKE algorithm newest: AES_CBC_128-SHA1-MODP1536
000 "openstack_demo":   ESP algorithms wanted: AES(12)_128-SHA1(2)_000; pfsgroup=MODP1536(5); flags=-strict
000 "openstack_demo":   ESP algorithms loaded: AES(12)_128-SHA1(2)_160
000 "openstack_demo":   ESP algorithm newest: AES_128-HMAC_SHA1; pfsgroup=MODP1536
000
000 #2: "openstack_demo":4500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 2659s; newest IPSEC; eroute owner; isakmp#1; idle; import:admin initiate
000 #2: "openstack_demo" esp.e2d809f6@212.xx.xx.xx esp.6d519656@10.0.1.22 tun.0@212.xx.xx.xx tun.0@10.0.1.22 ref=0 refhim=4294901761
000 #1: "openstack_demo":4500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 2857s; newest ISAKMP; lastdpd=12s(seq in:20937 out:0); idle; import:admin initiate
000

Die Zeilen “openstack_demo”:4500 STATE_QUICK_I2 (sent QI2, IPsec SA established);” und “openstack_demo”:4500 STATE_MAIN_I4 (ISAKMP SA established); zeigen das die Verbindung erfolgreich aufgebaut wurde.

Mit dem Ping-Befehl können Sie überprüfen ob Instanzen über das VPN errichbar sind. Bitte beachten Sie, das sie hier die IP-Adresse einer existierenden Instanz verwenden müssen. Die im Beispiel gezeigte, dient nur der Demonstration.

$ ping ping -c 3 172.16.9.5
PING 172.16.9.5 (172.16.9.5) 56(84) bytes of data.
64 bytes from 172.16.9.5: icmp_seq=1 ttl=63 time=1.58 ms
64 bytes from 172.16.9.5: icmp_seq=2 ttl=63 time=1.63 ms
64 bytes from 172.16.9.5: icmp_seq=3 ttl=63 time=1.45 ms

--- 172.16.9.5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.459/1.558/1.633/0.073 ms

Windows Shrew Soft VPN Client

Unter Windows hat sich der IPSec Client von Shrew Soft für die VPN Verbindung zu Openstack bewährt. Sie können die aktuelle Version hier https://www.shrew.net/download/vpn/vpn-client-2.2.2-release.exe herunterladen. Die Standard Version ist kostenlos.

Nachdem Sie den Client installiert haben, erstellen Sie eine Verbindung zu OpenStack wie folgt.

win_vpn_1

Wählen Sie den Button ‘Add’ um eine neue Verbindung zu erstellen.

win_vpn_2

Unter ‘General’ geben Sie die IP-Adresse Ihres Openstack Routers ein. Ausserdem setzen Sie ‘Auto Configuration’ auf ‘disable’ und ‘Adapter Mode’ auf ‘Use an existing adapter and current address’.

win_vpn_3

Die Einstellungen Unter ‘Client’ bleiben auf den Voreinstellungen.

win_vpn_4

win_vpn_5

Bei ‘Name Resolution’ können Sie die IP Adresse ihres Jumphosts eintragen, falls Sie dort die DNS Namen ihrer Instanzen eingetragen haben. WINS Auflösung sollte nicht aktiviert werden.

win_vpn_6

Als ‘Authentication Method’ ist ‘Mutual PSK’ zu wählen und ihr ‘Pre-Shared Key string’ einzutragen. Alle anderen Einstellung bleiben auf den Voreinstellungen.

win_vpn_7

win_vpn_8

Phase 1:

Exchange Type: main

DH Exchange: group 5

Cipher Algorithm: aes

Cipher Key Length: 128 Bits

Hash Algorithm: sha1

Alle weiteren Einstellungen bleiben wie sie sind.

Phase 2:

Transform Algorithm: esp-aes

Transform Key Length: 128 Bits

HMAC Algorithm: sha1

PFS Exchange: group 5

Alle weiteren Einstellungen bleiben wie sie sind.

win_vpn_9

Fügen Sie mit ‘Add’ ihr Openstack Subnetz hinzu, nachdem Sie die Optionen wie im Screenshot gezeigt gesetzt haben. Speichern Sie die Einstellungen.

Mit ‘Connect’ können Sie jetzt die Verbindung herstellen.

zurück zur Übersicht