Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Debian

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

progmike



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Принцип работы L2TP/IPSec в том, что туннельное подключение L2TP устанавливается поверх шифрованного IPSec'ом транспорта.
 
1. Реализация транспорта ipsec:
а) необходима поддержка ipsec в используемом ядре: http://xgu.ru/wiki/IPsec_%D0%B2_Linux (раздел конфигурация ядра) - Debian Stretch (Linux debian 4.3.0-1-686-pae #1 SMP Debian 4.3.3-5 (2016-01-04) i686 GNU/Linux) поддерживает
б) необходим пакет утилит для управления этой поддержкой: ipsec-tools
в) указываем демону setkey, какой трафик должен шифроваться (политика шифрования):
/etc/ipsec-tools.conf

Код:
 
spdadd 0.0.0.0/0[0] 1.2.3.4/32[1701] any -P out ipsec esp/transport//require;
spdadd 1.2.3.4/32[1701] 0.0.0.0/0[0] any -P in ipsec esp/transport//require;
 

 
0.0.0.0/0[0] - адрес, маска и порт клиента. Т.к. я расчитываю систему на удалённого пользователя, я не знаю заранее его локального адреса, кроме того, клиент может оказаться за маршрутизатором (nat). По-этому используем маску "все адреса, все порты"
1.2.3.4/32[1701] - адрес сервера впн (в моем случае белый статический адрес железяки DFL-860e)
any - любой протокол
-P {out,in}  -  направление трафика
ipsec - ключевой момент, который указывает использовать ipsec
esp/transport//require - тип использования ipsec, т.е. транспортный режим
 
Первая трока - направление от клиента до сервера
Вторая строка - наоборот
 
В результате, все пакеты, отправляемые клиентом к серверу на порт 1701 будут шифроваться
Аналогично, все пакеты, которые будут приходить от сервера с порта 1701 будут расшифровываться
 
г) нужны ключи шифрования.
определение ключей шифрования в ipsec - это Security Associations (SA). Они устанавливаются для каждого конкретного узла/направления и включают в себя метод шифрования, метод проверки целостности, метод авторизации и, важно!, время жизни (измеряется в секундах или в объеме трафика)
Именно из-за ограниченного времени жизни SA необходим демон, который будет следить за своевременным обновлением SA.
 
Это racoon, который так же входит в пакет ipsec-tools.
/etc/racoon/racoon.conf:

Код:
 
remote anonymous
{
    exchange_mode main,base;
    lifetime time 8 hour;
    nat_traversal on;
    proposal {
        encryption_algorithm aes;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group modp1024 ;
    }
}
 
sainfo anonymous
{
    pfs_group modp1024;
    lifetime time 1 hour;
    encryption_algorithm aes;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate ;
}
 

 
Это мой пример, он зависит от настроек сервера (железяки DFL-860e)
В общих чертах так -
Авторизация (блок remote): каждые 8 часов смена ключа, разрешён NAT (имеется ввиду - на стороне клиента), и набор параметров защиты: шифрование aes, проверка целостности sha1, авторизация по фразе PSK (Pre-Shared Key)
Траффик (блок sainfo): смена ключа каждый час, шифрование aes, проверка целостности sha1, разрешено программное сжатие траффика
Кодовое слово anonymous означает, что указанные блоки могут применяться для шифрования любого направления, указанного в политиках (см. выше). Для полноты настроек можно указывать конкретный адрес сервера в виде ip адреса или dns
 
/etc/racoon/psk.txt

Код:
 
1.2.3.4 IPSEC_PSK_WORDS
 

 
тут просто - две колонки, разделенный пробелом/табом
адрес сервера, фраза PSK
 
финал настроки - рестарт демонов:

Код:
 
$service setkey restart
$service racoon restart
 

 
Проверка работоспособности транспорта:
- в syslog нет ошибок
- должены установиться SA (как минимум - пара: на вход и на выход)
$setkey -D

Код:
 
192.168.10.100[4500] 1.2.3.4[4500]  
    esp-udp mode=transport spi=384298781(0x16e7ef1d) reqid=0(0x00000000)
    E: aes-cbc  1a3b946f c9040a48 622fa951 03b42481
    A: hmac-sha1  381fb856 e60ae96e 2076d9a9 b4d4c45b c23a1cda
    seq=0x00000000 replay=4 flags=0x00000000 state=mature  
    created: Jan 26 23:08:05 2016    current: Jan 26 23:08:18 2016
    diff: 13(s)    hard: 3600(s)    soft: 2880(s)
    last: Jan 26 23:08:06 2016    hard: 0(s)    soft: 0(s)
    current: 769(bytes)    hard: 0(bytes)    soft: 0(bytes)
    allocated: 15    hard: 0    soft: 0
    sadb_seq=1 pid=3403 refcnt=0
