mpd5, l2tp и hostname
2013-07-13 22:51![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Допустим, у нас есть центральный офис компании и фиксированное количество удаленных, причем удаленные офисы подключены через 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 не может быть команды, совпадающей с началом другой команды).
no subject
Date: 2013-07-13 16:30 (UTC)