Voraussetzungen und Ziel
Ziel dieses Setups ist es, einen Cisco Router als Spoke per VPN an eine Fortigate (Hub) anzuschalten. Dies soll unabhängig vom Internetzugang des Spokes möglichst immer funktionieren, d.h. auch wenn dieser eine dynamische IPv4 WAN-Adresse hat und auch, wenn der Router hinter einem Internetzugang mit CGNAT hängt. Letzteres ist beispielsweise bei Mobilfunkzugängen die Regel. Da reines GRE nicht CGNAT-fähig ist, wird der Tunnel mit IPSEC geschützt, sodass die Tunnelverbindung über in UDP enkapsuliert wird. Das funktioniert dann auch mit CGNAT.
Der Hub verfügt über eine feste, öffentliche IPv4-Adresse.
Fortigate
Normalerweise könnte man meinen, dass man für die Ziele hinter dem Spoke mit statischen Routen arbeiten könnte. Das funktioniert aber seit FortiOS 7.0 aufgrund einer Designänderung nicht mehr. Für weitere Infos vgl. diesen Communitybeitrag.
VPN Tunnel
Über die Peer ID werden die Spokes unterschieden.
Routing
vgl. Link oben: Es dürfen keine statischen Routen auf das Tunnelinterface gesetzt werden. Die Routen werden durch die Einstellung im VPN (“Add route”) beim Tunnelaufbau automatisch eingetragen.
CLI Konfig
config vpn ipsec phase1-interface
edit "CoA-Test-001"
set type dynamic
set interface "wan1"
set ike-version 2
set peertype one
set net-device enable
set proposal aes256-sha256
set dpd on-idle
set dhgrp 21
set peerid "CoA-Test-1"
set psksecret ENC
k6Y3/thrKc365rzcqfY+ECBJhWYCTByzosaElslr/EGvV6LmVSI9QrNUkFX0rXOfcVnELoJka+vUnvPx2
ZQSHF3ZWJR9fiBwG5jKeodKqvN7bA7WmWvBfiX4ZYjf2onm1ObrzsZF9byjHHw4xChJ/sRfbwHDQJaDcx
4Eei/LKkHep0Hbgd/eAC76lbKZk3c/tDDtp1lmMjY3dkVA
set dpd-retryinterval 10
next
end
config vpn ipsec phase2-interface
edit "CoA-Test-001"
set phase1name "CoA-Test-001"
set proposal aes256-sha256
set dhgrp 21
set keylifeseconds 3600
set dst-subnet 10.200.10.0 255.255.255.0
next
edit "CoA-Test-001_1"
set phase1name "CoA-Test-001"
set proposal aes256-sha256
set dhgrp 21
set keylifeseconds 3600
set dst-subnet 172.17.32.1 255.255.255.255
next
end
config router static
edit 2
set dst 10.200.10.0 255.255.255.0
set distance 200
set blackhole enable
set vrf 0
next
edit 3
set dst 172.17.32.1 255.255.255.255
set distance 200
set blackhole enable
set vrf 0
next
end
config system zone
edit "CoA-Standorte"
set interface "CoA-Test-002" "CoA-Test-001"
next
end
Cisco
Das Definieren des interessanten Traffics über eine ACL ist nicht unbedingt notwendig. Es sorgt aber dafür, dass SAs aufgebaut werden, auch wenn kein Traffic von intern generiert wurde. Das kann insofern kritisch sein, dass das Netz sonst nicht erreicht werden kann, wenn der initiale Traffic von der Fortigate-Seite ausgeht.
IKEv2 Konfig (Phase 1)
crypto ikev2 proposal IKEV2_PROPOSAL
encryption aes-cbc-256
integrity sha256
group 21
!
crypto ikev2 policy IKEV2_POLICY
proposal IKEV2_PROPOSAL
!
crypto ikev2 keyring IKEV2_KEYRING
peer SST-GATEWAY
address <Fortigate-WAN-IP>
pre-shared-key test1234
!
!
!
crypto ikev2 profile IKEV2_PROFILE
match identity remote address <Fortigate-WAN-IP> 255.255.255.255
identity local key-id CoA-Test-1
authentication remote pre-share
authentication local pre-share
keyring local IKEV2_KEYRING
dpd 10 3 periodic
no config-exchange request
Im IKEV2_PROFILE wird die Peer ID wieder aufgegriffen, die auch in der Fortigate oben gesetzt wurde. Über diese wird der Spoke identifiziert. Für weitere Spokes müssen weitere Tunnel mit anderen Peer IDs auf der Fortigate eingerichtet werden.
IPSEC Konfig (Phase 2)
crypto ipsec transform-set IPSEC_TS esp-aes 256 esp-sha256-hmac
mode tunnel
!
crypto ipsec profile IPSEC_PROFILE
set security-association lifetime seconds 3600
set security-association lifetime kilobytes disable
set transform-set IPSEC_TS
set pfs group21
set ikev2-profile IKEV2_PROFILE
Tunnelinterface
interface Tunnel1
ip unnumbered Vlan1
tunnel source GigabitEthernet0/0/0
tunnel mode ipsec ipv4
tunnel destination <Fortigate-WAN-IP>
tunnel protection ipsec policy ipv4 ACL-VPN
tunnel protection ipsec profile IPSEC_PROFILE ikev2-profile IKEV2_PROFILE
ACL mit interessantem Traffic
ip access-list extended ACL-VPN
10 permit ip 10.200.10.0 0.0.0.255 any
20 permit ip host 172.17.32.1 any
Routing
Für den Tunnelendpunkt muss das Routing übers Internet sichergestellt sein (im Beispiel die dritte Route über DHCP), da die Default-Route in den Tunnel zeigen soll. Wenn der Tunnel nicht steht, zeigt die Default-Route ins Nirwana (Null0).
ip route 0.0.0.0 0.0.0.0 Tunnel1
ip route 0.0.0.0 0.0.0.0 Null0 200
ip route <Fortigate-WAN-IP> 255.255.255.255 dhcp



