С этого блока начинается конфигурация самого сервера. Если в конфиг файле описаны несколько конфигураций, у каждой должно быть свое уникальное имя.
Далее будем описывать построчно:
create bundle template B - создаем бандл "B", он же будет выступать в качестве шаблона set iface up-script /usr/local/etc/mpd5/vpn_up_mpd.pl set iface down-script /usr/local/etc/mpd5/vpn_down_mpd.pl - цепляем внешние скрипты на события создания и закрытия туннеля ppp.
MPD может передавать данные в качестве аргументов на события подключения и отключения пользователя к серверу: $ARGV[0] - ngXX - номер тунеля $ARGV[1] - inet $ARGV[2] - aaa.bbb.ccc.ddd/32 - IP адрес сервера $ARGV[3] - IP адрес, выданный пользователю $ARGV[4] - логин пользователя
Эти аргументы вы можете использовать в perl скриптах vpn_up_mpd.pl и vpn_down_mpd.pl
set bundle enable compression - разрешаем CCP (Compression Control Protocol). Разрешаем только использование протокола, выбор протокола сжатия описан ниже.
set bundle enable encryption - разрешаем ECP (Encryption Control Protocol). Аналогично предыдущему пункту, выбор протокола сжатия описан ниже.
set iface idle 0 - таймаут в секундах неактивности, по истечении которого соединение принудительно разрывается со стороны сервера. "0" - не разрывать (стоит по дефолту).
set iface disable proxy-arp - запрещаем proxy-arp. Этот параметр полезен для имитации единой локалки для удаленных хостов.
set iface enable tcpmssfix - позволяет MPD управлять настройкой входящих и исходящих TCP SYN сегментов таким образом, чтобы не превышать MTU, допустимый на интерфейсе.
load common - загрузка другого блока с именем common
Переходим к блоку common:
create link template PPPoE pppoe - создаем линк, он же будет выступать в качестве шаблона
set link enable no-orig-auth - Обычно при использовании PAP или CHAP авторизация происходит в начале соединения. Эта опция временно выключает данное требование в случае если наш сервер является единственным в сети, а клиенту вдруг не нравится запрос от сервера на авторизацию.
set link max-children 300 - максимальное количество соединений для этого шаблона
load pppoe - подгружаем следующий блок
set link action bundle B - накладываем на линк настройки бандла
set link enable multilink - опция позволяет создавать множественное подключение PPP. Но в данном случае опция позволяет пропускать большие пакеты (больше MTU) фрагментами. Что-то вроде фрагментации пакетов.
set link yes acfcomp protocomp - сжатие адресного поля, поля заголовков и поля протокола. Для экономии нескольких байтов во фрейме.
set link disable chap pap eap - запрещаем данные протоколы проверки пароля
set link enable chap-msv1 chap-msv2 chap-md5 - разрешаем протоколы проверки пароля (необходимы для возможности включения шифрования (Microsoft)).
set link keep-alive 10 60 - разрешает LCP пакеты. По умолчанию 5 40. Можно отказаться от этой опции, поставив первое значение в "0".
create link template bge1_0 PPPoE - создаем линк bge1_0 и накладываем настройки шаблона PPPoE
set pppoe iface bge1 - задаем интерфейс, где будет поднят наш сервис. Может быть как физическим интерфейсом, так и вланом (vlan).
set link enable incoming - разрешаем входящие соединения
set pppoe service service_name0 - поднимаем сервис-нейм (service-name) на заданном интерфейсе
Если у вас множество интерфейсов, то достаточно дописывать в конец конфига последний видоизмененный блок, как показано в общем листинге.
Заключение
Из плюсов использования MPD в качестве PPPoE сервера хочу отметить меньшую загрузку CPU, особенно в сочетании с использованием поллинга (polling).
Для этого нужно собрать ядро с поддержкой поллинга:
options DEVICE_POLLING options HZ=1000
После этого можно включить поллинг через /etc/sysctl.conf:
kern.polling.enable=1 kern.polling.user_frac=10
Последнее означает что система будет делить ресурсы CPU в соотношении userland/kernel как 10/90. По умолчанию это значение 50/50.
Конфиг работает на версиях порта mpd-5.0, mpd-5.1. С версией mpd-5.1_1 наблюдались проблемы на серверной стороне. При невыясненных обстоятельствах запускался второй процесс mpd5, который грузил CPU в 100%, а пользователи не могли подключиться. Пришлось откатываться на 5.1.