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 Код: тут просто - две колонки, разделенный пробелом/табом адрес сервера, фраза 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 |
|