Client VPN-connection with IPSec L2TP

Задача: установить vpn-соединение с корпоративным сервером.
В Windows XP все просто: указал домаенное имя сервера, указал preshared-key, протокол L2TP, указал свой логин и пароль и без проблем подключился.
Среда: Моя повседневная система - OpenSUSE 11.3, которая установлена на ноутбуке.
Интренет-провайдер - Домашний интернет от Beeline (VPN через PPTP), подключаюсь с помощью NetworkManager.

Теперь надо установить vpn-соединение c корпоративным сервером
Сначала подумал, что NetworkManager умеет все это делать, по аналогии с Beeline, но оказалось что нет.
NetworkManager еще и не дает установить второе vpn-подключение.

Пользовался следующим рукводством: Using Linux as an L2TP/IPsec VPN client
В OpenSUSE 11.3 установить соединение не получилось.

В Windows XP, которая работает как гостевая система в VM Ware Player, все без проблем заработало, как описал выше.
Установил OpenSUSE 12.1 RC2 в VM Ware Player. Сетевой интерфейс системы работает в режиме NAT.
Сеть поднимается стандартным способом, НЕ с помощью NetworkManager.
Все равно не получается. Использовал тоже самое руководство.

Далее привожу команды запуска и соответствующие логи для OpenSUSE 12.1 RC2 в VM Ware Player

Запускаю ipsec:

# ipsec start
Starting strongSwan 4.5.3 IPsec [starter]...

Лог в /var/log/messages:

Nov 15 14:29:38 linux-j2md ipsec_starter[6018]: Starting strongSwan 4.5.3 IPsec [starter]...
Nov 15 14:29:39 linux-j2md ipsec_starter[6026]: pluto (6027) started after 100 ms
Nov 15 14:29:39 linux-j2md pluto[6027]: Starting IKEv1 pluto daemon (strongSwan 4.5.3) THREADS SMARTCARD VENDORID CISCO_QUIRKS
Nov 15 14:29:39 linux-j2md pluto[6027]: attr-sql plugin: database URI not set
Nov 15 14:29:39 linux-j2md pluto[6027]: plugin 'attr-sql': failed to load - attr_sql_plugin_create returned NULL
Nov 15 14:29:39 linux-j2md pluto[6027]: listening on interfaces:
Nov 15 14:29:39 linux-j2md pluto[6027]:   eth0
Nov 15 14:29:39 linux-j2md pluto[6027]:     172.16.153.133
Nov 15 14:29:39 linux-j2md pluto[6027]:     fe80::20c:29ff:fecc:e399
Nov 15 14:29:39 linux-j2md pluto[6027]: loaded plugins: curl ldap mysql sqlite aes des blowfish sha1 sha2 md5 random x509 pkcs1 pgp dnskey pem openssl gcrypt gmp hmac xauth attr kernel-netlink resolve 
Nov 15 14:29:39 linux-j2md pluto[6027]:   including NAT-Traversal patch (Version 0.6c)
Nov 15 14:29:39 linux-j2md pluto[6027]: failed to load pkcs11 module '/usr/lib/opensc-pkcs11.so'
Nov 15 14:29:39 linux-j2md pluto[6027]: loading ca certificates from '/etc/ipsec.d/cacerts'
Nov 15 14:29:39 linux-j2md pluto[6027]: loading aa certificates from '/etc/ipsec.d/aacerts'
Nov 15 14:29:39 linux-j2md pluto[6027]: loading ocsp certificates from '/etc/ipsec.d/ocspcerts'
Nov 15 14:29:39 linux-j2md pluto[6027]: Changing to directory '/etc/ipsec.d/crls'
Nov 15 14:29:39 linux-j2md pluto[6027]: loading attribute certificates from '/etc/ipsec.d/acerts'
Nov 15 14:29:39 linux-j2md pluto[6027]: spawning 4 worker threads
Nov 15 14:29:39 linux-j2md pluto[6027]: listening for IKE messages
Nov 15 14:29:39 linux-j2md pluto[6027]: adding interface eth0/eth0 172.16.153.133:500
Nov 15 14:29:39 linux-j2md pluto[6027]: adding interface eth0/eth0 172.16.153.133:4500
Nov 15 14:29:39 linux-j2md pluto[6027]: adding interface lo/lo 127.0.0.1:500
Nov 15 14:29:39 linux-j2md pluto[6027]: adding interface lo/lo 127.0.0.1:4500
Nov 15 14:29:39 linux-j2md pluto[6027]: adding interface lo/lo ::1:500
Nov 15 14:29:39 linux-j2md pluto[6027]: loading secrets from "/etc/ipsec.secrets"
Nov 15 14:29:39 linux-j2md pluto[6027]:   loaded PSK secret for 172.16.153.133 <ip сервера> 
Nov 15 14:29:39 linux-j2md pluto[6027]: added connection description "l2tp-psk-client"

Запускаю соединение:

# ipsec up l2tp-psk-client

Лог в /var/log/messages:

Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: initiating Main Mode
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: ignoring Vendor ID payload [4f456768495f775c414c4679]
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: received Vendor ID payload [Dead Peer Detection]
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: received Vendor ID payload [RFC 3947]
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: enabling possible NAT-traversal with method 3
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: NAT-Traversal: Result using RFC 3947: i am NATed
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: ignoring Vendor ID payload [494b457632]
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: Peer ID is ID_IPV4_ADDR: '<IP-адрес VPN-сервера>'
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #1: ISAKMP SA established
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #2: initiating Quick Mode PSK+ENCRYPT+TUNNEL+UP {using isakmp#1}
Nov 15 14:29:46 linux-j2md pluto[6027]: "l2tp-psk-client" #2: sent QI2, IPsec SA established {ESP=>0x4e6ab939 <0xc8fc8d34 NATOA=0.0.0.0}

Как я понял, на этом шаге соединение установилось

Далее:

# /etc/init.d/xl2tpd start
redirecting to systemctl

Лог в /var/log/messages:

Nov 15 14:30:10 linux-j2md xl2tpd[6455]: setsockopt recvref[22]: Protocol not available
Nov 15 14:30:10 linux-j2md xl2tpd[6455]: Using l2tp kernel support.
Nov 15 14:30:10 linux-j2md xl2tpd[6458]: xl2tpd version xl2tpd-1.2.4 started on linux-j2md PID:6458
Nov 15 14:30:10 linux-j2md xl2tpd[6458]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
Nov 15 14:30:10 linux-j2md xl2tpd[6458]: Forked by Scott Balmos and David Stipp, (C) 2001
Nov 15 14:30:10 linux-j2md xl2tpd[6458]: Inherited by Jeff McAdams, (C) 2002
Nov 15 14:30:10 linux-j2md xl2tpd[6458]: Forked again by Xelerance (www.xelerance.com) (C) 2006
Nov 15 14:30:10 linux-j2md xl2tpd[6458]: Listening on IP address 0.0.0.0, port 1701
Nov 15 14:30:10 linux-j2md xl2tpd[6448]: Starting xl2tpd..done

Соединение l2tp:

# echo "c l2tp-psk-client" > /var/run/xl2tpd/l2tp-control

Лог в /var/log/messages:

Nov 15 14:30:42 linux-j2md xl2tpd[6458]: get_call: allocating new tunnel for host <IP-адрес VPN-сервера>, port 1701.
Nov 15 14:30:42 linux-j2md xl2tpd[6458]: Connecting to host <доменное имя VPN-сервера>, port 1701
Nov 15 14:30:42 linux-j2md xl2tpd[6458]: control_finish: message type is (null)(0).  Tunnel is 0, call is 0.
Nov 15 14:30:42 linux-j2md xl2tpd[6458]: control_finish: sending SCCRQ
Nov 15 14:30:47 linux-j2md xl2tpd[6458]: Maximum retries exceeded for tunnel 31350.  Closing.

И всё, соединение установить не могу.
В чём может быть дело?
Сейчас вынужден работать в виртуальной среде в Windows XP.

Содержимое /etc/ipsec.conf:

config setup
	nat_traversal=yes
	charonstart=no

conn l2tp-psk-client
    authby=secret
    pfs=no
    rekey=yes
    keyexchange=ikev1
    keyingtries=3
    type=tunnel
    left=%defaultroute
    leftprotoport=17/1701
    right=<доменное имя VPN-сервера>
    rightprotoport=17/1701
    auto=add

Содержимое /etc/ipsec.secrets:

172.16.153.133 <IP-адрес VPN-сервера> : PSK "<preshared key>"

Содержимое /etc/xl2tpd/xl2tpd.conf:

[global]
auth file = /etc/xl2tpd/l2tp-secrets
debug state = yes
debug tunnel = yes

[lac l2tp-psk-client]
lns = <доменное имя VPN-сервера>
require chap = yes
refuse pap = yes
require authentication = yes
name = <мой логин>
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.client
length bit = yes

Уточняющий вопрос, в винде ставишь галочку в свойствах “требуется шифрование данных(иначе отключаться)”?

Да, галочка стоит.

покажи свой еще /etc/ppp/options.xl2tpd.client

Вот:

ipcp-accept-local
ipcp-accept-remote
refuse-eap
refuse-pap
noccp
noauth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
connect-delay 5000
usepeerdns

Но до старта pppd вообще дело не доходит

Меня вот эти строчки беспокоят:

003 "l2tp-psk-client" #2: NAT-Traversal: Transport Mode not allowed due to security concerns -- using Tunnel mode
003 "l2tp-psk-client" #2: NAT-Traversal: Transport Mode not allowed due to security concerns -- using Tunnel mode

