FreeBSD: описание демона mpd

mpd переводится как multi-link PPP daemon. Здесь предоставлен краткий перевод документации по mpd версии 3.18, доступной по адресу [1].

[Введение]

MPD - сервис, обслуживающий PPP-соединения, и преобразующие их в сетевой интерфейс (не путать с демоном с таким же названием, но другой расшифровкой - mpd, Music Player Daemon). основан на сетевой библиотеке netgraph. Очень гибкий в настройке, поддерживает много комбинаций драйверов и сетевых протоколов, включая asynchronous serial (модемы), synchronous serial, Frame Relay, PPTP и т. д.

В mpd существует две основных концепции - bundles и links (переводить эти термины не буду для уменьшения путаницы), с этими концепциями связаны layers - уровни управления mpd.

Под link подразумевается физическое соединение типа точка-точка между локальной машиной и удаленной машиной (peer), например соединение по модему. В качестве link выступают физические сетевые интерфейсы (или один интерфейс). Линки конфигурируются на слое link. Ниже слоя link лежит слой device, где конфигурируются специфические для физических устройств параметры.

Под bundle понимается совокупность одного или более links до одного и того же peer, которая формирует одно multi-link PPP соединение с полосой, равной сумме скоростей каждого из links, входящих в bundle. В системе bundle появляется как виртуальный сетевой интерфейс (виден, например, в выводе команды ifconfig может присутствовать виртуальный интерфейс ng0). Это обеспечивает слой interface, отвечающий за конфигурирование интерфейса (например, назначение IP и статических маршрутов). Bundle существует и подключен не зависимо от того, какие линки из входящих в bundle в настоящее время подключены и передают или нет пакеты. На слое bundle конфигурируются установки multi-link PPP, логин и пароль, а также политика управления линками (link management policy). Эта политика определяет, должны ли линки работать постоянно, либо подниматься или опускаться по запросу. Каждому bundle соответствуют также слои compression и encryption.

[Установка]

Во FreeBSD mpd устанавливается из пакета или из порта и автоматически попадает в директорию /usr/local/sbin/mpd. Конфигурационные файлы находятся в папке /usr/local/etc/mpd. Перед запуском mpd необходимо настроить следующие файлы конфигурации:

mpd.conf
Определяет одну или более конфигураций. Когда mpd вызывается из командной строки, указывается имя одной из конфигураций, заданных в mpd.conf. Если конфигурация в командной строке не указана, то загружается первая конфигурация из mpd.conf.

mpd.links
Определяет линки, доступные в системе.

mpd.conf и mpd.links имеют одну и ту же простую структуру. Запись (entry) состоит из метки и последующих строчек команд mpd. Метка всегда должна начинаться с первого символа и заканчиваться двоеточием. Команды начинаются с символа Tab или пробела, и идут сразу за меткой, строка за строкой. Entry (запись) заканчивается, как только встречается пустая строка.

mpd.secret
Содержит пары логин и пароль, по одной строке на логин и пароль. Каждая строка может содержать третий параметр с IP и длиной маски подсети, что используется для идентификации соответствующего peer. Отсюда mpd берет информацию для аутентикации. Этот файл должен быть читаем только для пользователя root. При настройке mpd с Корбиной я этот файл не трогал.

mpd.script
Содержит chat-скрипты для модемов. Мне этот файл тоже не понадобился.

[Запуск mpd]

Запускается mpd так:
mpd [ options ] [ configuration ]

Если указана configuration, то mpd просматривает mpd.conf в поисках соответствующей метки, и запускает встретившиеся по этой метке команды (вплоть до первой встретившейся пустой строки). Если в командной строк не указана configuration, то в mpd.conf ищется конфигурация по метке default. Если конфигурация не найдена, то из mpd.conf не выполняется никаких команд.

Программа mpd может работать либо в интерактивном режиме, либо в фоновом (как демон). В интерактивном режиме mpd может принимать команды, вводимые с консоли. Для того, чтобы обеспечить единственную запущенную копию mpd, используется по умолчанию pid-файл /var/run/mpd.pid - он открывается и блокируется на запись.

При работе в интерактивном режиме (или при подсоединении telnet-сесии, см. опции -a и -c) mpd может выполнять команды пользователя. Эти команды могут использоваться для конфигурирования различных слоев (layers) конфигурации или для получения информации по состоянию bundles и links. Доступные команды те же самые, что могут появляться в конфигурационных файлах mpd.conf и mpd.links. Наиболее часто используемая информационная команда show <подкоманда>.

Справку по командам можно вывести командой help или help <команда>, например help show. Можно вводить команды сокращенно, пока это не вводит неоднозначности, например если ввести b вместо команды, то выполнится команда bundle.

mpd понимает опции командной строки (они могут быть как в полной, так и в короткой форме). Перечислю опции, которыя я использовал:
-b --background
запуск mpd в фоновом режиме демона. Если запустить его таким образом, то команда ps его уже не показывает, нужно использовать ps -ax | grep mpd
-a --console-address ip-address
-c --console-port port

С одной из этих опций mpd будет воспринимать TCP-соединения, по которому можно передавать команды. Внимание, эти опции потенциально опасны, поскольку может подсоединиться ЛЮБОЙ пользователь системы. Можно здесь задать требование логина и пароля, но по умолчанию логин не сконфигурирован. По умолчанию слушается адрес 0.0.0.0 (т. е. слушаются все интерфейсы), и порт по умолчанию 5005.
-v --version
отображает версию и выходит.
-h --help
отображает короткую справку и выходит.

Во время работы mpd отвечает на следующие сигналы:

SIGTERM
Пытается корректно отключить все активные соединения и выходит.

SIGUSR1
Указывает mpd начать соединение с текущим активным bundle. Если mpd уже пытается соединиться, то этот сигнал не дает никакого эффекта.

SIGUSR2
Этот сигнал дает противоположный эффект - пытается закрыть активный bundle. Если bundle уже в состоянии закрытия, этот сигнал не дает эффекта.

Таким образом, можно управлять mpd, посылая ему сигналы.

Запускаем mpd как демон:
# mpd -b
После этой команды mpd разрывает соединение:
# killall -USR2 mpd
После этой команды mpd устанавливает соединение:
# killall -USR1 mpd
После этой команды mpd разрывает соединение и завершает работу:
# killall -TERM mpd

Обновлено: 12.03.2015