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:20 (UTC)no subject
Date: 2013-07-13 16:24 (UTC)no subject
Date: 2013-07-13 16:29 (UTC)no subject
Date: 2013-07-13 16:30 (UTC)no subject
Date: 2013-07-16 16:21 (UTC)Желающим предложено сделать аналогичное для pptp, но там работы больше - нужна сначала команда set pptp hostname
no subject
Date: 2015-08-07 22:59 (UTC)Спасибо!
no subject
Date: 2015-08-10 06:44 (UTC)no subject
Date: 2015-08-10 13:38 (UTC)no subject
Date: 2015-08-11 05:33 (UTC)С Дмитрием при желании можно пообщаться напрямую в IRC на Rusnet, если есть интерес поговорить или даже помочь в разработке - напишу, где его там найти.
no subject
Date: 2015-08-12 05:14 (UTC)no subject
Date: 2015-08-12 09:59 (UTC)Ещё можно подписаться на русскоязычную email-рассылку по адресу majordomo@uafug.org.ua (mailto:majordomo@uafug.org.ua?body=subscribe%20freebsd) - там есть достаточно опытного народа, эксплуатирующего mpd.
Ну и в ЖЖ-коммюнити ru_sysadmins, ru_root, ru_freebsd можно задавать вопросы. И ещё живет межсетевая (FIDO/NNTP) конференция RU.UNIX.BSD, хотя народу там немного.
Лично я все эти места читаю.
no subject
Date: 2015-08-12 10:53 (UTC)