Debian se serre comme passerelle L2TP / IPSec pour les appareils Android

J'essaie de configurer Debian comme un VPN L2TP / IPSec pour les appareils Android, mais sans succès.

Jusqu'à présent, j'ai suivi:

  1. Debian configuré avec succès avec la mise en œuvre openswan d'IPSec. Je pourrais me connecter à partir de périphériques avec Android 2.3 mais pas à partir de périphériques avec Android 4 à cause d'un bug dans Android 4 (mentionné ici: http://code.google.com/p/android/issues/detail?id=23124 )

  2. Après avoir remplacé openswan par un racoon, je viens au point où:

    • Je peux me connecter à partir d'Android 4 avec IPSec Xauth PSK (mais uniquement à partir de mon ordinateur portable Android Android et pas de la vraie tablette avec ICS. Lors de la connection depuis la tablette, mon server dit que l'user a été authentifié et tout semble être correct, mais la tablette dit " connection échouée "- mais ce sont des appareils chinois cheep avec sausagemod, alors peut-être que c'est correct)
    • Je peux me connecter en utilisant Cisco VPN Client
    • mais je ne peux pas me connecter à partir de n'importe quel Android en utilisant L2TP / IPSec PSK (je préfère ce protocole, car ce n'est probablement que le choix pris en charge sur tous les clients Android, quelle que soit la version)

ma configuration est la suivante:

racoon.conf:

path pre_shared_key "/etc/racoon/psk.txt"; log info; listn { isakmp 172.31.251.122[500]; isakmp_natt 172.31.251.122[4500]; } timer { natt_keepalive 10sec; } remote anonymous { exchange_mode aggressive; my_identifier fqdn "mydomain.com.pl"; doi ipsec_doi; generate_policy on; situation_identity_only; lifetime time 28800 sec; passive on; initial_contact off; nat_traversal on; proposal_check obey; proposal { encryption_algorithm aes; hash_algorithm md5; authentication_method pre_shared_key; dh_group 2; } proposal { encryption_algorithm aes; hash_algorithm md5; authentication_method xauth_psk_server; dh_group 2; } } mode_cfg { auth_source system; network4 100.99.99.1; netmask4 255.255.255.0; pool_size 254; dns4 172.16.0.10; wins4 172.16.0.10; default_domain "mydomain.com.pl"; split_network include 172.16.0.0/16; split_dns "mydomain.com.pl"; save_passwd on; pfs_group 2; } sainfo anonymous { encryption_algorithm aes, 3des; authentication_algorithm hmac_sha1, hmac_md5; compression_algorithm deflate; } 

x2ltpd.conf:

 [global] ; Global parameters: port = 1701 ; * Bind to port 1701 auth file = /etc/ppp/chap-secrets ; * Where our challenge secrets are access control = no ; * Refuse connections without IP match rand source = dev ; Source for entropy for random #debug avp = yes #debug network = yes debug state = yes debug tunnel = yes [lns default] ; Our fallthrough LNS definition exclusive = no ; * Only permit one tunnel per host ip range = 100.99.99.1-100.99.99.254 local ip = 172.16.116.202 require chap = yes refuse pap = yes require authentication = yes name = l2tp ppp debug = yes length bit = yes pppoptfile = /etc/ppp/xl2tpd-options 

Une note importante: ma boîte Debian est derrière NAT, donc l'adresse 172.16.116.202 est son adresse LAN et 172.31.251.122 est-ce que c'est une adresse "publique".

Des indices ou des suggestions?

– éditer — @SmalllClanger:

Après avoir activé toutes les options de debugging dans x2ltpd.conf, je reçois le journal suivant:

 Apr 22 12:22:07 l2tp racoon: INFO: respond new phase 1 negotiation: private_ip_of_my_server[500]<=>public_ip_of_adnroid_client[500] Apr 22 12:22:07 l2tp racoon: INFO: begin Aggressive mode. Apr 22 12:22:07 l2tp racoon: INFO: received broken Microsoft ID: FRAGMENTATION Apr 22 12:22:07 l2tp racoon: INFO: received Vendor ID: RFC 3947 Apr 22 12:22:07 l2tp racoon: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02 Apr 22 12:22:07 l2tp racoon: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-02#012 Apr 22 12:22:07 l2tp racoon: INFO: received Vendor ID: draft-ietf-ipsec-nat-t-ike-00 Apr 22 12:22:07 l2tp racoon: INFO: received Vendor ID: DPD Apr 22 12:22:07 l2tp racoon: INFO: Selected NAT-T version: RFC 3947 Apr 22 12:22:07 l2tp racoon: INFO: Adding remote and local NAT-D payloads. Apr 22 12:22:07 l2tp racoon: INFO: Hashing public_ip_of_adnroid_client[500] with algo #1 Apr 22 12:22:07 l2tp racoon: INFO: Hashing private_ip_of_my_server[500] with algo #1 Apr 22 12:22:07 l2tp racoon: INFO: NAT-T: ports changed to: public_ip_of_adnroid_client[4500]<->private_ip_of_my_server[4500] Apr 22 12:22:07 l2tp racoon: INFO: Hashing private_ip_of_my_server[4500] with algo #1 Apr 22 12:22:07 l2tp racoon: INFO: NAT-D payload #0 doesn't match Apr 22 12:22:07 l2tp racoon: INFO: Hashing public_ip_of_adnroid_client[4500] with algo #1 Apr 22 12:22:07 l2tp racoon: INFO: NAT-D payload #1 doesn't match Apr 22 12:22:07 l2tp racoon: INFO: NAT detected: ME PEER Apr 22 12:22:07 l2tp racoon: INFO: ISAKMP-SA established private_ip_of_my_server[4500]-public_ip_of_adnroid_client[4500] spi:2ea51a231acb960b:e21a79f71e04b7e2 Apr 22 12:22:08 l2tp racoon: INFO: respond new phase 2 negotiation: private_ip_of_my_server[4500]<=>public_ip_of_adnroid_client[4500] Apr 22 12:22:08 l2tp racoon: INFO: no policy found, try to generate the policy : private_ip_of_adnroid_client/32[0] public_ip_of_my_server/32[1701] proto=udp dir=in Apr 22 12:22:08 l2tp racoon: INFO: Adjusting my encmode UDP-Transport->Transport Apr 22 12:22:08 l2tp racoon: INFO: Adjusting peer's encmode UDP-Transport(4)->Transport(2) Apr 22 12:22:08 l2tp racoon: INFO: IPsec-SA established: ESP/Transport public_ip_of_adnroid_client[4500]->private_ip_of_my_server[4500] spi=35407234(0x21c4582) Apr 22 12:22:08 l2tp racoon: INFO: IPsec-SA established: ESP/Transport private_ip_of_my_server[4500]->public_ip_of_adnroid_client[4500] spi=41649440(0x27b8520) Apr 22 12:22:08 l2tp racoon: ERROR: such policy does not already exist: "private_ip_of_adnroid_client/32[0] public_ip_of_my_server/32[1701] proto=udp dir=in" Apr 22 12:22:08 l2tp racoon: ERROR: such policy does not already exist: "public_ip_of_my_server/32[1701] private_ip_of_adnroid_client/32[0] proto=udp dir=out" 

J'ai déjà remarqué pour les lignes indiquant:

 ERROR: such policy does not already exist: "private_ip_of_adnroid_client/32[0] public_ip_of_my_server/32[1701] proto=udp dir=in" ERROR: such policy does not already exist: "public_ip_of_my_server/32[1701] private_ip_of_adnroid_client/32[0] proto=udp dir=out" 

qui signalent évidemment une mauvaise politique de SA (le server et le client sont derrière NAT, et pour l'instant je n'ai aucune possibilité de le changer de part et d'autre)

J'ai donc apporté des modifications appropriées au file /etc/ipsec-tools.conf comme suit:

 spdadd public_ip_of_my_server[l2tp] 0.0.0.0/0 udp -P out ipsec esp/transport//require; spdadd 0.0.0.0/0 public_ip_of_my_server[l2tp] udp -P in ipsec esp/transport//require; 

mais n'a pas aidé.

PS Il existe également un petit problème supplémentaire. Ma configuration exige que le client spécifie le nom d'user PSK et la key PSK, mais le nom d'user PSK (identifiant IPSec) ne peut être spécifié que sur les périphériques avec Android 4. Sur les périphériques avec Android 2.x, aucune option n'est disponible. J'ai essayé de replace cette valeur par ***** dans le file racoon psk.txt, mais je n'ai pas réussi. Comment puis-je spécifier la key PSK sans obliger les clients à utiliser les identifiants IPSec?