VPNaaS vereinfacht auf Fujitsu K5

2017-11-18

VPNaaS vereinfacht auf Fujitsu K5

Machine-translated — the English original is authoritative.

Oftmals habe ich auf unseren Cloud-Surgery-Calls Anfragen dazu, wie man Virtual Private Networks (IPSec-VPNs) zwischen den verschiedenen Public Clouds und Kundenstandorten einrichtet.

Zweck dieses Blogs ist es, den Prozess zur Einrichtung eines solchen sicheren Tunnels mit der auf Fujittus Cloud Service K5 verfügbaren VPNaaS-Funktion zu demonstrieren.

Voraussetzungen

Der wichtigste Schlüssel zum Erfolg hier ist die Vorbereitung – die meisten Probleme treten auf, wenn die VPN-Konfiguration des Kunden und die VPN-Konfigurationen von K5 nicht mit denselben Voraussetzungen programmiert sind. Um diesen Prozess für Sie zu vereinfachen, haben wir bei CNETS eine einfache VPNaaS-Vorlage zusammengestellt, die durch Klicken auf das Bild unten heruntergeladen und mit dem Kunden geteilt werden kann. Bitte stellen Sie sicher, dass dieses Dokument verstanden, vereinbart und ausgefüllt ist, bevor Sie versuchen, Ihren Dienst aufzubauen – klingt vernünftig, hoffe ich – Sie würden überrascht sein, wie oft die Leute diesen Schritt überspringen.

vpndoc

Eine weitere Voraussetzung in Ihrer Cloud-Umgebung ist, dass Sie das virtuelle Netzwerk, das Subnetz, den Router bereits erstellt und dem virtuellen Router eine Global IP (öffentliche IP-Adresse) hinzugefügt haben.

Sobald Sie diese Voraussetzungen erfüllt haben, ist es an der Zeit, Ihren VPN aufzubauen.

OpenStack IPSec VPNaaS Tool

Auch hier kommt CNETS zur Rettung, es sei denn, Sie genießen es, alle notwendigen API-Aufrufe manuell zu erstellen. Wir haben eine auf Angular basierende Benutzeroberfläche entwickelt, um alle notwendigen API-Aufrufe zum Erstellen und Konfigurieren Ihres VPNaaS zu vereinfachen. Das Tool befindet sich hier – https://cnets-vpnaas.uk-1.cf-app.net/ und erfordert ein gültiges administratives Vertragskonto für den Fujitsu Cloud Service K5 zum Anmelden.

VPNTool

Ich habe auch das folgende Diagramm erstellt, um zu veranschaulichen, was in einem bald zu veröffentlichenden Video konfiguriert wird … sobald ich meine OBS-Aufzeichnungssoftware dazu bringen kann, wieder gut zu spielen. Ich werde zwei Subnetze über zwei K5-Regionen hinweg verbinden – ein Subnetz befindet sich in unserer US-Region und das andere Subnetz in unserer UK-Region. Der exakt gleiche Prozess wird verwendet, wenn die VPNaaS von K5 konfiguriert wird, um VPNaaS-Angebote in anderen öffentlichen/privaten Clouds oder Kunden-VPN-Geräten zu verbinden.

K5NetworkingInterVPN

Hinweis: Ein grundlegendes Konzept, das verstanden werden muss, ist, dass Sie nur ein Layer-3-Subnetz mit einem anderen Layer-3-Subnetz verbinden. Was ich damit meine, ist, dass ich im folgenden Beispiel das Subnetz 192.168.10.0/24 in der UK-Region und das Subnetz 192.168.0.0/24 in der US-Region zum IPSec-VPN hinzufüge (diese Subnetz-CIDRs sollten sich nicht überschneiden). Sobald der VPN-Tunnel hergestellt und die richtigen Sicherheitsgruppen angewendet wurden, kann Server A mit Server C kommunizieren und umgekehrt. Server B und Server D können jedoch NICHT miteinander kommunizieren. Ein zusätzlicher Proxy-Dienst wäre auf jedem der VPN-Peer-Subnetze erforderlich, um den Datenverkehr von Server B und Server D durch den VPN-Tunnel zu leiten.

