skgm BIT Basics Cloud,BIT Basics Linux Site2Site VPN mit StrongSwan und PFsense

Site2Site VPN mit StrongSwan und PFsense

Im Rahmen eines private Cloud Projekts musste ich eine Umgebung in einem abgesetzten Datacenter mit der Zentrale per Site2Site VPN Kopplung anbinden.
Das VPN Gateway der abgesetzten Struktur läuft in diesem Fall als kleine Linux VM auf einem ESXi Verbund.

Als erstes an der PFsense checken, ob nicht bereits ein Tunnel existiert an dessen Ende das gleiche Subnet genutzt wird!

Strongswan installieren: apt install strongswan -y

/etc/ipsec.conf anpassen. Muster:

# basic configuration

config setup
# conn definition for HQ
#  charondebug="cfg 2, chd 2, esp 2, ike 2, knl 2, lib 2, net 2, tls 2"

conn HQ
  authby = secret
  #forceencaps=yes
  auto = route
#  dpdaction = clear
  dpdaction = restart
  dpddelay = 30
  dpdtimeout = 120
  esp = aes256-sha2_256!
  ike = aes256-sha2_256-modp1024!
  ikelifetime = 1h
  keyexchange = ikev2
  keyingtries = 0
  lifetime = 8h
  type = tunnel
  left = 8.9.10.11 #<- Externe IP des VPN Gateways im Stack 
  right = 12.13.14.15 #<- Externe IP HQ
  leftsourceip = 10.20.0.5 #<- Interne IP des VPN Gateways
  rightsourceip = 192.168.200.1 #<- Interne IP des zuständigen Gateways im HQ
  leftsubnet = 10.20.0.0/24 #<- Internes Netz im Stack, das Zugriff via VPN haben soll
  rightsubnet = 192.168.200.0/24 #<- Internes Netz im HQ auf das zugegriffen werden soll

conn HQ-OpenVPN
  also = HQ #<- Erweiterung der oberen Definition um ein weiteres Netz, von dem aus via HQ Zugriff auf das interne Netz des Stacks möglich sein soll
  rightsubnet = 10.0.9.0/24 #<- Source IP Range des Netzes aus dem der Zugriff kommt

/etc/ipsec.secrets entsprechend anpassen.

Dann den UFW konfigurieren.

In /etc/ufw/before.rules folgendes ganz oben eintragen:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-F
# setup routing
-A POSTROUTING -s 10.20.0.0/24 -o ens33 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.20.0.0/24 -o ens33 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.20.0.0/24 -o ens33 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

Und unterhalb des Filter Blocks folgendes anfügen:

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
#
# DAS FOLGENDE EINFÜGEN:
#
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.20.0.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.20.0.0/24 -j ACCEPT

Ferner auf der UFW ssh und Port 500+4500 UDP erlauben:

ufw allow OpenSSH
ufw allow 500,4500/udp
ufw enable

Ggfs. noch das IP Forwarding einschalten. Dies ist allerdings, wenn man Strongswan auf einer Linux VM konfiguriert ohnehin schon an.

Port Forwardings können weiterhin wie gewohnt in der before.rules konfiguriert werden.

Related Post

RunlevelRunlevel

Linux kennt verschiedene Runlevels, in die jederzeit gezielt gewechselt werden kann. Die genaue Runlevel Definition kann sich von Distribution zu Distribution unterscheiden.