Easy VPN Server Avec DVTI (Dynamic Vpn Tunnel Interfaces)

Un article sur la configuration de VPN Site to Site en utilisant les fonctionnalités Easy VPN Server avec des DVTI.

Topologie

Topologie

Topologie dynagen: EzVPN

Introduction:

L’avantage de cette solution est que l’on va pouvoir simplement créer plusieurs VPN avec les même paramètres en utilisant les templates. Les interface VTI supportent aussi d’autres protocoles que le protocole IP. Cette solution n’utilises pas non plus de crypto maps: Tout ce qui est routé vers l’interface tunnel sera encrypté. De même, le traffic encrypté peut être reçu par n’importe quelle interface physique (tant qu’il correspond au traffic de l’interface tunnel).
Lorsque le VPN est établi, une route statique par défaut est créé vers le hub VPN (sauf en cas de split tunneling, cas ou le traffic internet ne passe pas par le VPN).

Note, si le routeur est configuré avec une route statique par défaut, il faut que son AD soit supérieur a 1, sans quoi la route intallée par Easy VPN ne sera pas prise en compte (AD = 1).

Pré-configuration

Je vais simplement configuré une route par défaut sur le client et la passerelle VPN avec du PAT:

VPNGate(config)#int f0/0
VPNGate(config-if)#ip add 80.0.1.2 255.255.255.0
VPNGate(config-if)#no sh
VPNGate(config)#ip nat inside source list 1 interface F0/0 overload
VPNGate(config)#access-list 1 permit any
VPNGate(config)#ip route 0.0.0.0 0.0.0.0 80.0.1.1 10 ! AD = 10 pour VPN, sinon tout passera par le net!
VPNGate(config)#int f0/0
VPNGate(config-if)#ip nat outside
VPNGate(config-if)#int loop 1
VPNGate(config-if)#ip nat inside
VPNGate(config-if)#ip add 192.168.1.1 255.255.255.0
VPNGate(config-if)#exit
VPNClient(config)#int f0/0
VPNClient(config-if)#ip add 80.0.0.2 255.255.255.0
VPNClient(config-if)#no sh
VPNClient(config-if)#ip nat inside source list 1 interface F0/0 overload
VPNClient(config)#access-list 1 permit any
VPNClient(config)#ip route 0.0.0.0 0.0.0.0 80.0.0.1 10 ! AD = 10 pour VPN, sinon tout passera par le net!
VPNClient(config-if)#int f0/0
VPNClient(config-if)#ip nat outside
VPNGate(config-if)#int loop 1
VPNGate(config-if)#ip nat inside
VPNGate(config-if)#ip add 192.168.0.1 255.255.255.0
VPNGate(config-if)#exit
WAN(config)#int f0/0
WAN(config-if)#ip add 80.0.0.1 255.255.255.0
WAN(config-if)#no sh
WAN(config-if)#int f0/1
WAN(config-if)#ip add 80.0.0.1 255.255.255.0
WAN(config-if)#no sh
WAN(config-if)#exit

Configuration du hub (VPNGate)

Création de la policy ISAKMP avec une clé par défaut (en production, utiliser une PKI serait plus sécurisé)

VPNGate(config)#crypto isakmp policy 1
VPNGate(config-isakmp)#encryption aes
VPNGate(config-isakmp)#hash sha
VPNGate(config-isakmp)#group 2
VPNGate(config-isakmp)#auth pre
VPNGate(config-isakmp)#auth pre-share
VPNGate(config-isakmp)#exit
VPNGate(config)#crypto isakmp key password address 0.0.0.0 0.0.0.0

Creation de la configuration client

Il faut spécifier les paramètres qui seront envoyés au client, à la manière du remote VPN. Ici, nous allons créer les paramètres pour le groupe cisco, ainsi qu’un profile ISAKMP pour les utilisateurs de ce groupe. Il faut aussi créer un utilisateur pour authentifier le router.

VPNGate(config)#username VPNClient password EzVPNPass
VPNGate(config)#aaa new-model
VPNGate(config)#aaa authentication login IKMPLogin local
VPNGate(config)#aaa authorization network IKMPAuthor local
VPNGate(config)#crypto isakmp client configuration group GroupeEzVPN
VPNGate(config-isakmp-group)#key password
VPNGate(config-isakmp-group)#domain labo.lan
VPNGate(config-isakmp-group)#pool EzVPNPool
VPNGate(config-isakmp-group)#exit
VPNGate(config-isakmp-group)#acl 101
VPNGate(config)#ip local pool EzVPNPool 192.168.10.1 192.168.10.100
VPNGate(config)#access-list 101 permit ip 192.168.1.0 0.0.0.255 any
VPNGate(config)#crypto isakmp profile IKMPProfile1
% A profile is deemed incomplete until it has match identity statements
VPNGate(conf-isa-prof)#match identity group GroupeEzVPN
VPNGate(conf-isa-prof)#client configuration address respond
VPNGate(conf-isa-prof)#isakmp authorization list IKMPAuthor
VPNGate(conf-isa-prof)#client authentication list IKMPLogin
VPNGate(conf-isa-prof)#virtual-template 1
VPNGate(conf-isa-prof)#exit