Da es kurz vor Weihnachten ist und wir bei CNETS diese Woche voller festlicher Stimmung sind (zumindest bin ich das), habe ich eine letzte Überraschung für Sie – für diejenigen von Ihnen, die gerne mitmachen, habe ich unten auch die beiden Heat-Vorlagen eingefügt, die ich für die Demo verwendet habe, um die Infrastruktur im obigen Diagramm aufzubauen. Vergessen Sie nicht, die Eingabeparameter und DNS-Einstellungen anzupassen, um Ihre Ziel-AZ zu entsprechen, wenn Sie sie auf Fujittus Cloud Service K5 verwenden. Diese Vorlagen sollten auch mit anderen OpenStack-Clouds funktionieren.

Heat Template Project A

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden können, als es unten erscheint. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Erfahren Sie mehr über bidirektionale Unicode-Zeichen

Versteckte Zeichen anzeigen

heat_template_version: 2013-05-23
# Author: Graham Land
# Date: 15/11/2017
# Purpose: Demo IPSec VPNaaS – Base for Project A
#
# Twitter: @allthingsclowd
# Blog: https://allthingscloud.eu
#
#
description: Template for VPNaaS (IPSec) Demo Project A – Two Networks and a Router with two Servers A & B
# Input parameters
parameters:
k5_image:
type: string
label: Image name or ID
description: Image to be used for compute instance
default: "Ubuntu Server 16.04 LTS (English) 01"
flavor:
type: string
label: Flavor
description: Type of instance (flavor) to be used
default: "P-1"
ssh_key_pair:
type: string
label: Key name
description: Name of key-pair to be used for compute instance
default: "LEMP-KP-AZ1"
availability_zone:
type: string
label: Availability Zone
description: Region AZ to use
default: "uk-1a"
my_ip:
type: string
label: The IP Address (CIDR format) of My PC on the Internet
description: PC Internet IP Address (CIDR format)
default: "31.53.253.24/32"
# K5 Infrastructure resources to be built
resources:
# Create a private network
private_network_a:
type: OS::Neutron::Net
properties:
availability_zone: { get_param: availability_zone }
name: "Network-A"
# Create a new subnet on the private network
private_subnet_a:
type: OS::Neutron::Subnet
depends_on: private_network_a
properties:
availability_zone: { get_param: availability_zone }
name: "Subnetwork-A"
network_id: { get_resource: private_network_a }
cidr: "192.168.0.0/24"
gateway_ip: "192.168.0.254"
allocation_pools:
– start: "192.168.0.100"
end: "192.168.0.150"
dns_nameservers: ["62.60.39.9", "62.60.42.9"]
# Create a second private network
private_network_b:
type: OS::Neutron::Net
properties:
availability_zone: { get_param: availability_zone }
name: "Network-B"
# Create a new subnet on the second private network
private_subnet_b:
type: OS::Neutron::Subnet
depends_on: private_network_b
properties:
availability_zone: { get_param: availability_zone }
name: "Subnetwork-B"
network_id: { get_resource: private_network_b }
cidr: "10.0.0.0/24"
gateway_ip: "10.0.0.254"
allocation_pools:
– start: "10.0.0.100"
end: "10.0.0.150"
dns_nameservers: ["62.60.39.9", "62.60.42.9"]
# Create a virtual router
virtual_router:
type: OS::Neutron::Router
properties:
availability_zone: { get_param: availability_zone }
name: "Simple-Virtual-Router"
# Connect an interface on the private network's subnet to the router
virtual_router_interface_1:
type: OS::Neutron::RouterInterface
depends_on: virtual_router
properties:
router_id: { get_resource: virtual_router }
subnet_id: { get_resource: private_subnet_a }
# Connect an interface on the private network's subnet to the router
virtual_router_interface_2:
type: OS::Neutron::RouterInterface
depends_on: virtual_router
properties:
router_id: { get_resource: virtual_router }
subnet_id: { get_resource: private_subnet_b }
# Create security group
security_group:
type: OS::Neutron::SecurityGroup
properties:
description: VPN Security Group
name: VPN-SG
rules:
# allow inbound traffic from remote VPN subnet
– remote_ip_prefix: 192.168.10.0/24
protocol: tcp
– remote_ip_prefix: 192.168.10.0/24
protocol: icmp
# allow inbound traffic from my remote PC
– remote_ip_prefix: { get_param: my_ip }
protocol: icmp
– remote_ip_prefix: { get_param: my_ip }
protocol: tcp
port_range_min: 22
port_range_max: 22
################### Server A ################################################################
# Create a system volume for use with the server
server-A-sys-vol:
type: OS::Cinder::Volume
properties:
availability_zone: { get_param: availability_zone }
name: "Server-A-boot-vol"
size: 3
volume_type: "M1"
image : { get_param: k5_image }
server-A-port:
type: OS::Neutron::Port
depends_on: private_network_a
properties:
availability_zone: { get_param: availability_zone }
network_id: { get_resource: private_network_a }
name: "Server-A-Port"
fixed_ips:
– subnet_id: { get_resource: private_subnet_a }
security_groups: [{ get_resource: security_group }]
# Build a server using the system volume defined above
server-A:
type: OS::Nova::Server
depends_on: server-A-port
properties:
availability_zone: { get_param: availability_zone }
key_name: { get_param: ssh_key_pair }
image: { get_param: k5_image }
flavor: { get_param: flavor }
admin_user: ubuntu
metadata: { "fcx.autofailover": True }
block_device_mapping: [{"volume_size": "3", "volume_id": {get_resource: server-A-sys-vol}, "delete_on_termination": True, "device_name": "/dev/vda"}]
name: "Server-A"
networks:
– port: { get_resource: server-A-port }
###########################################################################################################
################### Server B ################################################################
# Create a system volume for use with the server
server-B-sys-vol:
type: OS::Cinder::Volume
depends_on: private_network_b
properties:
availability_zone: { get_param: availability_zone }
name: "Server-B-boot-vol"
size: 3
volume_type: "M1"
image : { get_param: k5_image }
# Build a server using the system volume defined above
server-B:
type: OS::Nova::Server
properties:
availability_zone: { get_param: availability_zone }
key_name: { get_param: ssh_key_pair }
image: { get_param: k5_image }
flavor: { get_param: flavor }
admin_user: ubuntu
metadata: { "fcx.autofailover": True }
block_device_mapping: [{"volume_size": "3", "volume_id": {get_resource: server-B-sys-vol}, "delete_on_termination": True, "device_name": "/dev/vda"}]
name: "Server-B"
networks:
– network: { get_resource: private_network_b }
###########################################################################################################

view raw
VPNDemoProjectA.YML
hosted with ❤ by GitHub

Heat Template Project B

Diese Datei enthält versteckte oder bidirektionale Unicode-Zeichen, die anders interpretiert oder kompiliert werden können, als es unten erscheint. Um sie zu überprüfen, öffnen Sie die Datei in einem Editor, der versteckte Unicode-Zeichen anzeigt.
Erfahren Sie mehr über bidirektionale Unicode-Zeichen

Versteckte Zeichen anzeigen

heat_template_version: 2013-05-23
# Author: Graham Land
# Date: 15/11/2017
# Purpose: Demo IPSec VPNaaS – Base for Project B – Two Networks and a Router with two Servers C & D
#
# Twitter: @allthingsclowd
# Blog: https://allthingscloud.eu
#
#
description: Template for VPNaaS (IPSec) Demo Project B – Two Networks and a Router with two Servers C & D
# Input parameters
parameters:
k5_image:
type: string
label: Image name or ID
description: Image to be used for compute instance
default: "Ubuntu Server 16.04 LTS (English) 01"
flavor:
type: string
label: Flavor
description: Type of instance (flavor) to be used
default: "P-1"
ssh_key_pair:
type: string
label: Key name
description: Name of key-pair to be used for compute instance
default: "LEMP-KP-AZ2"
availability_zone:
type: string
label: Availability Zone
description: Region AZ to use
default: "uk-1b"
my_ip:
type: string
label: The IP Address (CIDR format) of My PC on the Internet
description: PC Internet IP Address (CIDR format)
default: "31.53.253.24/32"
# K5 Infrastructure resources to be built
resources:
# Create a private network
private_network_a:
type: OS::Neutron::Net
properties:
availability_zone: { get_param: availability_zone }
name: "Network-C"
# Create a new subnet on the private network
private_subnet_a:
type: OS::Neutron::Subnet
depends_on: private_network_a
properties:
availability_zone: { get_param: availability_zone }
name: "Subnetwork-C"
network_id: { get_resource: private_network_a }
cidr: "192.168.10.0/24"
gateway_ip: "192.168.10.254"
allocation_pools:
– start: "192.168.10.100"
end: "192.168.10.150"
dns_nameservers: ["62.60.39.9", "62.60.42.9"]
# Create a second private network
private_network_b:
type: OS::Neutron::Net
properties:
availability_zone: { get_param: availability_zone }
name: "Network-D"
# Create a new subnet on the second private network
private_subnet_b:
type: OS::Neutron::Subnet
depends_on: private_network_b
properties:
availability_zone: { get_param: availability_zone }
name: "Subnetwork-D"
network_id: { get_resource: private_network_b }
cidr: "10.0.10.0/24"
gateway_ip: "10.0.10.254"
allocation_pools:
– start: "10.0.10.100"
end: "10.0.10.150"
dns_nameservers: ["62.60.39.9", "62.60.42.9"]
# Create a virtual router
virtual_router:
type: OS::Neutron::Router
properties:
availability_zone: { get_param: availability_zone }
name: "Simple-Virtual-Router"
# Connect an interface on the private network's subnet to the router
virtual_router_interface_1:
type: OS::Neutron::RouterInterface
depends_on: virtual_router
properties:
router_id: { get_resource: virtual_router }
subnet_id: { get_resource: private_subnet_a }
# Connect an interface on the private network's subnet to the router
virtual_router_interface_2:
type: OS::Neutron::RouterInterface
depends_on: virtual_router
properties:
router_id: { get_resource: virtual_router }
subnet_id: { get_resource: private_subnet_b }
# Create security group
security_group:
type: OS::Neutron::SecurityGroup
properties:
description: VPN Security Group
name: VPN-SG
rules:
# allow inbound traffic from remote VPN subnet
– remote_ip_prefix: 192.168.0.0/24
protocol: tcp
– remote_ip_prefix: 192.168.0.0/24
protocol: icmp
# allow inbound traffic from my remote PC
– remote_ip_prefix: { get_param: my_ip }
protocol: icmp
– remote_ip_prefix: { get_param: my_ip }
protocol: tcp
port_range_min: 22
port_range_max: 22
################### Server A ################################################################
# Create a system volume for use with the server
server-A-sys-vol:
type: OS::Cinder::Volume
properties:
availability_zone: { get_param: availability_zone }
name: "Server-C-boot-vol"
size: 3
volume_type: "M1"
image : { get_param: k5_image }
server-A-port:
type: OS::Neutron::Port
properties:
availability_zone: { get_param: availability_zone }
network_id: { get_resource: private_network_a }
name: "Server-C-Port"
fixed_ips:
– subnet_id: { get_resource: private_subnet_a }
security_groups: [{ get_resource: security_group }]
# Build a server using the system volume defined above
server-A:
type: OS::Nova::Server
depends_on: private_network_a
properties:
availability_zone: { get_param: availability_zone }
key_name: { get_param: ssh_key_pair }
image: { get_param: k5_image }
flavor: { get_param: flavor }
admin_user: ubuntu
metadata: { "fcx.autofailover": True }
block_device_mapping: [{"volume_size": "3", "volume_id": {get_resource: server-A-sys-vol}, "delete_on_termination": True, "device_name": "/dev/vda"}]
name: "Server-C"
networks:
– port: { get_resource: server-A-port }
###########################################################################################################
################### Server B ################################################################
# Create a system volume for use with the server
server-B-sys-vol:
type: OS::Cinder::Volume
depends_on: private_network_b
properties:
availability_zone: { get_param: availability_zone }
name: "Server-D-boot-vol"
size: 3
volume_type: "M1"
image : { get_param: k5_image }
# Build a server using the system volume defined above
server-B:
type: OS::Nova::Server
properties:
availability_zone: { get_param: availability_zone }
key_name: { get_param: ssh_key_pair }
image: { get_param: k5_image }
flavor: { get_param: flavor }
admin_user: ubuntu
metadata: { "fcx.autofailover": True }
block_device_mapping: [{"volume_size": "3", "volume_id": {get_resource: server-B-sys-vol}, "delete_on_termination": True, "device_name": "/dev/vda"}]
name: "Server-D"
networks:
– network: { get_resource: private_network_b }
###########################################################################################################

view raw
VPNDemoProjectB.YML
hosted with ❤ by GitHub

Video-Demo folgt in Kürze.

Happy Tunneling!

Graham

Originally published on allthingscloud.eu (2017-11-18).

← All posts