Differences between revisions 6 and 7
Revision 6 as of 2013-12-08 11:08:01
Size: 33925
Editor: ?jeka
Comment:
Revision 7 as of 2013-12-08 11:09:47
Size: 33329
Editor: ?jeka
Comment:
Deletions are marked like this. Additions are marked like this.
Line 172: Line 172:
Упомянутая выше настройка позволит любому L2TP-клиенту соединяться, а также автоматически присваивать IP-адреса, в т.ч. и освобождённые от предыдущих L2TP-клиентов, поскольку L2TP-клиенты после подключения, отключаются после завершения сеанса работы с туннелем. PPP-аутентификация для каждого разрешённого пользователя должна быть установлена как задокументировано в ''pppd'', например, ''/etc/ppp/chap-secrets''. Упомянутая выше настройка позволит любому L2TP-клиенту соединяться, а также автоматически присваивать IP-адреса, в т.ч. и освобождённые от предыдущих L2TP-клиентов, поскольку L2TP-клиенты после подключения, отключаются после завершения сеанса работы с туннелем. PPP-аутентификация для каждого разрешённого пользователя должна быть установлена как задокументировано в ''pppd'', например, ''"/etc/ppp/chap-secrets"''.
Line 198: Line 198:
Linux has several IPSec protocol implementations to choose from. OpenL2TP is known to work with at least two of them, namely OpenSWAN and Racoon. An L2TP/IPSec server built using OpenL2TP can support all known L2TP/IPSec clients, including Micorosoft Windows/XP, Apple OSX and of course, OpenL2TP.
Line 204: Line 202:

Although OpenSWAN comes with its own L2TP implementation, it is trivial to use OpenL2TP instead. Two example configurations are given below, the first of which is simplest and suitable for most installations where it is known that at most one L2TP client will connect from the same IP address.

Руководство

Быстрый запуск

Этот раздел представляет собой быструю сводку по общим настройкам OpenL2TP в помощь для новых пользователей.

Возможности OpenL2TP


OpenL2TP - это реализация с открытым исходным кодом L2TP для Linux, распространяющаяся под двойной лицензией. OpenL2TP идеален для использования в любой из следующих окружений среды:

  • как служба VPN — L2TP, для развёртывания как на серверах так и на рабочем месте, предоставляя доступ по VPN вида L2TP для работы из дома.
  • как компонент в коммерческих системах со встроенным Linux, т.н. домашние маршрутизаторы или телекоммуникационные свичи, ориентированные на большие сети.
  • как L2TP-клиент для пользователей, использующих систему в качестве Desktop.

OpenL2TP — это полная реализация RFC2661 — Протокола Туннелирования Второго Уровня, Версия 2 (Layer Two Tunneling Protocol, Version 2 (L2TP)). Главные особенности упомянуты ниже. Нетерпеливые читатели могут просто пропустить этот следующий ниже абзац.

  • Поддержка одновременной работы как в качестве LAC, так и в качестве LNS. Один сервер может работать в качестве LAC для некоторых туннелей, в то же самое время являться и LNS для других туннелей.
  • Поддерживаются как входящие, так и исходящие туннели и сессии.
  • Поддержка неограниченного количества туннелей и сессий на каждый из этих туннелей. Максимальное количество туннелей и сессий ограничено только системными ресурсами - доступной системной памятью (максимум 65535 туннелей и 65535 сессий на туннель) или системой, где пользователь самостоятельно задаёт в настройке системы ограничения.
  • Поддерживаются все четыре возможных типа сессий - Входящие/Исходящие вызовы LAC/LNS.
  • Поддерживаются работа множества туннелей между одними и теми же двумя хостами L2TP.
  • Туннель, сессия и параметры PPP могут указываться в профилях с произвольными именами, упрощая интерфейс управления и позволяя определённые значения параметров использовать для определённых входящих туннелей (создаваемых удалённой системой запросом по сети).
  • В состоянии проанализировать и записать все стандартные AVP L2TP, определённые в RFC2661. Анализ проверяет, что все необходимые AVP присутствуют в каждом сообщении, и генерирует сообщение об ошибке в журнала сообщений, если замечены неожиданные (нестандартные) AVP.
  • Управляющие сообщения обрабатываются демоном в пространстве пользователя, openl2tpd. Все пакеты данных L2TP обрабатываются ядром.
  • Запись сообщений трассировки, используя syslog, по вашему выбору можно включать/отключать на уровне системы, туннеля и сессии. Таким образом, для отладки и разрешения различных проблем на боевой системе, трассировка может быть безопасно включена только для указанных объектов, без флуда системы сообщениями от других, не интересующих вас объектов.
  • Интерфейс управления использует RPC Sun, делая OpenL2TP, особенно подходящим программным обеспечением для встроенных сред окружения, таких как телекоммуникационные системы.
  • OpenL2TP связывается с приложением, имеющим интуитивное управление из командной строки, использующее завершение синтаксиса при помощи клавиши TAB, историю команд (клавиши со стрелками вверх/вниз) и контекстно-зависимую справку (интерактивную справочную систему команд).
  • Используется архитектура плагинов для лёгкого расширения функциональных возможностей или интеграции OpenL2TP с другим программным обеспечением третьих лиц, например, PPP, RADIUS, B-RAS и т.д. Имеется плагин для взаимодействия с pppd, другие реализации PPP могут воспользоваться при желании плагином.
  • Поддержка автоматического присвоение IP-адреса из пулов локальных адресов, если другие механизмы распределения адресов (например, RADIUS) не настроены. Используйте ippoold.
  • Локально создаваемые туннели могут по выбору назначаться постоянными, то есть можно принудительно заставить их попытаться пересоздавать туннель при потенциальном разрыве туннеля в случае сбоя по различным причинам. Любые локально создаваемые сессии в постоянных туннелях также автоматически восстанавливаются если/когда туннель непосредственно переподключился. Это бывает очень полезно, если openl2tpd используется в качестве L2TP-клиента.
  • Совместимость от разработчика OpenL2TP с Cisco IOS 12.2, Microsoft, W2K/XP, Apple OSX, Draytek и другими.

Драйвер PPP-over-L2TP ядра Linux, pppol2tp, был разработан в проекте OpenL2TP. Он был интегрирован в официальное ядро версии 2.6.23. Некоторые дистрибутивы Linux теперь поставляются с этим драйвером. Для более ранних версий ядер должен быть установлен пакет pppol2tp-kmod. Бинарники, в виде пакетов RPM, доступны для некоторых ядер, или драйвер может быть собран из исходника. Имейте в виду, что OpenL2TP версии 1.0 совместим только с pppol2tp-kmod-0.17.

Клиент L2TP


После запуска, сервер OpenL2TP, openl2tpd, считывает настройки из файла /etc/openl2tpd.conf по-умолчанию, или из файла, указанного дополнительным параметром-ключём -c из командной строки. Следующий файл настроек, в качестве примера, создаст туннель L2TP для хоста 42.1.1.1, вход под пользователем bert, с паролем ernie. Заметьте, что используется две абсолютно различных команды для создания VPN — сначала создаётся L2TP-туннель, и затем внутри этого L2TP-туннеля создаётся сессия.

/etc/openl2tpd.conf:

ppp profile modify profile_name=default \
        auth_eap=no auth_mschapv1=no auth_mschapv2=no

tunnel create tunnel_name=katalix dest_ipaddr=42.1.1.1 \
        persist=yes

session create tunnel_name=katalix \
        session_name=katalix \
        user_name=bert \
        user_password=ernie

Использование persist=yes, в упомянутой выше конфигурации, сообщает программе OpenL2TP повторять установку туннеля с отключённым L2TP-сервером (LNS на принимающей другой стороне). OpenL2TP периодически будет отправлять запросы на установку туннеля до тех пор, пока туннель не будет создан, а также попытается пересоздать туннель в случае, если позже вновь созданный туннель разорвётся.

Так как OpenL2TP по-умолчанию работает и как L2TP-клиент и как L2TP-сервер, то некоторым пользователям VPN может пригодится отключение ненужных лишних функциональных возможностей сервера. Для того, чтобы это сделать, включите следующую команду в упомянутый выше файл конфигурации:

system modify deny_remote_tunnel_creates=yes

Утилита командной строки l2tpconfig используется для того, чтобы в интерактивном режиме просмотреть или изменить настройки и состояние OpenL2TP. Утилита интуитивно проста и понятна - команды вводятся вручную и легко редактируются, а также имеется автоматическая подстановка команд клавишей Tab. Далее показан пример сессии — как отобразить информацию о состоянии L2TP-туннеля, созданного выше.

[bert@ernie.net]# l2tpconfig
l2tp> system show status
L2TP service status:-
  tunnels: 1, sessions: 1

l2tp> user list
   TunId  SesId  User                                              Create Time
   17767   9158  bert                                 Mon Feb  4 13:45:10 2008

l2tp> session show tunnel_id=17767 session_id=9158
Session 9158 on tunnel 17767:-
  type: LAC Incoming Call, state: ESTABLISHED
  created at:  Feb  4 16:22:18 2008
  created by admin: YES, peer session id: 17432
  ppp user name: bert
  ppp interface name: ppp0
  data sequencing required: OFF
  use data sequence numbers: OFF
  trace flags: NONE
  framing types: SYNC ASYNC
  bearer types: DIGITAL ANALOG
  connect speed: 1000000
  use ppp proxy: NO

  Peer configuration data:-
    data sequencing required: OFF
    framing types: SYNC
    bearer types: ANALOG
    connect speed: 54000000
  data rx packets: 593, rx bytes: 608676, rx errors: 1
  data tx packets: 135, tx bytes: 40145, tx errors: 0

Если Вам требуется безопасное VPN-соединение, то в таком случае Ваш L2TP-туннель можно защитить при помощи IPSec. Эта дополнительная надстройка для L2TP поддерживается в различных коммерческих программных продуктах, таких как Windows XP. За подробной информацией о создании VPN-соединений при помощи L2TP/IPSec - обратитесь к разделу IPSec, который расположен далее в руководстве.

Сервер L2TP


Читатели, которые не планируют использовать OpenL2TP в качестве сервера для удалённых других L2TP-клиентов, могут спокойно пропустить этот подраздел руководства.

Большинство усилий, требующихся для того, чтобы установить OpenL2TP как сервер L2TP, требуется приложить только к установке пользовательской авторизации и к присвоению IP-адреса. В том случае, когда используется RADIUS-сервер как для пользовательской аутентификации, так и для присвоения IP-адреса, то необходимая настройка самого OpenL2TP минимальна. Параметры, доступные для пользовательской аутентификации и присвоения IP-адреса, описаны ниже.

Присвоение IP-адреса


Почти все L2TP-клиенты ожидают того факта, что IP-адреса PPP-сеанса будут присвоены L2TP-сервером. Поэтому, при настройке L2TP-сервера OpenL2TP, механизм для присвоения IP-адресов должен быть обязательно настроен и установлен. Существует всего три различных схемы присвоения IP-адресов L2TP-клиентам:

  1. Фиксированные IP-адреса, предварительно настроенные для каждого L2TP-клиента, который подключится к L2TP-серверу.
  2. Динамические IP-адреса, полученные из пула IP-адресов.
  3. Динамические IP-адреса, полученные через поиск в RADIUS-сервере.

Для предварительного тестирования L2TP-сервера, или в случае когда известны IP-адреса L2TP-клиентов, фиксированные IP-адреса могут быть настроены в OpenL2TP для каждого L2TP-клиента. Для того, чтобы это сделать, через клиент L2TP (peer) создаётся профиль соединения, который вызывает уникальный ppp-профиль, который в свою очередь поочерёдно задаёт IP-адреса, которые будут использоваться. OpenL2TP наследует параметры настройки от предварительно настроенных профилей. Если вам требуется задать определённые параметры, которые будут установлены для определённых соединений, то укажите настройки в туннеле, сессии или ppp-профилях, и ссылайтесь на эти профили в профилях соединений.

Когда получен запрос установки L2TP-тоннеля, OpenL2TP попытается найти профиль соединения, который соответствует IP-адресу отправителя (L2TP-клиента) (или L2TP имени, если предоставляется). Если было ничего не найдено, то тогда используется профиль соединения по-умолчанию. Каждый профиль соединения указывает на уникальный ppp-профиль. Это показано в следующем примере, где двум peer — 80.70.60.50 и 42.1.2.3 присвоены IP-адреса — 10.5.1.2 и 10.5.1.4 соответственно, когда они подсоединяются.

/etc/openl2tpd.conf:

ppp profile create profile_name=peer1 \
        local_ipaddr=10.5.1.1 \
        remote_ipaddr=10.5.1.2

ppp profile create profile_name=peer2 \
        local_ipaddr=10.5.1.3 \
        remote_ipaddr=10.5.1.4 

peer profile create profile_name=peer1 \
        peer_ipaddr=80.70.60.50 \
        ppp_profile_name=peer1

peer profile create profile_name=peer2 \
        peer_ipaddr=42.1.2.3 \
        ppp_profile_name=peer2

ippoold


Но использовать отдельный ppp-профиль очень утомительно в случае когда имеется много L2TP-клиентов. Также невозможно использовать отдельные ppp-профили, когда IP-адрес или имя хоста L2TP-клиента неизвестны. Для того, чтобы разрешить эту ситуацию, OpenL2TP поддерживает использование ippoold, который является полностью отдельной службой, предоставляющей пулы IP-адресов. Сервер ippool доступен для скачивания со странички загрузки проекта OpenL2TP.

Настройка ippoold предельно проста. Пулы IP-адресов могут быть созданы в интерактивном режиме, используя утилиту ippoolconfig. Или, в другом случае, создание пулов IP-адресов может быть указано в файле настроек. Следующий пример показывает простую настройку с одним единственным пулом IP-адресов, содержащим 100 IP-адресов.

/etc/ippool.conf:

pool create pool_name=default first_addr=10.5.1.1 num_addrs=100

Настройка OpenL2TP проста в том случае, когда все PPP-клиенты должны использовать один и тот же пул IP-адресов. Следующая настройка - это всё, что потребуется, не более

/etc/openl2tpd.conf:

ppp profile modify profile_name=default \
        ip_pool_name=default

Упомянутая выше настройка позволит любому L2TP-клиенту соединяться, а также автоматически присваивать IP-адреса, в т.ч. и освобождённые от предыдущих L2TP-клиентов, поскольку L2TP-клиенты после подключения, отключаются после завершения сеанса работы с туннелем. PPP-аутентификация для каждого разрешённого пользователя должна быть установлена как задокументировано в pppd, например, "/etc/ppp/chap-secrets".

RADIUS


Для использования VPN по типу L2TP в корпоративной и провайдерской среде для обеспечения аутентификация пользователя, для учёта использования VPN и для установки параметров для каждого отдельного абонента обычно используется сервер RADIUS. Для того, чтобы использовать сервер RADIUS, доступ у pppd должен быть настроен к каждому RADIUS-серверу (за более подробной информацией обратитесь к документации pppd) и ppp-профиль в OpenL2TP должен отображать факт использования RADIUS-сервера.

Файлом с настройками RADIUS-клиента от pppd обычно является "/etc/radiusclient/radiusclient.conf". Самый простой вариант использования RADIUS-клиента - он просто делает запрос на IP-адрес и отправляет на этот IP-адрес информацию об аутентификации (процедура выполняется для каждого RADIUS-сервера, указанного в RADIUS-клиенте). За более подробной информацией обратитесь к "man pppd-radius". Уже на стороне собственно самого RADIUS-сервера, в настройках, указывается имя пользователя (ppp-username) и пароль (ppp-password) для каждого разрешенного пользователя на вход (login) через "pppd". Сервер RADIUS обычно раздаёт IP-адреса сразу после успешной аутентификации пользователей на "pppd" и в этом случае "ippoold" не требуется.

Для того, чтобы связать OpenL2TP с сервером RADIUS, просто укажите использование сервера RADIUS в ppp-профиле (параметр "use_radius=yes"). Файл с настройками "radiusclient.conf" указывается при помощи дополнительного параметра "radius_hint=/etc/radiusclient/my_radiusclient.conf", позволяя гибко указывать различные серверы RADIUS, которые будут использоваться для аутентификации различных L2TP-клиентов, распределив VPN-клиентам различные ppp-профили. В том случае, если значение "radius_hint" не указано, то используется файл с настройками radiusclient по-умолчанию ("/etc/radiusclient/radiusclient.conf", то есть управление этим параметром передаётся на radiusclient).

/etc/openl2tpd.conf:

ppp profile modify profile_name=default \
        use_radius=yes \
        radius_hint=/etc/radiusclient/my_radiusclient.conf

В том случае, если сервер RADIUS не назначает IP-адреса, то можно воспользоваться "ippoold", таким образом совместно используя RADIUS только для аутентификации пользователей и "ippoold" для выдачи IP-адресов. Для того, чтобы включить выдачу IP-адресов при помощи "ippoold", установите параметр "ip_pool_name=xxx" в ppp-профиль.

IPSec


Так как OpenL2TP реализован с использованием стандартных компонент Linux, т.н. UDP-сокеты, ядро linux и pppd, то OpenL2TP плавно интегрируется с различными другими компонентами, такими как IPSec.

Linux имеет на выбор несколько различных реализаций протокола IPSec. OpenL2TP работает по крайней мере с двумя из них, а именно - это OpenSWAN и Racoon. Работающий сервер L2TP/IPSec на основе OpenL2TP поддерживает совместимость со всеми известными L2TP/IPSec клиентами, в т.ч. Microsoft Windows 7/Vista/XP, Apple OSX и, конечно, xl2tpd с OpenL2TP.

OpenSWAN


И хотя OpenSWAN уже содержит в себе отдельную собственную реализацию L2TP, она слишком ограничена в возможностях для использования её вместо OpenL2TP. Два примера настройки OpenL2TP и OpenSWAN приводятся ниже, первый пример - самый простой и подходит для большинства случаев, когда известно и приемлемо, что не более одного L2TP-клиента подключаются с одного и того же IP-адреса.

Простая настройка сервера, с фиксированными значениями портов


/etc/openl2tp.conf:

tunnel profile modify profile_name=default \
        our_udp_port=1701

ppp profile modify profile_name=default \
        ip_pool_name=default

Настройки выше сообщают OpenL2TP использовать фиксированный UDP-порт для всех туннелей (что ограничит 1 туннель на 1 пира). Использование фиксированного порта упрощает настройку OpenSWAN IPSec.

Файл с настройкой OpenSWAN показан ниже.

/etc/ipsec.d/my-client.conf

conn my-client
        authby=secret
        pfs=no
        rekey=no
        type=transport
        left=1.2.3.4
        leftprotoport=17/1701
        right=42.1.1.1
        rightprotoport=17/1701
        auto=add

В приведенном выше примере настраивается подключение для аутентификации туннеля от клиента (с IP-адреса 42.1.1.1) на IP-адрес сервера "1.2.3.4", используя Pre-Shared Key (PSK). Под PSK понимается общий пароль (ключ), который должен быть указан заранее (Pre-Shared) как на клиенте, так и на сервере. PSK указывается в файле с расширением "*.secret" в каталоге /etc/ipsec.d/. Соответствующая настройка PSK ключа показана ниже.

/etc/ipsec.d/my-client.secret

42.1.1.1 1.2.3.4 : PSK "client_and_server_password"

Использование PSK часто является самым простым способом и наиболее быстрым для проверки работы L2TP с IPSec, но этот способ является также наименее безопасным, по сравнению с другими способами аутентификации IPSec, например, при помощи сертификатов RSA. За более подробной информацией как настроить другие способы и их параметры аутентификации в IPSec обратитесь к документации OpenSWAN.

Как и во всех остальных случаях, в OpenSWAN, при внесении изменений в файлы настроек, OpenSWAN должен быть перезапущен для вступления в силу новых параметров настройки, которые будут загружены. Пожалуйста, обратите внимание, что синтаксис файла настроек OpenSWAN чувствителен к отступам (1 символ табуляции или 4 символа пробела).

В приведенном выше примере IP-адрес сервера - "42.1.1.1" и IP-адрес клиента - "1.2.3.4". Порт "1701" является номером порта UDP, по стандарту выданным специально для протокола L2TP.

Когда требуется создание нескольких туннелей между отдельными парами пиров, то всё немного сложнее, так как уже невозможно будет использовать фиксированный номер UDP-порта 1701. И удаляется параметр профиля туннеля "Our_udp_port = 1701". Теперь OpenL2TP будет использовать временные порты для каждого туннеля.

Временные порты назначаются стеком локального IP-адреса в процессе установки соединения и создания туннеля. Когда клиент и сервер используют динамически назначаемые порты, то используются локально назначенные порты источника и назначения. Номера таких временных портов не могут быть определены заранее, что вызывает проблемы в настройке OpenSWAN, потому что уже не получится указывать фиксированный порт 1701.

К счастью, OpenSWAN поддерживает синтаксис "%any", который может использоваться в качестве шаблона. Но тем не менее, необходимо проявлять осторожность, так как нет возможности узнать значение "%any" для портов как для "left", так и для "right" пиров. Это будет соответствовать каждому UDP-пакету! Это приведет к тому весь UDP-трафик между указанными нами пирами будет передаваться в IPSec, а большая часть UDP-трафика будет не та, которая требуется для установки соединения L2TP-подключений.

Но так порт сервера (1701) входит в правила стандарта (порт 1701 всегда используется для первоначального запроса на установку соединения и создание туннеля), то можно включить IPSec-функцию отслеживания по номеру порта (для OpenL2TP), и получим IPSec-правила - динамически добавляемые/удаляемые программой OpenL2TP во процессе установки соединения и создания туннеля и после того как туннель будет закрыт.

Сложная настройка сервера, с поддержкой множества пар туннелей на IP-адрес


/etc/openl2tp.conf:

ppp profile modify profile_name=default \
        ip_pool_name=default

В такой настройке будут использоваться временные UDP-порты, поэтому в настройке OpenSWAN необходимо внести следующие изменения:

/etc/ipsec.d/my-clients.conf:

conn my-clients
        authby=secret
        pfs=no
        rekey=no
        type=transport
        left=42.1.1.1
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any
        auto=add

Но, тем не менее, в связи с ошибкой в OpenSWAN версий "2.4.7" и "2.4.9", он может поддерживать только один туннель между каждой парой IP-адресов клиент/сервер. Проблема будет отображаться в виде следующей ошибки в лог-файлах системы (/var/log/messages). В следующих версиях OpenSWAN эта проблема, вероятно, будет уже решена.

ASSERTION FAILED at kernel.c:2237: c->kind == CK_PERMANENT || c->kind == CK_INSTANCE

Racoon