Опрос

Какая направленность контента сайта была бы вам наиболее интересна

Проводные сети
Беспроводные сети
Сетевое ПО
Общие аспекты сетей
Архив записей
Облако тегов
 

Сетевое ПО: Туннелинг в *nix. L2TP

Автор: eugene210682 | 15-10-2009, 09:53 Просмотров: 2044

Протокол L2TP (Layer 2 Tunneling Protocol) - протокол туннелирования второго уровня создан на основе PPTP и проприетарного протокола L2F, разработанного Cisco.

Принцип действия L2TP

В отличие от PPTP, в L2TP не используется выделенный канал управления. Все управляющие сообщения посылаются через туннель. Проблема PPTP и иже с ними, связанная с переходом через NAT, ввиду отсутствия в GRE портов, решена в L2TP инкапсулированием туннелируемых данных в UDP (порт 1701). В результате, пользовательские данные снабжаются рядом заголовков и концевиков и итоговый IP-пакет имеет вид:

Туннелинг в *nix. L2TP

Заголовок L2TP имеет формат, показанный на рисунке ниже. В зависимости от типа полезной нагрузки (пользовательские данные, управляющие сообщения), заголовок может видоизменяться - могут исключаться некоторые опциональные поля либо добавляться (в случае управляющих сообщений) дополнительные поля (AVP).

Туннелинг в *nix. L2TP

Флаг T (type) принимает значение "1", если передается управляющее сообщение и значение "0", если передаются пользовательские данные; флаг L указывает на наличие (значение "1") или отсутствие (значение "0") в заголовке поля длины (length), которое обязательно для управляющих сообщений; флаг S определяет наличие в заголовке опциональных полей Ns и Nr (sequence numbers), которые обязательны для управляющих сообщений; с помощью флага O определяется присутствие в заголовке поля смещения (offset), для управляющих сообщений этот бит всегда должен быть сброшен в ноль; флаг P сигнализирует о необходимости обработки данного пакета с наивысшим приоритетом, типовое применение - в сообщениях keep alive, что помогает избежать случайных разрывов соединения из-за флуктуаций времени передачи пакетов по сети, бит P должен быть сброшен для управляющих сообщений.

Поле "версия" всегда должно содержать значение "2" для L2TP, значение "1" зарезервировано для обратной совместимости с L2F. Поле "длина" определяет длину в байтах пакета с заголовком. Независимо от присутствия этого поля в заголовке, максимальная длина пакета будет ограничена сверху порогом протокола IP в 65535 байт, минус длина внешних заголовков IP и UDP.

Поля "идентификатор туннеля" и "идентификатор сессии" используются для определения принадлежности передаваемого пакета соответствующему туннелю и сессии. Эти значения уникальны для каждого узла, причем передающая сторона должна помещать в соответствующее поле идентификатор принимающей стороны, а не свой собственный.

Поля Ns и Nr имеют назначение, аналогичное полям sequence number и aknowledgement number. В поле Ns содержится порядковый номер фрагмента передаваемых данных, а в поле Nr - ожидаемый номер следующего фрагмента принимаемых данных. Таким образом обеспечивается поочередная доставка с подтверждением получения. Поле Nr может присутствовать только в контрольных сообщениях, если данное поле встречается в заголовке пакета с пользовательскими данными, оно должно быть проигнорировано приемником.

Поле "величина смещения" указывает на смещение начала поля данных относительно начала заголовка. Поле "заполнитель" предназначено для дополнения заголовка до целого числа 32-битных слов. Два последних поля никогда не используются в заголовках управляющих сообщений.

В случае контрольных сообщений, заголовок может дополняться так называемыми AVP (Attrubute Value Pair - пара трибут-значение), которые следуют непосредственно за заголовком. Общий формат AVP:

Туннелинг в *nix. L2TP

Флаг M определяет AVP, обязательный (mandatory) для обработки. Если принятый AVP с установленным флагом M не может быть корректно обработан, то должна быть разорвана сессия, с которой ассоциировано данное сообщение или, если данное сообщение ассоциировано с тунелем, то тунель со всеми сессиями. Флаг H указывает на то, что данный AVP является скрытым (hidden), т.е. зашифрованным. В поле "длина" указывается суммарная длина AVP в байтах. Поле "ID производителя" может быть использовано на усмотрение пользователя, но обычно содержит идентификатор, выдаваемый IETF и используемый при определении специфичных AVP. Тип атрибута содержит указатель на тип данного AVP.

Упомянутое выше шифрованные AVP используется для защищенной передачи секретных данных. Шифрование осуществляется с помощью логической операции исключающего или данных и ключа, представляющего собой MD5-хэш предварительно согласованного обоими сторонами пароля, случайного вектора и типа атрибута. При этом данные, подлежащие шифрованию (один или несколько AVP) могут дополняться случайным заполнителем, чтобы скрыть изначальную длину данных, а на приемной стороне заполнитель отбрасывается на основании поля, содержащего длину изначального сообщения.

Схема туннелирования аналогична используемой в PPTP:

Туннелинг в *nix. L2TP

Здесь LAC - (L2TP Access Concentrator - концентратор доступа L2TP) обеспечивает PPPoE-соединение с клиентом; LNS - (L2TP Network Server - сетевой сервер L2TP) обеспечивает доступ к ресурсам локальной сети. Аналогично PPTP, верхний туннель иллюстрирует mandatory mode, нижний - voluntary mode. В отличие от PPTP, отсутствует выделенный канал управления (как уже упоминалось выше).

