VPN HUB and SPOKE - Dynamic VPN with BGP - Parte 1 - Securizando tus redes OT
- Iñaki Urrutxi

- 16 may 2020
- 6 Min. de lectura
Actualizado: 8 jun 2020
En este blog hablaremos sobre cómo configurar túneles VPN en un entorno donde queremos interconectar sedes remotas con una sede central. Las sedes remotas están conectadas a routers con conexión a Internet hacían NAT. Estos routers no tendrán puertos abiertos hacía el FW y tendrán el DHCP activado para darle ip y puerta de enlace al puerto WAN de nuestro FW. Nada más tener conexión a Internet lanzaran un túnel VPN dinámico contra la sede central, donde podremos rutar aquellas redes que nos interesen o sacar todo el tráfico por el túnel. Sí por ejemplo lo unimos a un FMG, podremos hacer un Zero Touch Deployment real donde un equipo sacado de la caja sin configuración estará funcionando en cualquier parte del mundo en unos minutos .
Este entorno se puede usar en redes IT/OT pero es especialmente interesante para redes OT donde tenemos redes más o menos complicadas con máquinas (pcs, servidores, PLCs, HMIs, SCADAS, sensores, etc) repartidas por redes clientes que queremos securizar, realizar mantenimiento predictivo mediante el análisis del dato y además dar soporte correctivo en caso de problemas. Además podemos aplicar todos los perfiles de protección de los NGFWs, incluidas las firmas de IPS exclusivas para entornos OT, así como la segmentación de los ISFW de todos los dispositivos Fortigate.


Este diseño a parte de lo comentado anteriormente tiene la ventaja de la simplicidad de la configuración. Una vez configurado el SPOKE se puede mover a cualquier ubicación y simplemente conectándolo a una red con conexión a Internet con los siguientes puertos abiertos en salida ( UDP 500, UDP 4500, ESP (protocolo IP 50)). No hace falta puertos abiertos en entrada, solo que el router haga NAT y que tenga el DHCP activado (suele ser la mayoría de ellos), tras esto tenemos una ubicación remota interconectada y securizada en pocos minutos.

