Creando una conexión VPN entre Oracle Cloud Infraestructura y otros proveedores cloud.
En este artículo se explica la manera de crear una conexión VPN IPSec segura y encriptada entre Oracle Cloud Infrastructure y diferentes proveedores de nube como Amazon Web Services (AWS), Google Cloud Platform (GCP), entre otros. El proceso se realizará conectando GCP contra OCI, pero puede ser replicado con otras nubes.
Se dan los pasos para aprovisionar un compute engine en GCP, definiendo la red, reglas de acceso y enrutamientos, todo esto usando Google SDK CLI. Posteriormente se crearán en la consola de OCI el CPE respectivo, el DRG, las listas de seguridad, tablas de ruta y la conexión IPSec hacia GCP.
Arquitectura propuesta
Libreswan usa los términos “left” y “right” para describir los endpoints. Para este caso se usará la nube de Oracle como LEFT y la de Google como RIGHT.
|
Oracle Cloud Infraestructure |
Google Cloud Platform |
|
VCN 10.0.0.0/16 |
VPC 172.16.0.0/24 |
|
VPN IP Address: 140.204.2.51 140.204.2.63 |
Libreswan Public IP: 34.95.28.231 |
(Nota, las IPs públicas de Oracle se obtienen cuando se esté configurando la conexión IPSec, se incluyen acá para dar una guía general)
De acuerdo a los parámetros anteriores iniciamos con la configuración en GCP y para esto usaremos el SDK de Google Cloud
Configuración del lado derecho (Right side), Google Cloud
gcloud compute networks subnets create vpn-subnet --network vpn-network --region northamerica-northeast1 --range 172.16.0.0/24
gcloud compute instances create vpn-libreswan --image-family centos-8 --image-project centos-cloud --can-ip-forward --subnet vpn-subnet --zone northamerica-northeast1-a --tags vpn-gateway
gcloud compute instances create test-vpn --image-family centos-8 --image-project centos-cloud --subnet vpn-subnet --tags vpn --zone northamerica-northeast1-b
gcloud compute routes create vpnnetwork-to-gateway --destination-range 10.0.0.0/16 --next-hop-address 172.16.0.6 --network vpn-network --tags vpn
gcloud compute firewall-rules create ssh --source-ranges 0.0.0.0/0 --allow tcp:22 --network vpn-network
gcloud compute firewall-rules create allow-internal --source-ranges 172.16.0.0/24 --allow tcp:1-65535,udp:1-65535,icmp --network vpn-network
gcloud compute firewall-rules create allow-ipsec-nat --source-ranges 0.0.0.0/0 --allow tcp:4500,tcp:500,udp:4500,udp:500 --network vpn-network --target-tags vpn-gateway
gcloud compute firewall-rules create from-onprem --source-ranges 10.0.0.0/16 --allow tcp:1-65535,udp:1-65535,icmp --network vpn-network --target-tags vpn
sudo yum install libreswan
Antes de seguir con la configuración de libreswan, se debe terminar de aprovisionar el CPE, DRG, tabla de ruta y lista de seguridad en Oracle Cloud Infraestructure. El dato del CPE es la dirección pública de la instancia de libreswan. 34.95.28.231
Configuración del lado izquierdo (Left side), Oracle Cloud
CPE de GCP
EL DRG está asociado a la VCN 10.0.0.0/16
Luego de creada la conexión IPSec, se obtienen las ips públicas de parte de Oracle para la configuración de la vpn libreswan. IP 140.204.2.51 y 140.204.2.63
Se debe editar cada túnel para usar IKEv2 en la configuración de la VPN.
Obtemenos el PSK para la autenticación
Finalizando la configuración de la VPN en Libreswan.
Ahora, en la instancia de Libreswan en Google Cloud Platform se crea un archivo de configuración llamado, oci.conf. en la ruta /etc/ipsec.d/
conn oci1
authby=secret
auto=start
salifetime=3600s
leftid=140.204.2.51 #OCI DRG IPSec Public IP
left=140.204.2.51 #OCI DRG IPSec Public IP
leftsubnet=0.0.0.0/0
right=172.16.0.6 #GCP Libreswan local VPC internal address
rightid=34.95.28.231 #GCP Libreswan Public IP address
rightsubnet=0.0.0.0/0 #GCP VPC CIDR
mark=5/0xffffffff
vti-interface=vti0
vti-routing=no
ikev2=insist
ike=aes_cbc256-sha2_384;modp1536
phase2alg=aes_gcm256;modp1536
encapsulation=yes
ikelifetime=28800s
conn oci2
authby=secret
auto=start
salifetime=3600s
leftid=140.204.2.63 #OCI DRG IPSec Public IP
left=140.204.2.63 #OCI DRG IPSec Public IP
leftsubnet=0.0.0.0/0
right=172.16.0.6 #GCP Libreswan local VPC internal address
rightid=34.95.28.231 #GCP Libreswan Public IP address
rightsubnet=0.0.0.0/0 #GCP VPC CIDR
mark=6/0xffffffff
vti-interface=vti2
vti-routing=no
ikev2=insist
ike=aes_cbc256-sha2_384;modp1536
phase2alg=aes_gcm256;modp1536
encapsulation=yes
ikelifetime=28800s
Y para la autenticación se crea un archivo con el siguiente formato que contenga las llaves secreta de los dos tuneles IPSec de la consola de OCI.
/etc/ipsec.d/oci.secrets
#OCI_-IP-IPSEC-Tunels GCP_Libreswan-PublicIP : PSK "DRG Secret Key"
140.204.2.51 34.95.28.231 : PSK "xxxxxxxx"
140.204.2.63 34.95.28.231 : PSK "zzzzzzzz"
Y dentro de la instancia de libreswan se añade la ruta estática para enviar el tráfico a la VCN a través de los tuneles IPSec
ip route add 10.0.0.0/16 nexthop dev vti0 nexthop dev vti2
Se configura el IP Forwarding en la instancia. En el archivo /etc/sysctl.conf se ingresan los siguientes valores y aplican con el comando sudo sysctl -p
net.ipv4.ip_forward=1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0
Se reinicia el servicio IPSec
service ipsec restart
Y se verifica el status de la VPN.
ipsec status
Y si todo es correcto, al final debemos ver dos líneas que incluye
STATE_V2_IPSEC_I (IPsec SA established)
Y en la consola de OCI
Probando conectividad entre nubes
Desde una instancia en GCP se accede a una máquina de Oracle Cloud
Y desde una instancia compute de OCI hacia un cliente en GCP, se prueba el acceso por ssh
Más Información
https://docs.cloud.oracle.com/iaas/Content/Network/Concepts/libreswan.htm
https://docs.cloud.oracle.com/iaas/Content/Network/Reference/libreswanCPE.htm