LAB 1 – VPN Hub & Spoke
Cas d’utilisation
Dans cet exemple de configuration, une organisation possédant
plusieurs sites de différentes tailles désire interconnecter les
réseaux sur chaque site. L'organisation souhaite pouvoir accéder à
ses données et les contrôler depuis un emplacement central. Elle
peut également souhaiter disposer d'un emplacement fiable et
central destiné à ses ressources, ou exécuter des processus
d'entreprise exigeant une architecture centralisée.
Présentation
Dans une configuration VPN centralisée, également appelée Hub
and Spoke, tous les tunnels VPN convergent au même
emplacement. Elle peut être utilisée pour disposer d'une visibilité
et d'un contrôle globaux sur les données à partir d'un emplacement
central. Cette solution peut préserver la disponibilité des
ressources, car toutes les ressources partagées peuvent être
placées à un emplacement fiable et bien géré. Nous allons aborder
l'architecture Hub & Spoke avec 1 seul lien INTERNET.
Dans ce type d'architecture, les connexions VPN sont centralisées
sur un FortiGate appelé hub. Les sites distants ou spokes, se
connectent donc tous au hub. Le trafic entre les sites distants
transite par le hub.
Serveurs et logiciels utilisés
• VMware-workstation v17.0.0 [lien]
• EVE-NG v5.0.1-19 pour VMware [lien]
• FortiGate v7.0.12 en format kvm (Hub, Spokes, INET), 1 Go
de RAM pour chaque appliance [lien]
Notes :
• Les configurations sont prévues pour la v7.0.12 de FortiOS.
Elles peuvent être différentes pour les v6.4 et v7.2.
• Vous devez posséder un compte pour télécharger l'appliance
virtuelle FortiGate. Depuis la v7.2.1, le mode de licensing a
changé [lien].
Schéma
Architecture Hub & Spoke
Dans ce lab, FortiGate sera utilisée en tant que firewall et routeur
:
• Firewall HQ, [Link] (Mgmt)
• Firewall SITE-A, [Link] (Mgmt)
• Firewall SITE-B, [Link] (Mgmt)
• Routeur INET, [Link] (Mgmt et source NAT vers
internet)
Notes :
L'adresse [Link] est la passerelle du réseau
[Link]/24 utilisé pour la sortie internet pour INET.
Configurations basiques
On crée les configurations de base pour les firewalls et le routeur
(qui est également un FortiGate) : hostname, interfaces, routage
et règles firewall.
• Routeur INET
config sys global
set timezone 30
set hostname INET
set autorun-log-fsck enable
set admintimeout 480
end
config sys interface
edit port3
set ip [Link] [Link]
set allowaccess ping
set alias "P-SITE-A"
next
edit port4
set ip [Link] [Link]
set allowaccess ping
set alias "P-SITE-B"
next
edit port2
set ip [Link] [Link]
set allowaccess ping
set alias "P-HQ"
next
edit port1
set mode static
set ip [Link] [Link]
set allowaccess ping http
set alias "P-MGMT"
next
end
config router static
edit 1
set gateway [Link]
set device "port1"
set comment "DEFAULT"
next
end
config firewall policy
edit 1
set name "WWW_01"
set srcintf "port2"
set dstintf "port1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
edit 2
set name "WWW_02"
set srcintf "port3"
set dstintf "port1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
edit 3
set name "WWW_03"
set srcintf "port4"
set dstintf "port1"
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
edit 4
set name "ANY2ANY"
set srcintf any
set dstintf any
set action accept
set srcaddr "all"
set dstaddr "all"
set schedule "always"
set service "ALL"
set logtraffic all
next
end
• Firewall HQ
config sys global
set timezone 30
set hostname HQ
set autorun-log-fsck enable
set admintimeout 480
end
config sys interface
edit port1
set mode static
set ip [Link] [Link]
set allowaccess ping http ssh
set alias P-MGMT
next
edit port3
set ip [Link] [Link]
set allowaccess ping
set role wan
set alias P-INET
next
edit port2
set ip [Link] [Link]
set allowaccess ping
set alias P-LAN
next
end
config router static
edit 1
set gateway [Link]
set device "port3"
set comment "DEFAULT"
next
end
config firewall policy
edit 1
set name "LAN_to_INET"
set srcintf "port2"
set dstintf "port3"
set action accept
set srcaddr "[Link]/24"
set dstaddr all
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
end
• Firewall SITE-A
config sys global
set timezone 30
set hostname SITE-A
set autorun-log-fsck enable
set admintimeout 480
end
config sys interface
edit port1
set mode static
set ip [Link] [Link]
set allowaccess ping http ssh
set alias P-MGMT
next
edit port3
set ip [Link] [Link]
set allowaccess ping
set role wan
set alias P-INET
next
edit port2
set ip [Link] [Link]
set allowaccess ping
set alias P-LAN
next
end
config router static
edit 1
set gateway [Link]
set device "port3"
set comment "INET"
next
end
config firewall policy
edit 1
set name "LAN_to_INET"
set srcintf "port2"
set dstintf "port3"
set action accept
set srcaddr "[Link]/24"
set dstaddr all
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
end
• Firewall SITE-B
config sys global
set timezone 30
set hostname SITE-B
set autorun-log-fsck enable
set admintimeout 480
end
config sys interface
edit port1
set mode static
set ip [Link] [Link]
set allowaccess ping http ssh
set alias P-MGMT
next
edit port3
set ip [Link] [Link]
set allowaccess ping
set role wan
set alias P-INET
next
edit port2
set ip [Link] [Link]
set allowaccess ping
set alias P-LAN
next
end
config router static
edit 1
set gateway [Link]
set device "port3"
set comment "INET"
next
end
config firewall policy
edit 1
set name "LAN_to_INET"
set srcintf "port2"
set dstintf "port3"
set action accept
set srcaddr "[Link]/24"
set dstaddr all
set schedule "always"
set service "ALL"
set logtraffic all
set nat enable
next
end
Tests d'accès à internet
On réalise quelques tests pour s'assurer que les sites ont bien
accès à internet.
• Firewall HQ :
Avec le PC HQ-PC, on vérifie l’accès à internet en testant le ping
vers [Link] .
On voit également que le traceroute passe par INET ([Link]),
puis par la passerelle de mon réseau de management pour joindre
réellement internet.
• Firewall SITE-A :
Idem mais INET en [Link]. Avec le PC Site-A-PC1, on accède
également à internet.
Spoke ayant accès à Internet
Note : le site SITE-B a également accès à internet mais via
l'adresse IP [Link].
Configuration des VPN IPsec
On crée maintenant les tunnels IPsec en IKE mode-
cfg (distribution automatique d'IP). Le hub, qui sera le serveur, va
ainsi affecter une adresse IP à chaque spoke (client) se
connectant sur son interface tunnel.
• Firewall HQ :
config vpn ipsec phase1-interface
edit VPN-ISP-A
set type dynamic
set interface port3
set ike-version 2
set proposal des-md5 des-sha1
set peertype any
set net-device disable
set add-route disable
set dpd on-demand
set dpd-retrycount 3
set dpd-retryinterval 10
set psksecret Password
set mode-cfg enable
set ipv4-start-ip [Link]
set ipv4-end-ip [Link]
set ipv4-netmask [Link]
next
end
config vpn ipsec phase2-interface
edit VPN-ISP-A
set phase1name VPN-ISP-A
set proposal des-md5 des-sha1
set keepalive enable
next
end
config system interface
edit VPN-ISP-A
set vdom root
set ip [Link] [Link]
set type tunnel
set remote-ip [Link] [Link]
set interface port3
next
end
Notes :
• FortiGate en mode trial (15 jours) ne permet pas d'utiliser
des algorithmes forts comme AES.
• "set add-route disable" est requis pour le routage
dynamique
• "set net-device disable" permet de meilleures
performances; tous les tunnels partageront
la même interface
• Les réseaux src/dst de la phase 2 sont implicitement
[Link]/0, préférés pour le routage dynamique
• En IKE mode-cfg, il faut configurer une remote ip au niveau
de l'interface VPN, même si elle n'est pas utilisée
On s'occupe maintenant des spokes.
• Firewall SITE-A :
On précise l'IP publique du hub comme remote gateway. Pas
besoin de configurer une adresse IP sur le tunnel comme le hub
la lui fournira. On verra plus tard le rôle du local-id.
config vpn ipsec phase1-interface
edit "HUB"
set interface "port3"
set ike-version 2
set proposal des-md5 des-sha1
set type static
set remote-gw [Link]
set peertype any
set mode-cfg enable
set localid "SITE-A"
set net-device enable
set add-route disable
set dpd on-idle
set dpd-retrycount 3
set dpd-retryinterval 10
set psksecret Password
end
config vpn ipsec phase2-interface
edit "HUB"
set phase1name "HUB"
set proposal des-md5 des-sha1
set auto-negotiate enable
end
config system interface
edit HUB
set type tunnel
set interface port3
next
end
• Firewall SITE-B :
Seul le local-id est différent.
config vpn ipsec phase1-interface
set localid "SITE-B"
end
Configuration BGP
• Firewall HQ :
config router bgp
set as 65000
set router-id [Link]
config neighbor-group
edit INET
set remote-as 65000
set interface VPN-ISP-A
set update-source VPN-ISP-A
set route-reflector-client enable
next
end
config neighbor-range
edit 1
set prefix [Link] [Link]
set neighbor-group INET
next
end
config network
edit 1
set prefix [Link] [Link]
set network-import-check disable
next
end
end
Notes :
• "neighbor-group" et "neighbor-range" pour régler la portée
du BGP
• "set route-reflector-client enable" permet aux spokes
d'apprendre les réseaux d'autres spokes
• "network" pour annoncer le ou les réseaux souhaités
• "set network-import-check disable" permet d'annoncer le
réseau même s'il n'est pas présent dans la table de
routage. Uniquement activé pour un lab. Dans le lab, seul
le réseau [Link]/24 est présent d'où la désactivation
de cette vérification.
On continue avec la configuration des firewalls spoke :
• Firewall SITE-A :
config router bgp
set as 65000
set router-id [Link]
config neighbor
edit [Link]
set remote-as 65000
set interface HUB
set update-source HUB
next
end
config network
edit 1
set prefix [Link] [Link]
set network-import-check disable
next
end
end
• Firewall SITE-B :
config router bgp
set as 65000
set router-id [Link]
config neighbor
edit [Link]
set remote-as 65000
set interface HUB
set update-source HUB
next
end
config network
edit 1
set prefix [Link] [Link]
set network-import-check disable
next
end
end
Règles Firewall
Il reste à créer les règles firewall pour autoriser le trafic à passer à
travers le VPN et, de facto, faire monter ce dernier.
• Firewall HQ :
config firewall policy
edit 2
set name "Hub_to_Spoke"
set srcintf "port2"
set dstintf "VPN-ISP-A"
set action accept
set srcaddr "[Link]/24"
set dstaddr "[Link]/24" "[Link]/24"
set schedule "always"
set service "ALL"
set logtraffic all
next
edit 3
set name "Spoke_to_Hub"
set srcintf "VPN-ISP-A"
set dstintf "port2"
set action accept
set srcaddr "[Link]/24" "[Link]/24"
set dstaddr "[Link]/24"
set schedule "always"
set service "ALL"
set logtraffic all
next
edit 4
set name "Spoke_to_Spoke"
set srcintf "VPN-ISP-A"
set dstintf "VPN-ISP-A"
set action accept
set srcaddr "[Link]/24" "[Link]/24" "[Link]/24"
set dstaddr "[Link]/24" "[Link]/24" "[Link]/24"
set schedule "always"
set service "ALL"
set logtraffic all
next
end
Notes : la règle ID 4 autorise le trafic entre spokes.
• Firewall SITE-A :
config firewall policy
edit 2
set name "Spoke_to_HUB"
set srcintf "port2"
set dstintf "HUB"
set action accept
set srcaddr "[Link]/24"
set dstaddr "[Link]/24" "[Link]/24"
set schedule "always"
set service "ALL"
set logtraffic all
next
edit 3
set name "Hub_to_Spoke"
set srcintf "HUB"
set dstintf "port2"
set action accept
set srcaddr "[Link]/24" "[Link]/24"
set dstaddr "[Link]/24"
set schedule "always"
set service "ALL"
set logtraffic all
next
end
Note : les policies pour SITE-B sont quasiment identiques. Il faut
remplacer [Link]/24 par [Link]/24 et vice-et-versa.
Vérifications
• VPN IPsec (Hub)
Un local-id bien pratique
Les 2 spokes ont monté leur VPN avec le hub. Si les spokes sont
derrière une box qui natte, le local-id (ici Peer ID) permet de les
identifier plus facilement.
• VPN IPsec (Spoke)
Le hub a attribué une adresse IP à chaque spoke. Exemple avec
SITE-A et l'IP [Link]/23 :
SITE-A # get vpn ike gateway
• Table de routage (Spoke)
Le spoke récupère via BGP le réseau du hub (via [Link])
et le réseau de l'autre spoke (via [Link]) comme le hub
joue le rôle de route reflector.
SITE-A # get router info routing-table detail
Conclusion
Dans ce lab, on a donc mis en place :
• Une architecture Hub & Spoke, simple lien et avec un seul
hub
• Des tunnels IPsec avec IKE en mode configuration
• Du routage dynamique via BGP (plus précisément iBGP)
avec route-reflector