Eine Point-to-Site- oder kurz P2S-VPN-Verbindung schützt die Kommunikation mit PaaS-Diensten. Wie Developer eine solches VPN zwischen Windows-10-Client und Azure Cloud schnell bereitstellen kann, zeigt folgender Beitrag.
Entwickler und Entwicklerinnen nutzen für Test-Szenarien zunehmend Backend-Dienste in der Cloud, beispielsweise eine relationale Datenbank „as a Service“, um einfache Schnittstellen-Tests durchführen zu können. Doch gerade bei Verbindungen zwischen On-Premises-Servern und Cloud-PaaS ist es oft nicht erwünscht, dass diese wie in der Public Cloud üblich über öffentliche IP-Adressen und das Internet laufen.
Abhilfe schafft eine Point-to-Site-Verbindung (P2S VPN), beispielsweise zwischen einem Windows-10-Client und Microsoft Azure. Derartige Hybrid-Szenarien sind in der Public Cloud häufig anzutreffen und bilden neben der Nutzung von Cloud-Speicher für viele Entwickler den ersten Berührungspunkt mit der Cloud.
Azure Virtual Network Gateway
Azure stellt zu diesem Zweck einen verwalteten Dienst „Gateway für virtuelle Netzwerke“ zur Verfügung mit dem Sie sehr komfortabel IPSEC-basierende Site-to-Site und Client-to-Site-VPNs realisieren können. Die Standortvernetzung richtet sich an Unternehmen, die über ein öffentlich zugängliches Netzwerk und ein vom Site-to-Site-Dienst unterstütztes VPN-Gerät z. B. von Arista, Checkpoint, Cisco, Fortinet, Juniper, Sophos oder Zyxel verfügen. Entwickler können mit dem Dienst aber auch schnell und einfach ein SSL-basiertes P2S-VPN mit Hilfe von Zertifikaten und z. B. Microsofts SSTP-Protokoll einrichten.
VNET in Azure
Dazu müssen Sie in Azure zunächst das gewünschte virtuelle Netzwerk erzeugen. Erstellen Sie dazu in Azure ein virtuelles Netzwerk mit beliebigen Namen mit einem frei wählbaren Adressbereich zwischen /16 und /28, z. B. 10.3.0.0/16 für das VNet. Dieses unterteilen Sie in drei Subnetze …
FrontEnd – für aus dem Internet erreichbaren virtuelle Server
BackEnd“ – für die virtuellen Server, die nur via VPN erreichbar sein sollen und
GatewaySubnet – für das virtuelle Gateway-Geräte, sozusagen ihre DMZ in der Cloud.
Die beiden erstgenannten können Sie entweder direkt beim Anlegen des VNets definieren oder später bei bereits erstelltem VNet in der Konsole für den Dienst „Virtuelle Netzwerke“ im Menü „Subnetz“ mit „+Subetz“ manuell anlegen. Dem „Gatewaysubnetz“ kommt eine besondere Bedeutung zu. Es ist ausschließlich für das virtuelle Netzwerk Gateway von Azure bestimmt, das seinerseits ein verwalteter Dienst ist.
Da dazu die Routen des Default-Gateways für das betreffende (assoziierte) Subnetz angepasst werden müssten, hat Microsoft die Funktion „+Gatewaysubnetz“ in das Menü „Subnetze“ eingebaut. Darüber lässt sich ein passend konfiguriertes Subnetz einschließlich angepasster System-Routen automatisch erstellen, ohne spezielle Routingtabellen oder Netzwerk Security Groups. Fügen Sie einfach das Gateway-Subnetz mit entsprechend kleinen Host-Anteil (wir verwenden /27) hinzu. Das reicht immer noch für 32 IP-Adressen.
Gateway für virtuell Netzwerke erstellen
Anschließend können Sie im Azure Marketplace nach „Gateways für virtuelle Netzwerke“ suchen und ein solches mit „Hinzufügen“ erstellen. Im Dialog „Gateway für virtuelle Netzwerke“ bedarf es nicht vieler Angaben. Wählen Sie dazu das zu verwendende Abonnement und dann die gewünschte Ressource-Gruppe aus, die auch das oben erstellte Subnetz enthält, bzw. in der gleichen Region ist, wie die Subnetze. Außerdem geben Sie dem Gerät einen Namen, wählen als „Gatewaytyp“ den Eintrag „VPN“ und als „VPN-Typ“ den Eintrag „Routenbasiert“ (beides Default).
Schließlich benötigen Sie eine SKU (Stock Keeping Unit). Wir verwenden für diese Demo die preiswertestes SKU für Routen-basierende Typen „VpnGw1“ mit „Generation 1“. Diese kostet in Deutschland (Frankfurt) 0,1603 Euro/Stunde für den generellen Betrieb und 0,0009 Euro/Stunde für jedem aktiv genutzten VPN-Tunnel (Verbindung). Die maximal erzielbare Bandbreite liegt dann bei 650 Megabit pro Sekunde (Mbit/s). Alle bisher erstellen Netzwerk-Ressourcen kosten dagegen nichts.
Bei „Virtuelles Netzwerk“ wählen Sie das oben erstellte Netzwerk aus. Bei „Öffentliche IP-Adresse“ nehmen Sie „neu erstellen“, vergeben einen passenden Namen (Alias) für die öffentliche IP-Adresse und belassen die übrigen Werte auf Default. Sind alle Angaben korrekt, klicken Sie auf „Überprüfen und Erstellen“. Der Vorgang kann durchaus bis zu 30 Minuten in Anspruch nehmen. Bevor Sie das Gerät im nächsten Schritt konfigurieren können, nutzen Sie die Wartezeit bis zu dessen finaler Erstellung, um die für ein Client-to-Site-VPN benötigten SSL-Zertifikate unter Windows zu generieren.
Generieren von Zertifikaten
Azure kann bei P2S-VPNs u. a. eine native Azure-Zertifikatauthentifizierung nutzen. Ebenfalls möglich sind eine Authentifizierung mittels Azure AD oder Radius) für die Authentifizierung der Clients, die eine Verbindung mit einem VNet über eine Point-to-Site-VPN-Verbindung herstellen möchten.
Dazu müssen Sie entsprechende Informationen zum öffentlichen Schlüssel des Stammzertifikates – in Form der zum Stammzertifikat gehörigen CER-Datei (öffentliche Schlüssel) – in das Azure VPN-Gateway hochladen. Diese Datei findet sich auf dem Client, der die Verbindung zu Azure initiiert. Dadurch wird das entsprechende Stammzertifikat von Azure als „vertrauenswürdig“ für die Verbindung mit dem virtuellen Netzwerk über eine P2S-Verbindung eingestuft.
Das passende Client-Zertifikat generieren Sie aus dem vertrauenswürdigen Stammzertifikat und installieren es auf dem betreffenden Client-PCs. Das Client-Zertifikat authentifiziert dann den Client, sobald dieser eine Verbindung mit dem VNet initiiert.
Wenn Sie wie im folgenden Beispiel ein selbstsigniertes Stammzertifikat auf einem Windows-10-PC erzeugen und Diesen ebenfalls als Client für die Verbindung zu Azure nutzen, wird das Client-Zertifikat auf diesem automatisch installiert. In ausschließlich diesem Fall müssen Sie das Client-Zertifikat also nicht erst exportieren, um es auf dem betreffenden Client zu installieren.
Stamm-CA- und Client-Zertifikat können Sie (neben anderen Methoden wie Easy-RSA) ganz einfach von Windows aus mit folgenden PowerShhell-Commandlets erzeugen und über die Zertifikatsverwaltung (certmgr.msc) exportieren. Der folgende Befehl generiert ein selbstsigniertes Stammzertifikat mit dem Namen P2SRootCert. Dieses wird dabei automatisch in „Certificates-Current User\Personal\Certificates“ installiert.
$cert = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=P2SRootCert" \
-KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -CertStoreLocation \ "Cert:\CurrentUser\My" -KeyUsageProperty Sign -KeyUsage CertSign
Danach können Sie wie folgt ein Client (Child)-Zertifikat erzeugen:
New-SelfSignedCertificate -Type Custom -DnsName P2SChildCert -KeySpec Signature \
-Subject "CN=P2SChildCert" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 \
-CertStoreLocation "Cert:\CurrentUser\My" -Signer $cert -TextExtension \ @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
Klicken Sie dort auf „Weiter“ und dann unbedingt auf „Nein, privaten Schlüssel nicht exportieren“. Danach wählen Sie im Zertifikatexport-Assistent den Eintrag „Base-64-codiert X.500“. Wählen Sie anschließend den gewünschten Speicherort und speichern den Schlüssel und einem beliebigen Namen ab z. B. „rootcertificate.cer“.