Note: On aurait pu utiliser des paramètres par défaut via les commandes crypto isakmp client config…/Crypto isakmp client auth…/Crypto isakmp author list… (voir mon article sur le remote VPN)
Note2: L’acl sert à spécifier le traffic qui doit passer dans le VPN. Sans ça, tout passera par le VPN (pas de split tunneling).

Configuration IPSEC

Ici on créé un transform set et un profile IPSec qui sera rattaché à l’interface Template

VPNGate(config)#crypto ipsec transform-set EzVPNTSet esp-aes esp-sha
VPNGate(cfg-crypto-trans)#exit
VPNGate(config)#crypto ipsec profile IPSecProfile1
VPNGate(ipsec-profile)#set transform-set EzVPNTSet
VPNGate(ipsec-profile)#set isakmp-profile IKMPProfile1
VPNGate(ipsec-profile)#exit

Configuration de l’interface VTI

La commande ip unnumbered permet de partager l’adresse ip de l’interface F0/0

VPNGate(config)#interface virtual-template 1 type tunnel .
VPNGate(config-if)#ip unnumbered fastEthernet 0/0
VPNGate(config-if)#tunnel source f0/0
VPNGate(config-if)#tunnel mode ipsec ipv4
VPNGate(config-if)#tunnel protection ipsec profile IPSecProfile1

Voila c’est tout pour le hub, attaquons la config du client:

Configuration du client

La configuration du client, comme vous vous en doutez, vas être beaucoup plus simple:

Configuration ISAKMP

VPNClient(config)#crypto isakmp key password address 0.0.0.0 0.0.0.0

Le reste sera récupéré sur le serveur easy vpn

Configuration EzVpn

VPNClient(config)#int virtual-template 1 type tunnel
VPNClient(config-if)#tunnel mode ipsec ipv4
VPNClient(config)#crypto ipsec client ezvpn ezVpnConnection1
VPNClient(config-crypto-ezvpn)#connect manual
VPNClient(config-crypto-ezvpn)#group GroupeEzVPN key password
VPNClient(config-crypto-ezvpn)#local-address f0/0
VPNClient(config-crypto-ezvpn)#peer 80.0.1.2 !VPNGate
VPNClient(config-crypto-ezvpn)#mode client
VPNClient(config-crypto-ezvpn)#virtual-interface 1
EZVPN: For virtual-interface to take effect apply ezvpn on a real interface
VPNClient(config-crypto-ezvpn)#exit
VPNClient(config)#int f0/0
VPNClient(config-if)#crypto ipsec client ezvpn ezVpnConnection1
VPNClient(config-if)#int loop 1
VPNClient(config-if)#crypto ipsec client ezvpn ezVpnConnection1 inside

Connexion du VPN:

manuellement

VPNClient#crypto ipsec client ezvpn connectezVpnConnection1
VPNClient#
*Mar  1 01:54:17.268: EZVPN(ezVpnConnection1): Pending XAuth Request, Please enter the following command:
*Mar  1 01:54:17.268: EZVPN: crypto ipsec client ezvpn xauth
VPNClient#crypto ipsec client ezvpn xauth
Username: VPNClient !Client créé avec la commande username sur VPNGate
Password:
VPNClient#
*Mar  1 01:55:07.599: %CRYPTO-6-EZVPN_CONNECTION_UP: (Client)  User=  Group=GroupeEzVPN  Client_public_addr=80.0.0.2  Server_public_addr=80.0.1.2  Assigned_client_addr=192.168.10.1
*Mar  1 01:55:07.799: %LINEPROTO-5-UPDOWN: Line protocol on Interface Loopback0, changed state to up

automatiquement

Sur le serveur, ajouter l’option save password, sans quoi le serveur rejetteras les login et forcera le renseignement manuel du login mot de passe

VPNGate(config)#crypto isakmp client configuration group GroupeEzVPN
VPNGate(config-isakmp-group)#save-password
VPNGate(config-isakmp-group)#exit

Sur le client

VPNClient(config-crypto-ezvpn)#xauth userid mode local
VPNClient(config-crypto-ezvpn)#username VPNClient password EzVPNPass
VPNClient(config-crypto-ezvpn)#connect auto

Tests:

VPNClient#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 80.0.0.1 to network 0.0.0.0

     80.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C       80.0.0.0/24 is directly connected, FastEthernet0/0
S       80.0.1.2/32 [1/0] via 80.0.0.1
     192.168.10.0/32 is subnetted, 1 subnets
C       192.168.10.4 is directly connected, Loopback0
C    192.168.0.0/24 is directly connected, Loopback1
S    192.168.1.0/24 [1/0] via 0.0.0.0, Virtual-Access2
S*   0.0.0.0/0 [10/0] via 80.0.0.1
VPNClient#ping 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/52/133 ms

ISAKMP

VPNClient#sh crypto session
Crypto session current status

Interface: FastEthernet0/0
Session status: UP-ACTIVE
Peer: 80.0.1.2 port 500
  IKE SA: local 80.0.0.2/500 remote 80.0.1.2/500 Active
  IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 0.0.0.0/0.0.0.0
        Active SAs: 2, origin: crypto map

VPNClient#sh crypto ipsec client ezvpn
Easy VPN Remote Phase: 6

Tunnel name : ezVpnConnection1
Inside interface list: Loopback1
Outside interface: Virtual-Access2 (bound to FastEthernet0/0)
Current State: IPSEC_ACTIVE
Last Event: SOCKET_UP
Address: 192.168.10.5 !IP du pool configuré
Mask: 255.255.255.255
Default Domain: labo.lan
Save Password: Disallowed
Split Tunnel List: 1
       Address    : 192.168.1.0 !Paramètres définit par l'ACL 101 sur VPNGate
       Mask       : 255.255.255.0
       Protocol   : 0x0
       Source Port: 0
       Dest Port  : 0
Current EzVPN Peer: 80.0.1.2

VPNClient#sh crypto map ! crypto maps générées automatiquement
Crypto Map: "Virtual-Access2-head-0" idb: FastEthernet0/0 local address: 80.0.0.2

Crypto Map "Virtual-Access2-head-0" 65536 ipsec-isakmp
	Map is a PROFILE INSTANCE.
	Peer = 80.0.1.2
	Extended IP access list
	    access-list  permit ip any any
	Current peer: 80.0.1.2
	Security association lifetime: 4608000 kilobytes/2147483 seconds
	PFS (Y/N): N
	DH group:  group2
	Transform sets={
		ezvpn-profile-autoconfig-transform-0,
		ezvpn-profile-autoconfig-transform-1,
		ezvpn-profile-autoconfig-transform-2,
		ezvpn-profile-autoconfig-transform-3,
		ezvpn-profile-autoconfig-transform-4,
		ezvpn-profile-autoconfig-transform-5,
		ezvpn-profile-autoconfig-transform-6,
		ezvpn-profile-autoconfig-transform-7,
		ezvpn-profile-autoconfig-transform-8,
		ezvpn-profile-autoconfig-transform-9,
                ezvpn-profile-autoconfig-transform-10,
		ezvpn-profile-autoconfig-transform-11,
		ezvpn-profile-autoconfig-transform-12,
		ezvpn-profile-autoconfig-transform-13,
		ezvpn-profile-autoconfig-transform-14,
		ezvpn-profile-autoconfig-transform-15,
		ezvpn-profile-autoconfig-transform-16,
		ezvpn-profile-autoconfig-transform-17,
		ezvpn-profile-autoconfig-transform-18,
		ezvpn-profile-autoconfig-transform-19,
	}
	Interfaces using crypto map Virtual-Access2-head-0:
		Virtual-Access2

VPNGATE:

VPNGate#sh ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route

Gateway of last resort is 80.0.1.1 to network 0.0.0.0

     80.0.0.0/24 is subnetted, 1 subnets
C       80.0.1.0 is directly connected, FastEthernet0/0
     192.168.10.0/32 is subnetted, 1 subnets
S       192.168.10.5 [1/0] via 0.0.0.0, Virtual-Access2
C    192.168.1.0/24 is directly connected, Loopback1
S*   0.0.0.0/0 [10/0] via 80.0.1.1
VPNGate#

Recent Entries

One Response to “Easy VPN Server Avec DVTI (Dynamic Vpn Tunnel Interfaces)”

  1. ISCW Lab: MPLS,VRF, VPNs, BGP, PPPoE, PPPoA, IPSec Site To Site/Remote access,... | Blog sur les technologies réseau et sécurité Says:

    […] va considérer que l’IP du routeur RBO1 est statique, sinon il aurait fallu faire de l’easy-vpn, ce qui aurait été possible, mais je n’avais pas envie. Pour le site-to-site je vais vous […]

Leave a Reply

Le temps imparti est dépassé. Merci de recharger le CAPTCHA.