Jak zestawić połączenie VPN do Atman Cloud korzystając z VPNaaS ?

Poniżej znajduje się krótki i esencjonalny opis, omawiający w jaki sposób możemy zestawić połączenie VPN IPSEC to Atman Cloud.

  • posiadamy już przygotowany projekt w Atman Cloud
  • mamy także działające środowisko z conajmniej jedną podsiecią, routerem oraz przypisanym publicznym statycznym adresem IP
  • środowisko po drugiej stronie tunelu VPN także znajdują się za routerem z publicznym statycznym adresem IP
  • zestawiamy połączenie point-to-point czyli tunnel mając na celu połączenie zewnętrznej infrastruktury typu legacy z Atman Cloud

Dodatnie polityki IKE

Przechodzimy do zakładki Atman Cloud – Project – Network – VPN

Definiowanie rekomendowanych parametrów polityki IKE

  • Encryption algorithm AES-256
  • IKE version V2
  • Perfect Forward Secrecy GROUP14

Definiowanie rekomendowanych parametrów polityki IPsec

  • Encryption algorithm AES-256
  • Perfect Forward Secrecy GROUP14

Dodanie usługi VPN do istniejącej usługi routera w naszym projekcie

  • Musimy posiadać już wcześniej utworzony router VPN-ROUTER pod który podpinamy usługę VPNaaS

Usługa prawidłowo pozostaje ze statusem PENDING CREATE:

Dodanie grupy podsieci po obu stronach tunelu – wewnętrzne oraz wewnętrzne

  • Siecią zewnętrzna w tym przykładzie jest 10.12.45.0/24 która znajduje się poza środowiskiem Atman Cloud
  • Siecią wewnętrzną jest jedna z naszych sieci w projekcie z adresacją 10.110.0.0/24

Dodanie połączenie IPsec

  • W naszym przypadku peer gateway czyli środowisko z drugiej strony tunela VPN jest terminowane na adresie 85.194.242.33
  • Definiujemy identyfikator potrzebny do zestawienia połączenia pomiędzy oboma środowiskami – jest to zmienna tekstowa atman
  • Podajemu statyczne hasło-klucz Pre-Shared Key PSK służace do bezpiecznego zestawienia połączenia, po obu stronach

  • definiejemy zachowanie się tunelu w momencie jego zerwania – decycydując się na RESTART automatyczny

Jest to komplet kroków konieczny do wykonania po stronie Atman Cloud.

W naszym scenariuszu drugą końcówką, używaną do zestawienia połączenia VPN IPsec będzie system Linux Ubuntu 18.04.

Aktualizacja systemu

$ sudo apt-get update 
$ sudo apt-get upgrade

Instalacja klienta IPsec

$ sudo apt-get install strongswan

Konfiguracja klienta IPsec

$ sudo nano /etc/ipsec.conf 

# ipsec.conf - strongSwan IPsec configuration file
# Atman Cloud configuration
config setup
conn atman
        authby=psk
        auto=route
        closeaction=restart
        dpdaction=clear
        esp=aes256-sha1-modp2048!
        fragmentation=yes
        ike=aes256-sha1-modp2048!
        keyexchange=ikev2
        type=tunnel
        left=85.194.242.33
        leftid=atman
        leftsourceip=85.194.242.33
        leftsubnet=10.12.45.0/24 
        right=185.2.112.35   
        rightsubnet=10.110.0.0/24

Konfiguracja `uogólniona` parametrów uwierzytelniania

  • zaleca się zamiast %any podanie precyzyjne końcówek tunely z użyciem pełnej nazwy FQDN np. vpn.firma.pl oraz vpn.atmancloud.firma.pl
$ sudo nano /etc/ipsec.secrets 

# This file holds shared secrets or RSA private keys for authentication.
# RSA private key for this host, authenticating it to any other host
# which knows the public part.

%any %any : PSK "put-here-your very-secret-aes-psk-passphrase"

Automatyczne uruchominie usług IPsec po starcie

$ sudo systemctl enable strongswan

Ustawienie parametrów sieci

Upewniamy się czy poniżej wybrane zmienne są odpowiednio ustawione, pozostałe zmienne zostawiamy bez zmian.

$ sudo nano /etc/ufw/sysctl.conf 

# Uncomment this to allow this host to route packets between interfaces
net/ipv4/ip_forward=1

# Do not send ICMP redirects (we are not a router)
# Add the following lines
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

a następnie wprowadzamu zmany w życie:

$ sudo ufw disable
Firewall stopped and disabled on system startup
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ 

Ponowne uruchomienie usługi i weryfikacja statusu

$ sudo service strongswan restart
$ sudo service strongswan status
● strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf
   Loaded: loaded (/lib/systemd/system/strongswan.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-04-01 19:16:01 CEST; 9s ago
 Main PID: 11808 (starter)
    Tasks: 18 (limit: 4915)
   CGroup: /system.slice/strongswan.service
           ├─11808 /usr/lib/ipsec/starter --daemon charon --nofork
           └─11833 /usr/lib/ipsec/charon

Apr 01 19:16:01 eco charon[11833]: 00[LIB] dropped capabilities, running as uid 0, gid 0
Apr 01 19:16:01 eco charon[11833]: 00[JOB] spawning 16 worker threads
Apr 01 19:16:01 eco ipsec[11808]: charon (11833) started after 20 ms
Apr 01 19:16:01 eco ipsec_starter[11808]: charon (11833) started after 20 ms
Apr 01 19:16:01 eco charon[11833]: 05[CFG] received stroke: add connection 'atman'
Apr 01 19:16:01 eco charon[11833]: 05[CFG] added configuration 'atman'
Apr 01 19:16:01 eco charon[11833]: 06[CFG] received stroke: route 'atman'
Apr 01 19:16:01 eco ipsec[11808]: 'atman' routed
Apr 01 19:16:01 eco ipsec_starter[11808]: 'atman' routed
Apr 01 19:16:01 eco ipsec_starter[11808]: 
$ sudo ipsec up atman
establishing CHILD_SA atman{6}
generating CREATE_CHILD_SA request 5 [ SA No KE TSi TSr ]
sending packet: from 85.194.242.33[4500] to 185.2.112.35[4500] (476 bytes)
received packet: from 185.2.112.35[4500] to 85.194.242.33[4500] (476 bytes)
parsed CREATE_CHILD_SA response 5 [ SA No KE TSi TSr ]
CHILD_SA atman{6} established with SPIs cf651888_i cf2f3317_o and TS 10.12.45.0/24 === 10.110.0.0/24
connection 'atman' established successfully
$ 

Atman Cloud

Weryfikacji statusu połączenia możemy dokonać w panelu Horizon – jak poniżej:

Linux Ubuntu 18.04

W celu sprawdzenia statusu połączenie, korzystamy z linii poleceń jak poniżej:

$ sudo ipsec statusall
Status of IKE charon daemon (strongSwan 5.6.2, Linux 4.15.0-46-generic, x86_64):
  uptime: 46 minutes, since Apr 01 20:00:59 2019
  malloc: sbrk 2703360, mmap 0, used 744816, free 1958544
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 7
  loaded plugins: charon aes rc2 sha2 sha1 md4 md5 mgf1 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp agent xcbc hmac gcm attr kernel-netlink resolve socket-default connmark stroke updown eap-mschapv2 xauth-generic counters
Listening IP addresses:
  85.194.242.33
  192.168.122.1
  10.12.45.1
Connections:
       atman:  85.194.242.33...185.2.112.35  IKEv2, dpddelay=30s
       atman:   local:  [atman] uses pre-shared key authentication
       atman:   remote: [185.2.112.35] uses pre-shared key authentication
       atman:   child:  10.12.45.0/24 === 10.110.0.0/24 TUNNEL, dpdaction=clear
Routed Connections:
       atman{1}:  ROUTED, TUNNEL, reqid 1
       atman{1}:   10.12.45.0/24 === 10.110.0.0/24
Security Associations (1 up, 0 connecting):
       atman[2]: ESTABLISHED 110 seconds ago, 85.194.242.33[atman]...185.2.112.35[185.2.112.35]
       atman[2]: IKEv2 SPIs: ad744fe2eefa08ed_i* 59943869d47292cd_r, pre-shared key reauthentication in 43 minutes
       atman[2]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
       atman{5}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: cd1990b7_i c7fccfab_o
       atman{5}:  AES_CBC_256/HMAC_SHA1_96/MODP_2048, 0 bytes_i, 0 bytes_o, rekeying in 44 minutes
       atman{5}:   10.12.45.0/24 === 10.110.0.0/24
       atman{6}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: cf651888_i cf2f3317_o
       atman{6}:  AES_CBC_256/HMAC_SHA1_96/MODP_2048, 0 bytes_i, 0 bytes_o, rekeying in 45 minutes
       atman{6}:   10.12.45.0/24 === 10.110.0.0/24
$