Назад | Перейти на главную страницу

Debian squeeze как шлюз L2TP / IPSec для устройств Android

Я пытаюсь настроить Debian squeeze как L2TP / IPSec VPN для устройств Android, но без особого успеха.

Пока что я сделал следующее:

  1. Успешно настроен Debian с реализацией IPSec в openswan. Я мог подключиться с устройств с Android 2.3, но не с устройств с Android 4 из-за ошибки в Android 4 (упоминается здесь: http://code.google.com/p/android/issues/detail?id=23124)

  2. После замены openswan на racoon я дошел до точки, где:

    • Я могу подключиться с Android 4 с помощью IPSec Xauth PSK (но только с моего ноутбука, подключенного к Android ICS, а не с настоящего планшета с ICS. При подключении с планшета мой сервер сообщает, что пользователь прошел аутентификацию, и все в порядке, но планшет сообщает: « подключение неудачно »- но это дешевые китайские девайсы с sausagemod, так что может это нормально)
    • Я могу подключиться с помощью Cisco VPN Client
    • но я не могу подключиться с любого Android с помощью L2TP / IPSec PSK (я предпочитаю этот протокол, поскольку это, вероятно, единственный вариант, поддерживаемый всеми клиентами Android, независимо от версии)

моя конфигурация выглядит следующим образом:

racoon.conf:

path pre_shared_key "/etc/racoon/psk.txt";

log info;
listen
{
        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

Одно важное замечание: мой ящик Debian находится за NAT, поэтому адрес 172.16.116.202 - это адрес LAN, а 172.31.251.122 - это «публичный» адрес.

Есть подсказки или предложения?

- изменить --- @SmalllClanger:

После включения всех параметров отладки в x2ltpd.conf я получаю следующий журнал:

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"

Я уже заметил строки, в которых говорится:

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"

которые сигнализируют о заведомо неправильной политике SA (и сервер, и клиент находятся за NAT, и пока у меня нет возможности изменить ее ни с одной стороны)

Итак, я внес соответствующие изменения в файл /etc/ipsec-tools.conf следующим образом:

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;

но не помогло.

P.S. Есть еще одна небольшая проблема. Моя конфигурация требует, чтобы клиент указывал и имя пользователя PSK, и ключ PSK, но имя пользователя PSK (идентификатор IPSec) может быть указано только на устройствах с Android 4. На устройствах с Android 2.x такой опции нет. Я попытался заменить это значение на ***** в файле racoon psk.txt, но безуспешно. Как я могу указать ключ PSK, не заставляя клиентов использовать идентификаторы IPSec?