1.2.3.4[4500] 192.168.10.100[4500]  
    esp-udp mode=transport spi=85552711(0x05196e47) reqid=0(0x00000000)
    E: aes-cbc  cb0c689d be1ba18b 6bb227a3 34b85899
    A: hmac-sha1  9eaf7c0d dc5ff54f 8e09959f 4f131a3c fa2440bb
    seq=0x00000000 replay=4 flags=0x00000000 state=mature  
    created: Jan 26 23:08:05 2016    current: Jan 26 23:08:18 2016
    diff: 13(s)    hard: 3600(s)    soft: 2880(s)
    last: Jan 26 23:08:06 2016    hard: 0(s)    soft: 0(s)
    current: 821(bytes)    hard: 0(bytes)    soft: 0(bytes)
    allocated: 16    hard: 0    soft: 0
    sadb_seq=0 pid=3403 refcnt=0
 

- на сервере аналогичная пара SA
 
Важно понимать, что транспортное шифрование ipsec начинает работать тогда, когда хотя бы один пакет в указанном направление пролетел.
Если ни один процесс не отправит ни одного пакета от клиента до сервера на порт 1701 - SA устанавливаться не будут.
 
В качестве проверки я делал так:
В политиках (пункт "в") изменил в адресе сервера номер порта на 0, т.е.  1.2.3.4/32[0] - любой порт
и послал пинг серверу с клиента. В таком случае SA будут установлены с первым пакетом пинга.
(ответит сервер на пинг или нет - не важно. главное - пакет направился к серверу, и шифрование будет настроено ядром!)
 
2. L2TP туннель
 
Тут наглядных вариантов действительно очень мало...
NetworkManager-l2tp - классный вариант, но готового пакета deb нет в системе или других источниках (или не нашёл)
Все те пакеты, которые удалось найти - зависят от старого pppd 2.4.5 (которого уже нет в Stretch) или от OpenSwan (которого вообще нет)
 
По-этому, взял плагин из git'а - форк mastervolkov с исправлением зависимости от упраздённого gnome-keyring: https://github.com/mastervolkov/NetworkManager-l2tp
 
Тут все по инструкции...
 
Перед комплияцией необходимо установить пакеты dev, от которых зависит компиляция плагина (по крайней мере мне пришлось установить их на чистой системе):

Код:
 
$apt-get install libtool libglib2-0-dev intltool ppp-dev libgtk-3-dev libnm-util-dev network-manager-dev \
 libnm-glib-vpn-dev libnm-glib-dev libnm-gtk-dev libsecret-1-dev  
 

 

Код:
 
$./autogen.sh
$./configure \
    --prefix=/usr --localstatedir=/etc --sysconfdir=/etc \
    --sharedstatedir=/var/lib --libexecdir=/usr/lib/NetworkManager \
    --infodir=/usr/share/info --mandir=/usr/share/man \
    --with-pppd-plugin-dir=/usr/lib/pppd/2.4.7
$make
$make install
 

 
Хотя, справедливости ради, вместо make install я собрал пакет deb и уже его установил...
 
Дальше все в графике... Network Manager - добавить подключение - L2TP - адрес сервера, имя, пароль, маршруты и т.д.
Главное в том, что в настройках туннеля L2TP параметры ipsec должны быть отключены (по-умолчанию именно так и стоит)
 
Profit
 
PS.
В процессе обнаружил баг NetworkManager'а версии 1.0.10-1 (на данный момент в дистрибутиве Stretch), который приводит к падению сетевых подключений, если в настройках указаны статические маршруты.
Баг обсуждался на https://bugs.archlinux.org/task/47535 и, вроде как, исправлен в версии 1.0.10-2, хотя в Stretch этого еще нет... Ждем-с
 
PPS.
Нашёл ещё один глюк - пока не разобрался...
При завершении соединения (отключение L2TP), процесс pppd продолжает висеть. Хотя интерфейс ppp0 пропадает, таблица маршрутизации восстанавливается, resolv.conf возвращается исходный, сервер подключения не видит - т.е. процесс подвисает
Без сообщений в логах...
Как бы не беда... Но при каждом последующем подключении сетевой интерфейс получает очередное имя (ppp1 ppp2 ppp3 ...)
Ну и по 10Кб памяти сжирают

Всего записей: 245 | Зарегистр. 12-03-2006 | Отправлено: 01:00 27-01-2016 | Исправлено: progmike, 12:11 29-01-2016
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » UNIX » Debian


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru