Даже не знаю с чего начать, наверное начну с того, что пытался найти нормальный l2tp\ipsec gui плагин под ubuntu\linux, но не вышло. Поэтому, начал с самого начала, а именно ipsec клиента. Тут выбор довольно большой, самый распространенный openswan, затем stronswan, vpnc(cisco), libreswan(fork openswan`a), совсем старый freeSwan, и racoon(ipsec-tools), каждый из этих реализаций ipsec имеет свои плюсы и минусы, но я обратил внимание, что последний(racoon) используется в android, freeBSD, macOSX и iOS, и имеет схожую конфигурацию, но разные способы хранения конфиг. файлов. Чаще всего это были XML.
Итак из всего этого стало понятно, надо использовать в качестве клиента ipsec - racoon, но тут не все так просто. Дело в том, что ipsec туннель для своей работы использует очень строгий порядок установки соединения. В конфигурации необходимо явно указать, какой режим шифрования необходимо устанавливать, или туннельный(для шифрования всего ип пакета) или транспортный, для шифрования только его содержимого. Если есть NAT, то тут возможно использовать только транспортный режим, поскольку туннельный режим обеспечивает шифрование пакета в целом, что не дает нату полноценно подменять порт и айпи заголовок. Далее идет двух фазовая установка соединения. И тут самое сложное, поскольку необходимо точно знать алгоритмы шифрования на каждом этапе:
1.encryption_algorithm
2.hash_algorithm
3.Diffie Hellman group
4. Время жизни фазы
5. authentication_algorithm
В этом плане пришлось задать интересный вопрос, как mac os и прочие выставляют эти параметры, если они еще ничего не знают о шифровании на сервере? Как показал анализ конфиг. файлов, то у них почти у всех есть предустановленная конфигурация. Причем её поменять просто так не получится, по крайней мере в android я не смог даже найти, где хранятся конфиги туннелей, пришлось устанавливать утилиту для импорта настроек. И последнее, необходимо определить какие пакеты будут шифроваться, а какие нет. Для этого используется утилита из состава ipsec-tools, setkey.
Если рассматривать настройку туннеля с помощью публичного ключа, а не сертификатов, хотя тут разницы никакой, то все сводится к следующему:
Система Ubuntu 14.04 x86_64.
Устанавливаем пакеты racoon и xl2tpd
1. Настраиваем ipsec соединение
/etc/racoon/racoon.confpath pre_shared_key "/etc/racoon/psk.txt";
remote IP_СЕРВЕРА {
my_identifier user_fqdn "user@example.com";
# exchange_mode aggressive,main,aggressive;
exchange_mode main;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
passive off;
generate_policy off;
nat_traversal force;
}
sainfo anonymous address IP_СЕРВЕРА any {
pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
Далее как видно из конфигурационного файла идем править файл с публичным ключём
/etc/racoon/psk.txtIP_СЕРВЕРА ПУБЛИЧНЫЙ_КЛЮЧ
И последний конфиг файл политики шифрования:
/etc/ipsec-tools.conf#!/usr/sbin/setkey -f
spdadd Локальный_IP IP_СЕРВЕРА any -P out ipsec
esp/transport//require;
spdadd IP_СЕРВЕРА Локальный_IP any -P in ipsec
esp/transport//require;
После чего необходимо перезапустить службы:
# service setkey restart
# service racoon restartЛоги можно посмотреть в
/var/log/syslogЕсли все хорошо, то в логах будет что-то подобное:
Aug 14 15:12:05 jershell-Macmini racoon: INFO: IPsec-SA established: ESP/Transport 192.168.20.39[4500]->IP_СЕРВЕРА[4500] spi=21510777(0x1483a79)
Aug 14 15:12:05 jershell-Macmini racoon: INFO: IPsec-SA established: ESP/Transport 192.168.20.39[4500]->IP_СЕРВЕРА[4500] spi=1959044158(0x74c4a43e)
Но одно важное замечание, соединение не будет устанавливаться, если не обратиться к IP_СЕРВЕРА, например его можно пингануть или попытаться подключиться по ssh. Или явно написать racoonctl vpn-connect IP_СЕРВЕРА_ИЗ_racoon.conf
Состояние туннеля можно посмотреть так:
racoonctl show-sa esp
Вот и все, с ipsec вроде как закончили. Далее необходимо поверх нашего ipsec туннеля поднять l2tp соединение. Поскольку в политике шифрования мы указали как нам шифровать и передавать ip пакеты(/etc/ipsec-tools.conf), то тут получается самое обычное l2tp соединение. То есть в конфиг файле написано что шифровать все пакеты от локального хоста до хоста с l2tp соединением. Вот собственно и все.
Я сравнил логи с l2tp/ipsec сервера при подключении window 7, android и настроенного racoon клиента, все идентично, что должно внушать веру, в то, что к большинству L2tp/ipsec серверов можно будет подключиться через этот плагин. Даже если просто установить ipsec-tools, настроить ipsec и затем поднять l2tp с помощью плагина.
А теперь самое главное к чему я все это1. Как помочь автору плагина внедрить все это в текущий плагин?
2. Я вижу вы выложили исходники, если я соберу из исходников плагин, будет ли он работать без openswan? На сколько я понимаю, openswan сейчас выступает в качестве зависимости?
Используемые материалы: