dadv: (chuck)
Choose your future ([personal profile] dadv) wrote2013-07-13 10:51 pm
Entry tags:

mpd5, l2tp и hostname

Допустим, у нас есть центральный офис компании и фиксированное количество удаленных, причем удаленные офисы подключены через Yota-подобных провайдеров: выход в сеть через NAT и с динамического адреса. Нам нужно связать удаленные офисы с центральным VPN-туннелями.

Протокол L2TP отлично подходит для такой задачи, инкапсулируя PPP в UDP-пакеты, которые хорошо проходят через всяческие NAT, и можно было бы спокойно использовать mpd-5.7. Но тут мы сталкиваемся с одним его ограничением, если хотим привязать каждый удаленный офис к отдельному бандлу (локальному туннельному интерфейсу): mpd умеет привязывать клиента к бандлу только по своему и/или клиентскому IP-адресу (ну, и по портам тоже). В данном случае для всех удаленных клиентов у нас один локальный внешний серверный IP, а адреса клиентов мы не знаем. Поэтому штатно привязать каждого клиента к "своему" отдельному бандлу mpd-5.7 в этом случае не может.

К счастью, в протоколе L2TP предусмотрена отправка hostname в первом же пакете, устанавливающим соединение. Соотвествующая команда в конфигурации клиентского mpd это set l2tp hostname "host.domain.net", без неё mpd автоматически подставляет системный hostname.

Пропатчил mpd-5.7, добавив команду вида set l2tp peermask "*.domain.net" - при наличии такой команды в описании бандла в конфигурации серверного mpd он будет проверять переданный клиентом hostname и выбирать бандл, только если hostname подпадает под маску (в дополнение к остальным проверкам). Используются shell-овые маски, проверка функцией fnmatch(). Можно, конечно, писать и полные имена хостов. Если в бандле нет этой команды, он, как и раньше, не проверяет hostname. Команда set l2tp peermask "*" примет любой hostname клиента. Если клиент не прислал hostname, а в бандле есть проверка hostname, то клиент не попадет в этот бандл.

http://www.grosbein.net/freebsd/patches/mpd5/patch-peermask

Update: принято в основное дерево, будет в релизе 5.8. Только команду переименовали в set l2tp pmask, а то конфликтовала с set l2tp peer (в mpd не может быть команды, совпадающей с началом другой команды).


Post a comment in response:

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org