Виртуальная машина находится за NAT:

003 "l2tp-psk-client" #1: NAT-Traversal: Result using RFC 3947: i am NATed

попробуй добавить опцию в options.xl2tpd.client:
require-mppe
Если опять не работает, приведи вывод лога

Получилось настроить в OpenSUSE 11.3 когда я подключен напрямую к провайдеру, т.е. не через роутер
Настройки почти те же, что я указал в первом посте
Два изменения:

  1. в ipsec.conf параметр type должен быть transport (я про это забыл)
  2. модуль ядра pppol2tp должен быть ВЫГРУЖЕН (xl2ptd с ним работать не хочет)
    до этого у меня он бы загружен: xl2tpd[6455]: Using l2tp kernel support

Через роутер, а так же в виртуальной машине OpenSUSE 12.1 RC2 настроить подключение не получается:
ipsec переходит в режим туннеля, транспортный режим не устанавливается, об этом я писал в 6-м посте.
В виртуальной машине Windows XP все поднимается.

Расскажу все по порядку.
У меня есть свой сервер на котором поднят openswan+xl2tpd, поэтому у меня было время и место для экспериментов. Клиенты с виндой коннектятся нормально, на моей машине стоит openSUSE 11.4, на которой я использовал точно такую же связку openswan+xl2tpd, только в качестве клиента. Пакет брал здесь openswan. Все завелось, даже включал шифрование MPPE. На виртуалке поставил openSUSE 12.1, в родных репозиториях есть только strongswan, его и использовал. Настроил конфиги strongswan и xl2tpd. Проверял работоспособность по отдельности:
командой “ipsec up L2TP-PSK” поднимал туннель, он работал. командой “ipsec down L2TP-PSK” его убивал и поднимал впн соединение “echo “c L2TPserver” > /var/run/xl2tpd/l2tp-control” оно тоже поднималось, НО без шифрования ipsec.
Запускал последовательно “ipsec up L2TP-PSK”, “echo “c L2TPserver” > /var/run/xl2tpd/l2tp-control” вылазит такая же хрень как и у тебя. Начал искать в чем причина. Перерерыл пол инета, до меня дошло на своей хостовой машине выставить параметр в ipsec.conf type=tunnel вместо type=transport, и тут вылазит такая же хрень снова, туннель ipsec есть, а впн-а нет, и ТОЧНО ТАКАЯ же ошибка:

Nov 15 14:30:42 linux-j2md xl2tpd[6458]: get_call: allocating new tunnel for host <IP-адрес VPN-сервера>, port 1701.
Nov 15 14:30:42 linux-j2md xl2tpd[6458]: Connecting to host <доменное имя VPN-сервера>, port 1701
Nov 15 14:30:42 linux-j2md xl2tpd[6458]: control_finish: message type is (null)(0).  Tunnel is 0, call is 0.
Nov 15 14:30:42 linux-j2md xl2tpd[6458]: control_finish: sending SCCRQ
Nov 15 14:30:47 linux-j2md xl2tpd[6458]: Maximum retries exceeded for tunnel 31350.  Closing.

Ставлю обратно type=transport, все отлично работает.
Пытаюсь выставить такой же параметр на виртуальной 12.1, а при запуске туннеля вылазит то, что ты отметил в посте #6

003 "l2tp-psk-client" #2: NAT-Traversal: Transport Mode not allowed due to security concerns -- using Tunnel mode
003 "l2tp-psk-client" #2: NAT-Traversal: Transport Mode not allowed due to security concerns -- using Tunnel mode

Ответ оказался очевидным, но неутешительным - разрабы дистрибутива пакет собрали без опции --enable-nat-transport. Ответ находится на вики-странице strongSwan - FAQ
Получается, что xl2tpd работает через ipsec только в транспортном режиме, по другому никак. Похоже, что придеться собирать пакет из сырцов.
P.S. за это и не люблю пакетные дистры, что разрабы знают больше что надо пользователям, выкидывая “не нужные” опции при сборке пакетов.

Спасибо огромное :slight_smile:
Сейчас пересобрал rpm из исходников и добавил опцию в spec файл.
Установил, попробовал - всё работает, теперь даже через роутер.

Нельзя ли как-то мейнтейнерам пакета сообщить, чтобы добавили опцию в spec-файл?
Может кто-то из знающих людей читает этот тред.

raiderx wrote:

> Нельзя ли как-то мейнтейнерам пакета
> сообщить, чтобы добавили опцию в
> spec-файл?

Откройте bugreport на bugzilla.novell.com.
В пункт “Assigned To” впишите мейнтейнера пакета.

Bugreport создал https://bugzilla.novell.com/show_bug.cgi?id=731547
а пункт “Assigned To” не нашел, да и мейнтейнера