VPN IPSec entre Pfsense et openswan



  • Bonjour à tous,

    Je suis actuellement sur un épineux problème que je ne parvient pas à résoudre.

    Avant toute chose, je suis étudiant en informatique, au vu de certaines discutions houleuses sur le forum, je préfère vous en avertir :P

    Je rentre dans le vif du sujet, je souhaiterais simplement mettre en place un VPN entre un serveur distant et un pfsense :

    L'adresse coté WAN sur PFsense est variable (ligne dsl), idem pour les clients

    La configuration sur le serveur distant est fonctionnel, je peux me connecter en l2tp/ipsec avec windows.

    Le détail de cette configuration est :

    ipsec whack --status
    000 using kernel interface: netkey
    000 interface lo/lo ::1
    000 interface lo/lo 127.0.0.1
    000 interface lo/lo 127.0.0.1
    000 interface eth0/eth0 123.123.123.123
    000 interface eth0/eth0 123.123.123.123
    000 %myid = (none)
    000 debug none
    000
    000 virtual_private (%priv):
    000 - allowed 6 subnets: 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 25.0.0.0/8, fd00::/8, fe80::/10
    000 - disallowed 0 subnets:
    000 WARNING: Disallowed subnets in virtual_private= is empty. If you have
    000          private address space in internal use, it should be excluded!
    000
    000 algorithm ESP encrypt: id=2, name=ESP_DES, ivlen=8, keysizemin=64, keysizemax=64
    000 algorithm ESP encrypt: id=3, name=ESP_3DES, ivlen=8, keysizemin=192, keysizemax=192
    000 algorithm ESP encrypt: id=6, name=ESP_CAST, ivlen=8, keysizemin=40, keysizemax=128
    000 algorithm ESP encrypt: id=7, name=ESP_BLOWFISH, ivlen=8, keysizemin=40, keysizemax=448
    000 algorithm ESP encrypt: id=11, name=ESP_NULL, ivlen=0, keysizemin=0, keysizemax=0
    000 algorithm ESP encrypt: id=12, name=ESP_AES, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=13, name=ESP_AES_CTR, ivlen=8, keysizemin=160, keysizemax=288
    000 algorithm ESP encrypt: id=14, name=ESP_AES_CCM_A, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=15, name=ESP_AES_CCM_B, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=16, name=ESP_AES_CCM_C, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=18, name=ESP_AES_GCM_A, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=19, name=ESP_AES_GCM_B, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=20, name=ESP_AES_GCM_C, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=22, name=ESP_CAMELLIA, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=252, name=ESP_SERPENT, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP encrypt: id=253, name=ESP_TWOFISH, ivlen=8, keysizemin=128, keysizemax=256
    000 algorithm ESP auth attr: id=1, name=AUTH_ALGORITHM_HMAC_MD5, keysizemin=128, keysizemax=128
    000 algorithm ESP auth attr: id=2, name=AUTH_ALGORITHM_HMAC_SHA1, keysizemin=160, keysizemax=160
    000 algorithm ESP auth attr: id=5, name=AUTH_ALGORITHM_HMAC_SHA2_256, keysizemin=256, keysizemax=256
    000 algorithm ESP auth attr: id=6, name=AUTH_ALGORITHM_HMAC_SHA2_384, keysizemin=384, keysizemax=384
    000 algorithm ESP auth attr: id=7, name=AUTH_ALGORITHM_HMAC_SHA2_512, keysizemin=512, keysizemax=512
    000 algorithm ESP auth attr: id=8, name=AUTH_ALGORITHM_HMAC_RIPEMD, keysizemin=160, keysizemax=160
    000 algorithm ESP auth attr: id=9, name=AUTH_ALGORITHM_AES_CBC, keysizemin=128, keysizemax=128
    000 algorithm ESP auth attr: id=251, name=(null), keysizemin=0, keysizemax=0
    000
    000 algorithm IKE encrypt: id=0, name=(null), blocksize=16, keydeflen=131
    000 algorithm IKE encrypt: id=5, name=OAKLEY_3DES_CBC, blocksize=8, keydeflen=192
    000 algorithm IKE encrypt: id=7, name=OAKLEY_AES_CBC, blocksize=16, keydeflen=128
    000 algorithm IKE hash: id=1, name=OAKLEY_MD5, hashsize=16
    000 algorithm IKE hash: id=2, name=OAKLEY_SHA1, hashsize=20
    000 algorithm IKE dh group: id=2, name=OAKLEY_GROUP_MODP1024, bits=1024
    000 algorithm IKE dh group: id=5, name=OAKLEY_GROUP_MODP1536, bits=1536
    000 algorithm IKE dh group: id=14, name=OAKLEY_GROUP_MODP2048, bits=2048
    000 algorithm IKE dh group: id=15, name=OAKLEY_GROUP_MODP3072, bits=3072
    000 algorithm IKE dh group: id=16, name=OAKLEY_GROUP_MODP4096, bits=4096
    000 algorithm IKE dh group: id=17, name=OAKLEY_GROUP_MODP6144, bits=6144
    000 algorithm IKE dh group: id=18, name=OAKLEY_GROUP_MODP8192, bits=8192
    000 algorithm IKE dh group: id=22, name=OAKLEY_GROUP_DH22, bits=1024
    000 algorithm IKE dh group: id=23, name=OAKLEY_GROUP_DH23, bits=2048
    000 algorithm IKE dh group: id=24, name=OAKLEY_GROUP_DH24, bits=2048
    000
    000 stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,0,0} trans={0,0,0} attrs={0,0,0}
    000
    000 "l2tp-psk": 123.123.123.123<123.123.123.123>[+S=C]:17/1701...%virtual[+S=C]:17/%any===?; unrouted; eroute owner: #0
    000 "l2tp-psk":     myip=unset; hisip=unset;
    000 "l2tp-psk":   ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
    000 "l2tp-psk":   policy: PSK+ENCRYPT+TUNNEL+DONTREKEY+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0;
    000 "l2tp-psk":   newest ISAKMP SA: #0; newest IPsec SA: #0;
    000 "l2tp-psk"[13]: 123.123.123.123<123.123.123.123>[+S=C]:17/1701...85.68.223.142[192.168.1.100,+S=C]:17/1701===192.168.1.100/32; erouted; eroute owner: #22
    000 "l2tp-psk"[13]:     myip=unset; hisip=unset;
    000 "l2tp-psk"[13]:   ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0
    000 "l2tp-psk"[13]:   policy: PSK+ENCRYPT+TUNNEL+DONTREKEY+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0;
    000 "l2tp-psk"[13]:   newest ISAKMP SA: #19; newest IPsec SA: #22;
    000 "l2tp-psk"[13]:   IKE algorithm newest: AES_CBC_256-SHA1-MODP2048
    000
    000 #22: "l2tp-psk"[13] 85.68.223.142:4500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_EXPIRE in 2615s; newest IPSEC; eroute owner; isakmp#19; idle; import:not set
    000 #22: "l2tp-psk"[13] 85.68.223.142 esp.8c30d2f4@85.68.223.142 esp.b0ccab72@123.123.123.123 ref=0 refhim=4294901761
    000 #19: "l2tp-psk"[13] 85.68.223.142:4500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_EXPIRE in 20975s; newest ISAKMP; nodpd; idle; import:not set
    000
    
    

    Mon fichier /etc/ipsec.conf :

    version 2.0
    
    config setup
            dumpdir=/var/run/pluto/
            nat_traversal=yes
            virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
            oe=off
            protostack=netkey
    
    conn l2tp-psk
            authby=secret
            pfs=no
            auto=add
            rekey=no
            type=tunnel
            left=123.123.123.123
            leftprotoport=17/1701
            right=%any
            rightprotoport=17/%any
            rightsubnet=vhost:%priv,%no
    

    Mon fichier /etc/xl2tpd/xl2tpd.conf

    [global]                        ; Global parameters:
    port = 1701                     ; * Bind to port 1701
    listen-addr = 123.123.123.123
    
    [lns default]                   ; Our fallthrough LNS definition
    ip range = 10.0.0.10-10.0.0.50  ; * Allocate from this IP range
    local ip = 10.0.0.254           ; * Our local IP to use
    require chap = yes              ; * Require CHAP auth. by peer
    refuse pap = yes                ; * Refuse PAP authentication
    

    PFsense :
    Les erreurs que je rencontre (log pfsense) :

    Mar 4 17:38:48	racoon: INFO: @(#)ipsec-tools 0.8.1 (http://ipsec-tools.sourceforge.net)
    Mar 4 17:38:48	racoon: INFO: @(#)This product linked OpenSSL 1.0.1e 11 Feb 2013 (http://www.openssl.org/)
    Mar 4 17:38:48	racoon: INFO: Reading configuration from "/var/etc/ipsec/racoon.conf"
    Mar 4 17:38:48	racoon: DEBUG: call pfkey_send_register for AH
    Mar 4 17:38:48	racoon: DEBUG: call pfkey_send_register for ESP
    Mar 4 17:38:48	racoon: DEBUG: call pfkey_send_register for IPCOMP
    Mar 4 17:38:48	racoon: DEBUG: reading config file /var/etc/ipsec/racoon.conf
    Mar 4 17:38:48	racoon: DEBUG: no check of compression algorithm; not supported in sadb message.
    Mar 4 17:38:48	racoon: DEBUG: getsainfo params: loc='10.0.0.15' rmt='10.0.0.0/8' peer='NULL' client='NULL' id=1
    Mar 4 17:38:48	racoon: DEBUG: open /var/db/racoon/racoon.sock as racoon management.
    Mar 4 17:38:48	racoon: [Self]: INFO: 192.168.1.30[4500] used for NAT-T
    Mar 4 17:38:48	racoon: [Self]: INFO: 192.168.1.30[4500] used as isakmp port (fd=9)
    Mar 4 17:38:48	racoon: [Self]: INFO: 192.168.1.30[500] used for NAT-T
    Mar 4 17:38:48	racoon: [Self]: INFO: 192.168.1.30[500] used as isakmp port (fd=10)
    Mar 4 17:38:48	racoon: DEBUG: pk_recv: retry[0] recv()
    Mar 4 17:38:48	racoon: DEBUG: got pfkey X_SPDDUMP message
    Mar 4 17:38:48	racoon: DEBUG: pfkey X_SPDDUMP failed: No such file or directory
    Mar 4 17:38:48	racoon: DEBUG: pk_recv: retry[0] recv()
    Mar 4 17:38:48	racoon: DEBUG: got pfkey REGISTER message
    Mar 4 17:38:48	racoon: INFO: unsupported PF_KEY message REGISTER
    Mar 4 17:38:48	racoon: DEBUG: pk_recv: retry[0] recv()
    Mar 4 17:38:48	racoon: DEBUG: got pfkey X_SPDADD message
    Mar 4 17:38:48	racoon: DEBUG: pk_recv: retry[0] recv()
    Mar 4 17:38:48	racoon: DEBUG: got pfkey X_SPDADD message
    Mar 4 17:38:48	racoon: DEBUG: sub:0xbfbfe724: 192.168.254.0/24[0] 192.168.254.254/32[0] proto=any dir=in
    Mar 4 17:38:48	racoon: DEBUG: db :0x28501288: 192.168.254.254/32[0] 192.168.254.0/24[0] proto=any dir=out
    Mar 4 17:38:48	racoon: DEBUG: pk_recv: retry[0] recv()
    Mar 4 17:38:48	racoon: DEBUG: got pfkey X_SPDADD message
    Mar 4 17:38:48	racoon: DEBUG: sub:0xbfbfe724: 10.0.0.15/32[0] 10.0.0.0/8[0] proto=any dir=out
    Mar 4 17:38:48	racoon: DEBUG: db :0x28501288: 192.168.254.254/32[0] 192.168.254.0/24[0] proto=any dir=out
    Mar 4 17:38:48	racoon: DEBUG: sub:0xbfbfe724: 10.0.0.15/32[0] 10.0.0.0/8[0] proto=any dir=out
    Mar 4 17:38:48	racoon: DEBUG: db :0x285013c8: 192.168.254.0/24[0] 192.168.254.254/32[0] proto=any dir=in
    Mar 4 17:38:48	racoon: DEBUG: pk_recv: retry[0] recv()
    Mar 4 17:38:48	racoon: DEBUG: got pfkey X_SPDADD message
    Mar 4 17:38:48	racoon: DEBUG: sub:0xbfbfe724: 10.0.0.0/8[0] 10.0.0.15/32[0] proto=any dir=in
    Mar 4 17:38:48	racoon: DEBUG: db :0x28501288: 192.168.254.254/32[0] 192.168.254.0/24[0] proto=any dir=out
    Mar 4 17:38:48	racoon: DEBUG: sub:0xbfbfe724: 10.0.0.0/8[0] 10.0.0.15/32[0] proto=any dir=in
    Mar 4 17:38:48	racoon: DEBUG: db :0x285013c8: 192.168.254.0/24[0] 192.168.254.254/32[0] proto=any dir=in
    Mar 4 17:38:48	racoon: DEBUG: sub:0xbfbfe724: 10.0.0.0/8[0] 10.0.0.15/32[0] proto=any dir=in
    Mar 4 17:38:48	racoon: DEBUG: db :0x28501508: 10.0.0.15/32[0] 10.0.0.0/8[0] proto=any dir=out
    

    Et la configuration de pfsense :


    Ressources utilisés :

    Livres :
    Les VPN - Fonctionnement, mise en oeuvre et maintenance - Edition ENI
    pfsense - The definitive Guide - Edition Reed Media Services

    Documentations :
    https://github.com/xelerance/Openswan/wiki
    https://github.com/xelerance/Openswan/wiki/L2tp-ipsec-configuration-using-openswan-and-xl2tpd
    http://www.nta-monitor.com/wiki/index.php/OpenSwan
    https://doc.pfsense.org/index.php/Routing_internet_traffic_through_a_site-to-site_IPsec_tunnel
    https://doc.pfsense.org/index.php/IPsec_Troubleshooting

    Problèmes similaires :
    https://forum.pfsense.org/index.php?topic=65312.0
    https://forum.pfsense.org/index.php?topic=4957.0
    http://marc.info/?l=pfsense-support&m=123365753708608

    J'ai un doute concernant la configuration phase 2 sur mon pfsense,

    EDIT :

    La connexion fonctionnel sous windows :

    Je vous remercie par avance, de votre soutient,

    Cordialement,



  • D'où viennent les erreurs que vous avez posté ? Pfsense, Openswan ? Et à quel moment ? Pas le temps de chercher je préfère vous poser la question.



  • Merci de l'intérêt que vous portez à mon problème,

    Les erreurs postés, proviennent des logs de pfsense.



  • J'ai l'impression que vous configurez pfSense par Ipsec et que vos clients utilisent L2TP.
    La logique serait plutôt de configurer un VPN L2TP sur pfSense face à des clients L2TP.

    NB : Microsoft indique que L2TP utilise Ipsec mais je n'entends pas que cela signifie qu'on peut se connecter à un serveur Ipsec "pur".

    (Je ne vais pas dire plus que ce post … parce que j'ai tenté une seule fois de configurer le serveur VPN L2TP sans aucun succès, alors que j'ai plusieurs pfSense en serveur VPN OpenVPN qui sont immédiats ainsi que des pfSense en serveur VPN Ipsec site à site presque immédiats aussi !)



  • J'ai l'impression que vous configurez pfSense par Ipsec et que vos clients utilisent L2TP.

    Oui, mais clients utilisent L2TP, je suis en accord avec vous, cela m'as d'ailleurs un peu perturbé en lisant les documentations, sur le site technet de microsoft, mais du coup par rapport à vos propros, j'ai l'impression de ne pas avoir compris quelques choses :P

    Il me semblait qu'IPSec n'est pas un VPN, mais bien une un outils qui permet d'ajouter une couche cryptographique, a l'instar de SSL/TLS sur OpenVPN, du moins les documentations vont dans ce sens…

    Car ce que j'avais compris c'était que L2TP était un "mélange" de PPTP de microsoft et L2F de cisco, qu'il fonctionnait sur la couche 2 du modèle OSI, mais que a proprement parlé, nous pouvions faire du VPN avec seulement du PPTP, car lui aussi avait sa couche de sécurité, désaprouvé aujourd'hui. Es-ce que je me trompe, ou es-ce que j'ai mélangé des informations ?

    La logique serait plutôt de configurer un VPN L2TP sur pfSense face à des clients L2TP.

    En fait, le serveur nommé "serveur distant" a plusieurs clients et des ressources disponibles pour ces clients. Ce serveur est un serveur dédié avec une bande passante up/down et une disponibilité bien plus accrus que mon pfsense. En outre, il dispose d'une IP fixe. C'est pour cette raison que j'aimerais configurer mon pfsense en tant que client L2TP/IPSec.

    Cordialement,



  • Il y  a deux grandes familles de vpn : Ipsec (pas forcément tous interopérables entre eux) et d'autre part les vpn SSL (Open vpn pr exemple). Je parle de vpn qui offre des garanties de sécurité, je laisse de côté ceux qui sont peu sûrs (pptp) et ceux, beaucoup plus spécifiques, mis en ouvre sur les réseaux des opérateurs, comme MPLS.

    Pfsense sait faire du vpn ssl et du vpn Ipsec.

    On a tendance à considérer Ipsec comme plus sûr que la solution SSL. C'est tout relatif et question de mise en œuvre.
    Ipsec est souvent plus utilisé dans les vpn pour l'interconnexion de sites et SSL pour les utilisateurs nomades. Il y a de multiples raisons, mais en pratique il n'existe pas de bon client ipsec open source mais le client Openvpn est remarquablement fiable. D' où le choix d'Openvpn pour les nomades. L'interopérabilité est souvent plus évident avec Openvpn, même si le client Cisco Ipsec fonctionne très bien avec Pfsense, encore faut il disposer des licences.

    Une autre différence porte sur le fonctionnement du vpn lui même. Dans ipsec la totalité du paquet ip d'irigine est encapsulé (et chiffré) dans un autre paquet ip sur le réseau publique. De ce fait les entêtes ip et tcp des réseaux internes sont protégées (et conservées). Avec le vpn SSL seul la partie data du paquet est chiffrée. Cela peut convenir ou non selon les cas. Il n'y  a pas de réponse toute faite. On peut noter que le surcharge protocolaire est plus importante en ipsec et que les nat peut poser problème lors de la vérification de l'intégrité des paquets. L2TP est le pire de ce point de vue : http://wallu.pagesperso-orange.fr/pag-l.htm par exemple.

    En dehors de tout cela et dans votre cas ipsec semble un bonne solution. Vous devez vous assurer que les paramètres cryptographiques sont rigoureusement identique à chaque extrémité.



  • C'est bien ce qui m'avait semblé, merci de ces informations ccnet :)

    Concernant la mise en place de ma solution, là où je suis un peu dubitatif, c'est que je n'ai rien dans les logs côté serveur distant, pas une seule tentative de quoi que ce soit, alors que lorsque je me connecte (que cela échoue ou non) avec un client nomade, j'ai une tartine de lignes supplémentaires qui s'ajoute à mon syslog…



  • Il faudrait activer spécifiquement des logs sur le serveur distant, ou monitorer le trafic sur le site distant pour vérifier qu'en effet un flux arrive.



  • Vous avez supprimé du post initial les images avec ipsec.
    Il serait bon que vous indiquiez où vous en êtes : si client L2TP alors serveur L2TP


Log in to reply