Процедуры установления управляющего соединения, входящего и исходящего звонка (пользовательские данные) и представляют собой трехсторонний хендшейк с использованием аналогичных применяемым в PPTP управляющих сообщений. При этом каждому управляющему сообщению соответствует набор обязательных и опциональных AVP, содержащих необходимые данные, обязательным для всех управляющих сообщений является AVP "тип сообщения", исключение - сообщение с нулевым содержимым, используемое в качестве акноледжментов. Полный перечень AVP, описание их формата и назначения можно просмотреть в RFC2661.

L2TP сервер на MPD5 во FreeBSD7.1

Исходные данные - поверх реальной сети 192.168.0.0/24 требуется установить туннель с логическими адресами из диапазона 172.16.0.0/24. В качестве LNS использован хост под управлением FreeBSD 7.1 (fbsd - 192.168.0.2), в качестве LAC в voluntary mode, хост под управлением Windows XP SP2 со встроенным клиентом (win - 192.168.0.1).

Начать можно с установки на fbsd mpd5 из портов:

cd /usr/ports/net/mpd5 && make install clean

или пакетов
pkg_add -r mpd5

После чего можно создать файл с логинами и паролями (в качестве примера - логин "l2tpclient", пароль "secret"):
touch /usr/local/etc/mpd5/mpd.secret
echo "l2tpclient secret" >> /usr/local/etc/mpd5/mpd.secret
chown root:wheel /usr/local/etc/mpd5/mpd.secret
chmod 700 /usr/local/ etc/mpd5/mpd.secret

и файл конфигурации usr/local/etc/mpd5/mpd.conf примерно следующего содержания
startup:
        log bund
        log frame
        log iface
        log ipcp
        log lcp
        log link
        log phys
default:
        load lns
lns:
        set ippool add pool1 172.16.0.50 172.16.0.60
        create bundle template B
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp ranges 172.16.0.1/32 ippool pool1
        create link template L l2tp
        set link action bundle B
        set link enable multilink
        set link yes pap chap
        set link mtu 1460
        set l2tp self 192.168.0.2
        set link enable incoming

Разумеется, приведеный файл конфигурации содержит лишь строки, включающие минимально необходимый функционал.
После этого необходимо добавить в rc.conf соответствующую строку:
echo "mpd_enable="YES"" >> /etc/rc.conf

Запуск/остановка/рестарт демона mpd5 осуществляется с помощью опций start/stop/restart скриптом /usr/local/etc/rc.d/mpd5, т.е. для запуска:
/usr/local/etc/rc.d/mpd5 start

Настройка встроенного в win L2TP-клиента происходит следующим образом:
В разделе панели управления "Сетевые подключения" нужно выбрать "Создание нового подключения"
Туннелинг в *nix. L2TP
Туннелинг в *nix. L2TP
В окне мастера новых подключений выбрать "Подключить к сети на рабочем месте" - "Подключение к виртуальной частной сети"
Туннелинг в *nix. L2TP
Туннелинг в *nix. L2TP
В соответствующих полях ввести произвольное имя подключения и адрес сервера 192.168.0.2
В меню "Свойства" вновь созданного подключения на вкладке "Безопасность" снять флаг "Требуется шифрование...", на вкладке "Сеть" выбрать L2TP IPSec VPN
Туннелинг в *nix. L2TP
Туннелинг в *nix. L2TP
Поскольку протокол L2TP не предусматривает шифрования каким-либо встроенным протоколом, обычно он используется в связке с протоколом шифрования IPSec. Поскольку в данной статье L2TP рассматривается в контексте протоколов туннелирования, на стороне LNS шифрование с помощью IPSec не было включено, однако оно требуется встроенным клиентом на стороне LAC. Чтобы отменить это требование, в системном реестре win нужно добавить с помощью редактора реестра ("Пуск" - "Выполнить" - regedit) ключ ProhibitIpSec (тип DWORD) в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters\ со значением "1". После перезагрузки системы изменения должны вступить в силу, проконтролировать это можно с помощью списка активных служб ("Пуск" - "Выполнить" - services.msc).

После этого можно, используя ранее определенные логин и пароль, установить соединение и пронаблюдать за процессом его установления путем захвата целевых пакетов на соответствующем сетевом интерфейсе fbsd командой tcpdump -i em0 proto l2tp.

Заключение

В цикле статей посвященных туннелированию эта завершающая. Основным достоинством описанного выше протокола L2TP можно назвать то, что он позволяет осуществлять соединение через NAT, благодаря инкапсуляции кадров L2TP в UDP (порт 1701). Универсальность и гибкость L2TP в сочетании с протоколом шифрования IPSec позволяет организовывать VPN с высокой степенью защиты передаваемых данных, как для доступа к ресурсам защищенной локальной сети по незащищенным каналам, так и между защищенными локальными сетями.

Ключевые теги: FreeBSD, Linux, unix-like, tunneling, VPN
Уважаемый посетитель, вы вошли на сайт как незарегистрированный пользователь. Чтобы получить полный доступ к материалам сайта, рекомендуем вам зарегистрироваться либо войти под своим именем.

Комментарии: (0)    Распечатать

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.

Регистрация/Вход
Логин:
Пароль:

регистрация / восстановление
 

На главную / Регистрация / Статьи / Книги / Форум / О ресурсе / Обратная связь

 

Доменное имя зарегистрировано с помощью co.cc; хостинг предоставлен byethost.com; при построении сайта использованы скрипты DataLife Engine nulled. При копировании материалов, размещенных на сайте, просьба указывать ссылку на первоисточник. По всем вопросам, связанным с работой сайта, обращаться через форму обратной связи, либо по электронной почте: supervisor@redteapot.co.cc.