HUB (Sede Central)
- Configuración de los interfaces
config system interfaces
edit "wan1"
set vdom "root"
set ip 212.181.209.10 255.255.255.248
set allowaccess ping https ssh
set vlanforward enable
set type physical
set alias "Internet"
set role wan
next
edit "lan1"
set vdom "root"
set ip 10.1.1.1 255.255.255.0
set allowaccess ping https ssh
set vlanforward enable
set type physical
set alias "lan"
set role lan
next
edit "VPN-Spokes"
set vdom "root"
set ip 10.30.30.1 255.255.255.255
set allowaccess ping https ssh
set type tunnel
set remote-ip 10.30.30.254 255.255.255.0
set interface "wan1"
next
end
- Configuración de la VPN
config vpn ipsec phase1-interface
edit "VPN-Spokes"
set type dynamic
set interface "wan1"
set local-gw 212.81.209.10
set mode aggressive
set peertype one
set net-device disable
set exchange-interface-ip enable
set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
set add-route disable
set dpd on-idle
set xauthtype auto
set authusrgrp "Grupo-Spokes1"
set peerid "SPOKES1.com"
set tunnel-search nexthop
set psksecret vpnpresharedkey
set dpd-retryinterval 60
nextendconfig vpn ipsec phase2-interface
edit "VPN-Spokes"
set phase1name "VPN-Spokes"
set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256 aes128gcm aes256gcm chacha20poly1305
set keepalive enable
next
end- Configuración de BGP
config router bgp
set as 61066
set router-id 10.30.1.1
set keepalive-timer 10
set holdtime-timer 30
config neighbor-group
edit "BGP-SPOKES1"
set activate6 disable
set next-hop-self enable
set soft-reconfiguration enable
set prefix-list-in "prefix-Spokes1-OT-BGP-in"
set prefix-list-out "prefix-Spokes1-OT-BGP-default-out"
set remote-as 61066
set send-community6 disable
next
end
config neighbor-range
edit 1
set prefix 10.30.30.0 255.255.255.0
set neighbor-group "BGP-SPOKES1"
next
end
config redistribute "connected"
set status enable
end
config redistribute "static"
set status enable
end
config router prefix-list
edit "prefix-Spokes1-OT-BGP-in"
config rule
edit 4
set prefix 10.11.0.0 255.255.0.0
set ge 17
set le 32
next
edit 10
set action deny
set prefix 0.0.0.0 0.0.0.0
set ge 1
set le 32
next
end
next
edit "prefix-Spokes1-OT-BGP-default-out"
config rule
edit 1
set prefix 0.0.0.0 0.0.0.0
unset ge
unset le
next
end
next
end- Configuración de las rutas estáticas
config router static
edit 1
set gateway 212.181.209.9
set device "wan1"
next
end- Configuración de los usuarios de los spokes permitidos
config user local
edit "spoke1"
set type password
set passwd spoke1pass
next
edit "spoke2"
set type password
set passwd spoke12pass
next
endconfig user group
edit "Grupo-Spokes1"
set member "spoke1" "spoke2"
next
end- Configuración de las políticas
config firewall policy
edit 1
set srcintf "Lan1"
set dstintf "VPN-Spokes"
set srcaddr "lan-spokes"
set dstaddr "lan-date"
set action accept
set schedule "always"
set service "ALL"
set utm-status enable
set ssl-ssh-profile "certificate-inspection"
set av-profile "default"
set application-list "ot-scada-spokes-read"
set ips-sensor "high_security"
set logtraffic all
next
edit 2
set srcintf "VPN-Spokes"
set dstintf "Lan1"
set srcaddr "lan-support"
set dstaddr "lan-spokes"
set action accept
set schedule "always"
set service "ALL"
set utm-status enable
set ssl-ssh-profile "certificate-inspection"
set av-profile "default"
set application-list "ot-scada-spokes-write"
set ips-sensor "high_security"
set logtraffic all
next
end
SPOKE (Sede Remota)
- Configuración de los interfaces
config system interface
edit "wan1"
set vdom "root"
set mode dhcp
set allowaccess ping fgfm
set type physical
set role wan
set defaultgw disable
next
edit "lan1"
set vdom "root"
set ip 10.11.1.1 255.255.255.0
set allowaccess ping https ssh http
set role lan
next
edit "VPN-Hub"
set vdom "root"
set ip 10.30.30.2 255.255.255.255
set allowaccess ping https telnet
set type tunnel
set remote-ip 10.30.30.1 255.255.255.0
set interface "wan1"
next
end
- Configuración de la VPN
config vpn ipsec phase1-interface
edit "VPN-Hub"
set interface "wan1"
set mode aggressive
set peertype any
set net-device enable
set exchange-interface-ip enable
set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
set localid "SPOKES1.com"
set xauthtype client
set authusr "spoke1"
set authpasswd spoke1pass
set remote-gw 212.181.209.10
set psksecret ENC vpnpresharedkey
next
end
config vpn ipsec phase2-interface
edit "VPN-Hub"
set phase1name "VPN-Hub"
set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256
set auto-negotiate enable
next
end- Configuración de las rutas estáticas
config router static
edit 1
set dst 212.181.209.10 255.255.255.255
set device "wan1"
set dynamic-gateway enable
next
end- Configuración del BGP
config router bgp
set as 61066
set router-id 10.30.30.2
config neighbor
edit "10.30.30.1"
set next-hop-self enable
set soft-reconfiguration enable
set remote-as 61066
next
end
config redistribute "connected"
set status enable
end
config redistribute "static"
set status enable
end- Configuración de las políticas
config firewall policy
edit 1
set srcintf "lan1"
set dstintf "VPN-Hub"
set srcaddr "Lan-Spoke1"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set logtraffic all
next
edit 2
set srcintf "VPN-Hub"
set dstintf "lan1"
set srcaddr "all"
set dstaddr "Lan-spoke"
set action accept
set schedule "always"
set service "ALL"
set logtraffic all
next
endTROUBLESHOOTING
Vemos cómo ver si el esquema propuesto esta funcionando correctamente.
HUB
FW-HUB# get router info bgp summary
BGP router identifier 10.30.30.2, local AS number 61066
BGP table version is 4
2 BGP AS-PATH entries
0 BGP community entries
Next peer check timer due in 51 seconds
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.30.30.2 4 61066 99 97 3 0 00:08:53 1
Total number of neighbors 1FW-HUB # get router info routing-table all
Routing table for VRF=0
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
S* 0.0.0.0/0 [10/0] via 212.181.209.9, wan1
B 10.11.1.0/24 [200/0] via 10.30.30.2, VPN-Spokes, 00:10:05
C 10.30.30.0/24 is directly connected, VPN-Spokes
C 10.30.30.1/32 is directly connected, VPN-Spokes
C 192.168.100.0/24 is directly connected, Lan1
C 212.181.209.8/29 is directly connected, wan1
SPOKES
FW-SPOKE # get router info bgp summary
BGP router identifier 10.30.30.2, local AS number 61066
BGP table version is 3
1 BGP AS-PATH entries
0 BGP community entries
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.30.30.1 4 61066 38 38 3 0 0 00:00:08 1
Total number of neighbors 1FW-SPOKE # get router info routing-table all
Routing table for VRF=0
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
B* 0.0.0.0/0 [200/0] via 10.30.30.1, VPN-Hub, 00:01:18
C 10.11.4.0/24 is directly connected, lan
C 10.30.30.0/24 is directly connected, VPN-Hub
C 10.30.30.2/32 is directly connected, VPN-Hub
C 10.20.20.2/30 is directly connected, wan1
S 212.181.209.10/32 [10/0] via 10.20.20.1, wan1En el siguiente blog complicaremos este esquema, haremos que el spoke tenga dos interfaces wan, uno principal y otro de respaldo. Si cae la vpn principal veremos como salta el tráfico por la VPN de respaldo y viceversa, si el enlace principal vuelve a funcionar todo el tráfico volvera a salir por ese interface.




Comentarios