Перевод документации по mpd5
Mpd 5.2 Руководство пользователя Archie Cobbs, Michael Bretterklieber, Alexander Motin
<mpd-users@lists.sourceforge.net> 2008-09-13
Содержание
- 1 Вступление
- 2 Установка
- 3 Запуск Mpd
- 4 Конфигурирование mpd
- 4.1 Общие команды mpd
- 4.2 Уровни Mpd
- 4.3 Link layer
- 4.4 Bundle layer
- 4.5 Encryption (ECP) layer
- 4.6 Compression (CCP) layer
- 4.7 IPCP layer
- 4.8 IPv6CP layer
- 4.9 Interface layer
- 4.10 Аутентификация, Авторизация и Учет (AAA)
- 4.11 Traffic accounting
- 4.12 IP address pools
- 4.13 Network Address Translation (NAT)
- 4.14 Control console
- 4.15 Web server
- 5 Типы устройств
- 6 Chat скрипты
- 7 Troubleshooting
- 8 Internals
- 9 Ссылки
Вступление
Обзор
Mpd это реализация базирующегося на netgraph(4) PPP протокола для FreeBSD. Он разработан как быстрый и гибкий в конфигурировании работающий в пользовательском окружении, маршрутизации всех пакетов на уровне ядра.
Mpd имеет унифицированную поддержку для многих типов соединений:
- modem для соединения используя разные асинхронные последовательные соединения, включая модемы, ISDN терминальные адаптеры и нуль-модем. Mpd включает управляемый событиями язык скриптов для идентификации модема, установки и т.д.
- pptp для соединения через Интернет используя Point-to-Point Tunnelling Protocol (PPTP). Этот протокол поддерживается большинством ОС и производителями оборудования.
- l2tp для соединения через Интернет используя Layer Two Tunnelling Protocol (L2TP). L2TP это наследственный от PPTP протокол который поддерживается новыми клиентами и серверами.
- pppoe для соединения через Ethernet порт используя PPP-over-Ethernet (PPPoE) протокол. Этот протокол часто используется DSL провайдерами.
- tcp для туннелирования PPP сессии через TCP соединение. Фреймы кодируются так же как и при асинхронных последовательных соединениях.
- udp для туннелирования PPP сессии через UDP соединение. Каждый фрейм инкапсулируется в пакет UDP дейтаграммы.
- ng для соединения используя различные устройства поддерживаемые nrtgraph. Netgraph - модульная сетевая система, поддерживающая синхронные последовательные соединения, Cisco HDLC, Frame Relay и другие протоколы.
Он поддерживает многочисленные PPP субпротоколы и расширения, такие как:
- Multi-link PPP
- PAP, CHAP, MS-CHAP и EAP аутентификация
- сжатие трафика (MPPC, Deflate, Predictor-1)
- шифрование трафика (MPPE, DESE, DESE-bis)
- IPCP и IPV6CP параметры согласования
В зависимости от сконфигурированных правил и параметров соединения mpd может работать как PPP клиент/сервер или перенаправлять соединение без модификации на другие хосты используя поддерживаемые типы связи предоставляющие LAC/PAC/TSA функциональность для построения распределенных сетей.
Mpd также включает много дополнительных возможностей:
- Поддержку IPv4 и IPv6
- Интерфейсы управления Telnet и HTTP
- Различные методы аутентификации и ведения учетных записей (RADIUS, PAM, script, file, ...)
- Учет трафика NetFlow
- Трансляция сетевых адресов (NAT)
- Dial-on-demand
- Динамическое управление связью (оно же ``rubber bandwidth)
- Мощный скриптовый язык для асинхронных последовательных портов
- Независимость от аппаратной части
- Ведение логов
Mpd изначально разработан в Whistle Communications, Inc. для использования в Whistle InterJet. Он основан на iij-ppp пользовательском PPP коде, хотя и полностью переписан позже. Mpd сейчас размещен на sourceforge.net Страница проекта MPD
Как построено руководство
Это руководство разделено на пять частей:
- Установка. Как скачать, скомпилировать и установить mpd.
- Запуск mpd. Как запустить mpd из командной строки UNIX и как использовать интерфейс командной строки mpd.
- Конфигурирование. Как настроить разные типы подключений независимых компонентов mpd.
- Типы устройств. Устройства поддерживаемые mpd и как настроить каждый тип устройства.
- Ссылки. Ссылки на стандарты на которых написан mpd.
История изменений
Изменения от версии 5.1: Новые возможности:
- Добавлена команда 'set radius identifier'
- Добавлены переменные чата модема '$CallingID' и '$CalledID'
- Добавлена поддержка родительского туннеля RADIUS определенного RFC2868
- 'set auth max-logins' теперь нечувствительна к регистру
- Добавлено принудительное назначение командой 'set iface addrs'
Изменения:
- IPCP/IPv6CP теперь закрыты на интерфейсе с ошибочным назначением адреса или ошибкой в up-script
- PPPoE формат адреса пира изменен на более традиционный
Исправления:
- Исправлен отчет адреса пира PPTP для реального LAC/PAC режима.
Установка
Где взять mpd
Mpd поставляется как порт FreeBSD, под именем net/mpd5. Следовательно, самый простой путь получить mpd это установить пакет из порта. Для получения информации как это сделать, смотрите FreeBSD ports web page. Mpd также может быть скомпилирован вручную. Это хороший способ если вы хотите изменить устройства поддерживаемые mpd.
Установка mpd
Если вы используете пакет из порта FreeBSD, то mpd будет автоматически установлен в /usr/local/sbin/mpd5 с типами устройств скомпилированных по умолчанию. Для запуска mpd необходимы несколько конфигурационных файлов. Каталог /usr/local/etc/mpd5 создан для них. В нем вы сможете найти некоторые примеры конфигурационных файлов. Перед тем как запустить mpd, вы должны иметь специфические для вас файлы конфигурации. Это:
mpd.conf
Этот файл определяет одну и больше конфигураций. Когда mpd запускается, вы указываете конфигурацию в командной строке. Эта конфигурация (которая просто состоит из серии команд mpd) загружена. Если конфигурация не задана, загружается конфигурация по умолчанию "default". Каждая конфигурация определяет одну или более связок, линков и репитеров. Они определены командой create. Последующие команды в конфигурации конфигурируют различные уровни для нее.
mpd.secret
Этот файл содержит пары логин пароль. Здесь mpd ищет всю информацию для аутентификации. Этот файл должен иметь доступ на чтение только пользователем root.
mpd.script
Этот файл содержит чат скрипты для модемных устройств.
Сборка mpd
Если вы хотите собственноручно собрать и настроить mpd - это просто. Первое, отредактируйте Makefile чтобы определить (или не определить) разные типы устройств и поддерживаемые опции. Запустите скрипт configure и после напишите make depend all для пересборки бинарных файлов. Возможны следующие определения в Makefile:
MPD_CONF_DIR Каталог по умолчанию в котором mpd будет искать файл mpd.conf, и т.д.
PHYSTYPE_MODEM
PHYSTYPE_TCP
PHYSTYPE_UDP
PHYSTYPE_NG_SOCKET
PHYSTYPE_PPTP
PHYSTYPE_L2TP
PHYSTYPE_PPPOE
Определите эти опции для включения поддержки соответствующих типов устройств.
ENCRYPTION_DES Это включает поддержку соответствующего типа шифрования.
SYSLOG_FACILITY Mpd по умолчанию ведет лог через syslog используя объект LOG_DAEMON. Здесь вы можете настроить этот объект.
Запуск Mpd
Вызов mpd
Mpd вызывается сначала с настройками ваших конфигурационных файлов и потом запускается
mpd [ options ] [ configuration ]
При запуске mpd выполняет команды из startup метки. После этого, если конфигурация задана, mpd ищет указанную метку в mpd.conf и запускает соответствующие команды. Если конфигурация не задана, mpd ищет конфигурацию под названием default. Mpd может быть запущен в интерактивном режиме или как даемон. В интерактивном режиме mpd принимает команды из консоли. Mpd распознает следующие опции командной строки. Каждая опция имеет короткую односимвольную форму и эквивалентную длинную форму.
-b --background Запустить как даемон в фоновом режиме.
-d --directory dir Эта опция позволяет указать иной каталог для файлов конфигурации отличный от каталога по умолчанию /usr/local/etc/mpd.
-f --file filename Указание другого файла конфигурации
-o --one-shot Эта опция вынуждает mpd завершится после исчезновения последнего линка. Шаблон линка не считается как линки.
-p --pidfile filename Mpd открывает и блокирует filename и записывает идентификатор процесса перед стартом. Если другой процесс mpd уже запущен, mpd не запускается. По умолчанию это /var/run/mpd.pid.
-k --kill С этой опцией, mpd пытается убить любой запущенный mpd процесс перед выполнением. Предыдущий процесс должен иметь записанный свой идентификатор в PID файл /var/run/mpd.pid (или в файл указанный в опции --pidfile)
-s --syslog-ident ident По умолчанию mpd ведет лог через syslog(3) с идентификатором mpd. Эта опция позволяет вам изменить этот идентификатор.
-v --version Отображает номер версии mpd.
-h --help Показывает справку
Mpd отвечает на следующие сигналы при выполнении:
SIGTERM
Пытается удачно завершить все соединения и выйти.
SIGUSR1
Этот сигнал вынуждает mpd инициировать соединение с первым подключением. Если mpd уже пытается соединится, этот сигнал не воспринимается.
SIGUSR2
Этот сигнал имеет противоположный эффект, а именно, он вынуждает mpd закрыть первое подключение. Если подключение уже находится в закрытом состоянии, то этот сигнал игнорируется.
Формат файлов конфигурации
Общие свойства
Следующие свойства есть общими для всех конфигурационных файлов
- Любая строка которая начинается с символа # воспринимается как комментарий и игнорируется
- Строки могут иметь двойные отступы. Они интрепретируются соответственно с правилами языка C.
mpd.conf
Запись содержит метку после которой идут команды mpd. Метка начинается с начала строки и заканчивается двоеточием. команды начинаютсся из отступа в виде табуляции и следуют после метки или предыдущей команды. Это пример mpd.conf который содержит одну конфигурацию client которая определяет один шаблон связок B1 и подключение L1:
# # mpd.conf configuration file # client: create bundle template B1 create link static L1 modem set modem device /dev/cuad0 set modem speed 115200 set modem script DialPeer set modem idle-script AnswerCall set modem var $DialPrefix "DT" set modem var $Telephone "1234567" set link no pap chap eap set link accept pap set auth authname "MyLogin" set auth password "MyPassword" set link max-redial 0 set link action bundle B1 open
команды независимы и запускаются одна за другой как будто они вводятся через консоль. Действие команды зависит от контекста, который включает текущее активное подключение, связку и репитер. Информация об активном контексте выводится на консоль коммандной строки. Некторые команды, такие как link, bundle, repeater и create могут изменять этот контекст.
mpd.secret
Этот файл содержит пары логины и пароли, одна запись на строку. Каждая запись может иметь дополнительный третий аргумент, это IP адрес с длиной сетевой маски. Это используется когда нужно согласовать IP адреса с соответствующим пиром. Мы ограничиваем указанием диапазона разрешенные IP адреса назначаемые пиру. В примере ниже, мы назначаем два аккаунта ISP которые мы можем использовать для подключения к интернет. Также у нас есть три друга которым мы разрешаем подключаться к нам и мы хотим запретить ограничить IP адреса с которых они могут подключаться. И наконец, последний пользовательский пароль мы получаем из внешней программы.
# # mpd.secret configuration file # # my two ISP accounts mylogin1 password1 mylogin2 "Xka \r\n" # my three friends bob "akd\"ix23" 192.168.1.100 jerry "33dk88kz3" 192.168.1.101 phil "w*d9m&_4X" 192.168.1.128/25 # An external password access program gregory "!/usr/local/etc/mpd/get_passwd.sh"
Здесь bob и jerry будут иметь 192.168.1.100 и 192.168.1.101 соответственно, в то время как phil будет иметь любой адрес от 192.168.1.128 до 192.168.1.255. Указание "!" подразумевает, что пароль для пользователя gregory находится не в файле mpd.secret. Взамен запускается программа с дополнительным аргументом в качестве которого выступает имя аутентифицированного пользователя (в этом случае команда будет выглядеть так /usr/local/etc/mpd/get_passwd.sh gregory). команда может включать инициализацию, фиксированные аргументы и т.п. Эта программа выводит пароль в виде обычного текста для пользователя как одну строку на стандартный вывод и потом завершается. Mpd заблокирует эту операцию, поэтому программа ответит и завершится быстро. Если здесь возникает ошибка, то команда выведет пустую строку или не выведет вообще ничего. Отдельный случай, если имя пользователя в файле mpd.secret это "*", то это строка должна быть последней, поскольку она подразумевает любого пользователя. После идет обращение к внешней программе для определения корректности имени пользователя. Эта подстановка работает только с строками "!". Общая длина выполняемой команды должна быть меньше 128 символов. Программа выполняется от того же пользователя который запустил mpd, обычно это root, будьте осторожны с запуском скриптов от root, убедитесь что скрипт не читаемый/записываемый для всех. Стандартный ввод и стандартные ошибки унаследованы от родительского процесса mpd. Примите во внимание что дополнительные аргументы будут видны для пользователей на локальной машине.
mpd.script
Этот файл имеет формат сходный с mpd.conf, но он содержит команды скрипта чата взамен комманд mpd. Каждая строка содержит одну команду и метку определяющую стартовую точку и/или подпрограмму в скрипте. Смотрите Написание скриптов для полного описания.
Интерфейс командной строки Mpd
Mpd предоставляет пользовательский интерфейс командной строки на стандартном вводе и TCP порту. Здесь команды mpd могут вводится для конфигурирования разных уровней и проверки статуса указанных связок и подключений. Команды которые доступны в командной строке такие же как и в файле mpd.conf. В любое заданное время всегда есть активный контекст который включает активное подключение, связку или репитер. Это имя всегда отображается в приглашении. Это пример запущенного mpd с конфигурацией mpd.conf которая определяет связку myisp содержащую два подключения modem1 и mоdem2:
$ mpd config1 Multi-link PPP daemon for FreeBSD
process 26177 started, version 5.0 (root@orphanage.alkar.net 13:16 22-Sep-2007) [modem1]
С этого времени, mpd всегда читает и выполняет все команды ассоциированные с конфигурацией config1, которая определяет связку myisp. Для управлений mpd при выполнении вы также можете подключится к Telnet консоли mpd.
> telnet 0 5005 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. Multi-link PPP daemon for FreeBSD Username: Admin Password: Mpd pid 1419, version 5.0a1 (root@orphanage.alkar.net 13:16 22-Sep-2007)
[modem1]
Приглашение [modem1] показывает текущее активное подключение (modem1). Любая специфическая для подключения команда введенная здесь будет применена к modem1. Для изменения активного подключения, связки или репитера, используется команда link, bundle или repeater:
[modem1] link modem2 [modem2]
Теперь любая введенная команда применяется к modem2. Этот же принцип работает и в mpd.conf. Также, если изменение подключения требует изменения связки, mpd сделает это тоже. Доступные команды описаны в следующей главе. Когда mpd запущен, можно использовать help для получения информации по конкретной команде:
[modem2] help show Commands available under "show": bundle : Bundle status repeater : Repeater status ccp : CCP status ecp : ECP status eap : EAP status events : Current events ipcp : IPCP status ipv6cp : IPV6CP status iface : Interface status routes : IP routing table layers : Layers to open/close device : Physical device status link : Link status auth : Auth status radius : RADIUS status lcp : LCP status nat : NAT status mem : Memory map console : Console status web : Web status global : Global settings types : Supported device types version : Version string summary : Daemon status summary [modem2]
Mpd разрешает вам использовать только префикс команды, по длине не подразумевающий двузначность.
[modem2] b Defined bundles: Bundle Links ------ ----- myisp modem2[DOWN] [modem2] s s: ambiguous command
Конфигурирование mpd
Общие команды mpd
Этот раздел описывает общие команды mpd которые не принадлежат конкретному уровню.
create bundle [ template | static ] name [ template ]
Создание новой связки с указанным именем, которое по выбору может базироватся на шаблоне. Если указана опция 'template' связка не будет работать, но она будет использована для создания новой связки по требованию. Если указана опция 'static', это будет неизменяемая связка которая не исчезает после завершения операций. Максимальная длина имени для шаблонов 10 символов, для других связок 15.
create link [ template | static ] name ( type | template )
Создает новое подключение с указанным именем и типом, по выбору може базироватся на шаблоне. Если указана опция 'template' связка не будет работать, но она будет использована для создания новой связки по требованию. Если указана опция 'static', это будет неизменяемая связка которая не исчезает после завершения операций. Максимальная длина имени для шаблонов 10 символов, для других связок 15.
destroy bundle [ name ] destroy link [ name ]
Разрушает созданные подключения/связки. Учтите, что если подключение используется оно может не исчезнуть после выполнения команды, это может занять некоторое время для правильного его завершения.
bundle [ name ]
Эта команда изменяет текущую активную связки на связку с именем name. Текущее активное подключение также изменится на первое подключение связки. Если имя не задано, эта команда выводит все определенные связки и ихние составные подключения. Новая связка будет отображена в приглашении.
link [ name | [number] ]
Эта команда изменяет текущее активное подключение на подключение с названием name. Если подключение не принадлежит текущей активной связке, то текущая активная связка изменяется на связку содержащую подключение name. number подключения (RAD_NAS_PORT) может указыватся в шестнадцатеричном формате в квадратных скобках на месте имени.
repeater [ name ]
Эта команда изменяет текущий активный репитер на репитер под именем name.
iface [ iface ]
Эта команда изменяет текущую активную связку на связку используя интерфейс iface.
msession [ msesid ]
Эта команда изменяет текущую активную связку на связку содержащую сессию с мультилинк ID сеcсии msesid.
session [ sesid ]
Эта команда изменяет текущую активную связку на связку содержащую сессию с ID сеcсии sesid.
load configuration
Эта команда указывает mpd перечитать записи для configuration из mpd.conf и и выполнить соответствующие команды, так как бы конфигурация была задана в командной строке.
show [ item ]
Эта команда выводит информацию о статусе. Верными значениями для item есть:
bundle
- Выводит информацию о состоянии текущей связки.
link
- Выводит информацию о состоянии текущего подключения.
repeater
- Выводит информацию о состоянии текущего репитера.
iface
- Выводит информацию о состоянии интерфеЙсного уровня ассоциированного с текущей активной связкой.
routes
- Выводит текущую таблицу маршрутизации.
ipcp
- Выводит информацию о состоянии протокола управления IP ассоциированного с текущей активной связкой.
ippool
- Выводит информацию о состоянии сконфигурированных IP пулов.
ccp
- Выводит информацию о состоянии протокола управления сжатием ассоциированного с текущей активной связкой.
lcp
- Выводит информацию о состоянии протокола управления подключением ассоциированного с текущим активным подключением.
nat
- Выводит информацию о NAT на текущей активной связке.
auth
- Выводит информацию о аутентификации.
eap
- Выводит информацию о EAP.
radius
- Информация относящаяся к RADIUS аутентификации.
proto
- Виводит статистику прокола для текущей активной связки и подключения.
types
- Выводит типы устройств поддерживаемые этой версией mpd.
layers
- Выводит имена уровней которые действительны как аргументы для команд open и close.
l2tp
- Выводит активные L2TP туннели.
pptp
- Выводит активные PPTP туннели.
events
- Выводит все ожидающие события (для отладки mpd).
mem
- Выводит распределение динамически выделеной памяти (для отладки mpd).
version
- Выводит версию выполняющегося mpd и поддерживаемые возможности.
sessions [ param value ]
- Выводит активные сессии соответствующие указаными параметру/значению.
customer
- Выводит данные о клиенте.
summary
- Выводит отчет.
console
- Выводит отчет о консоли.
web
- Выводит отчет о web-сервере.
user
- Выводит указанную консоль пользователей.
set ... Эта команда устанавливает разную конфигурационную информацию. Дальнейшие подробности изложены позже в этой главе. Действительными продолжениями для set есть: set global startrule num set global startpipe num set global startqueue num set global starttable num Эти команды инициируют значения для автонумерации правил ipfw, pipe, queue и table. По умолчанию это 10000, 10000, 10000 и 32 соответственно. set global pptptimeout seconds set global l2tptimeout seconds Устанавливает задержку отключения PPTP/L2TP туннелей при простое. По умолчанию это 10 секунд. set global pptplimit num set global l2tplimit num Ограничение максимального числа вызовов на PPTP/L2TP туннель. Когда лимит исчерпан для следующего вызова будет создан новый туннель. Эта опция нарушает PPTP RFC который требует только один существующий туннель для PAC/PNS пар, но это может нарушить стабильность работающих туннелей. По умолчанию это 100 (10 for L2TP before FreeBSD 6.3-STABLE and 7.0-RELEASE). set global max-children num Эта опция указывает глобальное максимальное количество подключений, созданных используя шаблон, которые могут существовать одновременно. Значение по умолчанию 10000. set global enable option ... set global disable option ... Эти команды конфигурируют различные глобальные опции. Команды enable или disable определяют действие над соответствующей опцией. Доступные опции: one-shot Эта опция принудительно завершает mpd после исчезновения последнего подключения. Шаблоны подключений не считаются как подключения. По умолчанию запрещено. tcp-wrapper С этой опцией mpd использует /etc/hosts.allow каждый раз при подключении клиента. Это полезно когда вы хотите ограничить доступ к mpd. Эта опция затрагивает все TCP соединения, включая PPTP и TCP уровень устройства. По умолчанию запрещено. set user username password [admin|operator|user] Эта команда конфигурирует каким пользователи разрешено подключатся к консоли. Она может вызываться много раз с разными именами пользователей. set bundle ... Устанавливает параметры конфигурации на уровне связки для текущей активной связки. set link ... Устанавливает параметры конфигурации на уровне подключения для текущего активного подключения. set iface ... Устанавливает параметры конфигурации на уровне интерфейса для текущей активной связки. set nat ... Устанавливает параметры конфигурации NAT для текущей активной связки. set ipcp ... Устанавливает параметры конфигурации протокола управления IP для текущей активной связки. set ccp ... Устанавливает параметры конфигурации протокола управления сжатием для текущей активной связки. set auth ... Конфигурирует подсистему аутентификации. set radius ... Конфигурирует RADIUS. set eap ... Конфигурирует EAP. set debug ...level Устанавливает уровень отладки netgraph(3). По умолчанию 0. set modem ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип modem. set ng ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип netgraph. set tcp ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип tcp. set udp ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип udp. set pptp ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип pptp. set l2tp ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип l2tp. set pppoe ... Устанавливает специфические для устройства параметры конфигурации для текущего подключения, которое должно иметь тип pppoe. set console ... Устанавливает специфические для консоли параметры конфигурации. set web ... Устанавливает специфические для web сервера параметры конфигурации. open [ layer ] Эта команда создает событие OPEN для посылки соответствующему уровню или конечной машине. Действительными уровнями являются: iface Уровень интерфейса. Открытие этого уровня конфигурирует интерфейс и устанавливает маршруты. Если dial-on-demand разрешен, ничего не происходит пока эсть исходящий трафик. Если dial-on-demand запрещен нет смысла открывать этот уровень вручную. bund Уровень связки. Этот уровень представляет многоподключенную связку ``virtual link и обычно открывается и закрывается автоматически. ipcp Протокол управления IP конечной машины. Обычно открывается и закрывается автоматически. ccp Протокол управления сжатием конечной машины. Обычно открывается и закрывается автоматически. link Протокол управления подключением конечной машини. Это уровень по умолчанию для команд open/close. Открытие этого уровня инициирует исходящий вызов этим подключением. device Уровень устройства. Обычно открывается и закрывается автоматически. Обычно, только уровни iface и link явно открываются и закрываются. Это происходит потому, что другие уровни запрограммированы открыватся и закрыватся когда это необходимо. Учтите что сигналы SIGUSR1 и SIGUSR2 это альтернативный путь открытия и закрытия первого подключения. close [ layer ] Эта команда создает событие CLOSE для посылки соответствующему уровню или конечной машине. log [ +/-flag ... ] Mpd поддерживает несколько различных log-флагов. Каждая строка занесенная mpd в лог тегируется одним (или больше) этими флагами. Включая или выключая флаги можно включать или выключать подробный лог. Это позволяет вам настроить детальные логи. Без аргументов, команда log показывает текущую настройку log-флагов. Чтобы разрешить log-флагов добавте аргумент +flag. Для запрета -flag. Это флаги поддерживаемые mpd и ихними соответствующими категориями: auth* События аутентификации подключения bund* События уровня связки ccp* События сжатия и согласования связи chat* Чат-скрипт модема console* Лог на консоль так же как и в лог файл echo Эхо/ответ пакеты для всех конечных машин ecp* События шифрования и согласования связи frame Дамп всех полученых и отправленых фреймов fsm* События всех конечных машин (не включая эхо и сброс) iface* События уровня интерфейса ipcp* События протокола управления IP и согласования связи ipv6cp* События протокола управления IPv6 и согласования связи lcp* События протокола управления подключением и согласования связи link* События уровня подключения phys* События уровня устройства radius* События RADIUS аутентификации rep* События уровня репитера help [ command ] Короткое описание подставленой команды или неполной команды, список альтернатив. exit Это команда вихода из консоли, но не завершения процесса mpd. Эта команда используется для разрыва связи через телнет. quit Закрытие всех подключений и завершение процесса mpd.
Уровни Mpd
Mpd состоит из нескольких уровней, соответственно уровневой природе протокола PPP. Существует два типа уровней иерархически соедененных с двумя разными рабочими режимами "ppp terminator" и "ppp repeater". Режим работы выбирается динамически в зависимости от конфигурации подключения и регистрируемого имени пользователя (смотрите команду "set link action ..."). Режим "ppp terminator" использует иерархию: Интерфейс > Управление IP > Сжатие > Шифрование > Связка > Подключение Режим "ppp repeater" использует иерархию: Подключение1 > Репитер > Подключение2 Подключение (link) это соединение точка-точка между локальной машиной и удаленным пиром, осуществляется некоторым физическим устройством, таким как соединение через модем или виртуальное PPTP соединение. Параметры подключения включают использование аутентификации в двух направлениях, используемый тип аутентификации (PAP или CHAP), keep-alive пакеты, согласование опций multilink и другие специфические параметры.
Link layer
Эта глава описывает команды, которые конфигурируют уровень связи. Все эти команды относятся к активной связи, то есть, связь, которая отображается в командной строке
set link action (bundle|forward) name [ regexp ]
Список команд описывает, как должны быть обработаны входящие звонки. "bundle" означает, что подключение должно быть обработано с указанной связкой. "forward" означает, что подключение должно быть отправлено, используя повторитель для указанной связи. Дополнительный параметр "regexp" определяет регулярное выражение, которое будет проверено по отношению к auth name пира. Действия из списка будут проверены в порядке определения, пока regexp соответствие не будет найдено. Действия будут обработаны трижды. В первый раз они проверяются только после разрешения , во второй раз только после получения авторизации пира во время переговоров LCP, и в третий раз, когда связь установлена. Во время первой проверки еще нет никакого auth name , проверка будет пропущена, если будет определено более одного действие для связи или если у действия есть определенный regexp.
set link latency microseconds set link bandwidth bits-per-second
Относится к мультилинковому PPP. Применимо к соединениям в которых пакеты разделяются на фрагменты до отправки по разным связям в связке. Представим себе что у нас в связке есть модемное соединение и 1.5Mbps T1. Если mpd отправляет каждый пакет одинаковых размеров по каждой из связей, пока модем передает первый байт своего фрагмента, Т1 скорее всего передал все свои фрагменты. И коню понятно что это не хорошо. расставив по задержке и пропускной способности канала все связи, mpd может выбрать наиболее удачный путь. Mpd пытается отправить пакеты по связям так (если параметры настройки верны) чтобы последний байт каждого пакета прибыл адресату в одно и тоже время по каждой из связи. Это уменьшает задержку. Однако, если вы беспокоитесь только о пропускной способности, просто установите все задержки в 0. Если все ваши связи имеют одинаковую скорость и тип(как часто бывает), то они должны быть одинаково настроены, или не настроены вообще, потому что по умолчанию имеют одинаковое значение. Тогда mpd отсылает пакеты равного размера по всем связям.
set link mtu numbytes set link mru numbytes set link mrru numbytes
Устанавливает максимальное mtu (MTU) для связи. Размер наибольшего фрагмента PPP (с вычетом PPP заголовка) и связь будет функционировать с таким параметром пока другая станция не потребует снизить значение. По умолчанию 1500. set link mru Устанавливает максимальное mru (MRU) для связи. Размер наибольшего фрагмента PPP (с вычетом PPP заголовка) и связь будет функционировать с таким параметром если это возможно. По умолчанию 1500. Если PPP multilink установлен в связе, тогда это значение менее важное, потому что multilink разрешает PPPфреймам фрагментироватся, поэтому PPP фрейм до MRRU может всегда проходить сквозь канал не учитывая MTU. В противном случае, mpd ответственный за то что значение MTU установленное на сетевом интерфейсе достаточно мало для того чтобы наибольший передаваемый IP пакет не превышал оговоренную для удаленной машины MRU после доставки к ней PPP фрейма. Например PPP сжатие и шифрование служебной информации. Однако, mpd не учитывает потери вне PPPфрейма. Например , когда используете PPTP который инкапсулирует PPP кадры в IP пакеты, многочисленные исходящие ``внутренние IP пакеты могут быть разбиты на куска `внешнего IP пакета, в результате сверх оптимальная производительность. В этом случае может быть полезным установить MTU ниже для исключения фрагментации.
set link accmap value
желает устанавливать асинхронную таблицу управляемых символов для связи в конечной точке. Нужен только для асинхронных связей (таких как modem и tcp). Определяет какой контрольный символ нужен для отключения. value представляет собой 32-bit 16 разрядное число; по умолчанию 0x000a0000, что соответствует Control-S и Control-Q.
set link ident string
включает отправку строки идентификаторов пиру через LCP Ident код. Ident строка отправляется когда линк поднят.нужен для отладки,и означает что должен быть легким для восприятия. Как бы то ни было, это исправляет некоторые своеобразные реализации PPP. Пустая строка отключает эту опцию; по умолчанию
set link fsm-timeout seconds
аналог команды в уровне связки но применим к уровню связи, но применима для канального уровня FSM например Link Control Protocol (LCP). По умолчанию 2 секунды, обычно менять не стоит.
set link keep-alive seconds max
включает отправку LCP echo пакетов. Первый пакет отправляется через seconds секунд простоя (т.e., нет принятых пакетов от удаленной машины по связе). После более чем seconds,отправляется другой эхо пакет. Если после max секунд ответ не будет получен связь будет разорвана. Если seconds =0, эхо пакеты отключены. По умолчанию seconds =5, max=40. Полезно для модемов у которых поиск несущей нестабилен. Однако , линии шумные и модем тратит много времени на перенастройку, max значение нужно увеличить.
set link max-redial num
Эта команда ограничивает число попыток перезвона. После num раз, mpd прекращает попытки. При нуле неограниченное число попыток Если max-redial = -1, тогда mpd никогда не перезванивает. Должна использоватся в связях предназначенных для исходящих соединений.
set link max-children num
Эта опция шаблона определяет максимальное число связей, созданных с использованием этого шаблона, которые могут существовать в то же самое время. Значение 0 отключает шаблон. Значение по умолчанию 10000.
set link accept option ... set link deny option ... set link enable option ... set link disable option ... set link yes option ... set link no option ...
Большинство из опций двунаправленные. enable и disable определяют хотим ли мы включить ту или иную опцию на локальном компьютере. accept и deny разрешим ли мы запрос соответствующей опции удаленным компьютером. yes =enable и accept. no = disable и deny. Когда вы имеете дело с аутентификацией PAP и CHAP, когда enable вы требуете логин и пароль от удаленной машины. Когда accept вы позволяете удаленной машине требовать логин и пароль от нас. Разрешенные опции:
pap
пароль передается в незашифрованном виде. По умолчанию disable и accept.
chap
безопаснее pap, потому что передается только хэш пароля. Mpd поддерживает MD5 CHAP и Microsoft CHAP версии 1 и 2. Mpd предпочитает MD5 CHAP перед Microsoft CHAP, кроме pptp. Эти параметры имеют псевдонимы md5-chap ms-chapv1 ms-chapv2
chap-md5
по умолчанию disable и accept.
chap-msv1
Microsoft CHAP. по умолчанию disable и deny.
chap-msv2
Microsoft CHAP Version 2. по умолчанию disable и accept.
eap
Extensible Authentication Protocol. Более детально в след разделе. По умолчанию disable и accept.
incoming
Эта опция допускает принятие входящих подключений. Если эта опция будет заблокирована, то mpd не будет принимать входящие подключения, используя эту связь. Чтобы избежать "гонок",следует указывать после того, как все другие опции связи конфигурированы. Значение по умолчанию, disable
Multilink
Эта команда допускает работу по многоканальному протоколу PPP на связи. Эта опция требуется в обоих направлениях, если есть больше чем одна связь в связке. Однако, многоканальный протокол PPP иногда полезен для одиночных связей, когда максимальный блок передачи данных связи низок; многоканальный протокол PPP позволяет произвольно длинным пакетам проходить через связь. Значение по умолчанию, disable (то есть, нормальный немногоканальный протокол PPP).
shortseq
Эта опция актуальна, если устанавливается связь с многоканальным протоколом PPP. Это запрещает более короткие заголовки фрагмента мультисвязи, сохраняя два байта на каждом кадре. Значение по умолчанию, enable и accept.
acfcomp
Сжатие адреса и контрольных полей. Только для асинхронных каналов. Сохраняет 2 байта в кадре. по умолчанию enable и accept.
protocomp
сжатие поля протокола. Сохраняет 1 байт в фрейме для большинства кадров. по умолчанию enable и accept.
magicnum check-magic
magicnum опция включает использование magic number для локальной точки PPP линка. Это уникальное число включаемое в каждый LCP пакет который мы отсылаем, который помогает определить условия обратной связи. check-magic заставляет mpd проверять правильность magic number во всех принятых LCP фреймах. Некоторые старые реализации PPP не правильно обрабатывают magic numbers, в этом случае эту опцию лучше отключить. По умолчанию обе опции enable. Есть две основных причины увидеть ``loopback condition detected на модемном соединении: • Модем в режиме управления и происходит эховозврат всех наших кадров. • PPP сервер не в PPP режиме, но выдает приглашение командной строки или чтото в этом роде и возвращает все наши пакеты.
passive
включает passive режим в нашей связи. Полезно при постоянных соединениях. См RFC 1661. По умолчанию disable.
callback
Вкл. PPP обратный звонок. Если удаленный компьютер требует то мы немедленно вешаем трубку и перезваниваем. По умолчанию disable.
no-orig-auth
Обычно, если PAP или CHAP включены, мы заставляем удаленный компьютер использовать их при аутентификации. Эта опция временно отключает это требование если мы первые устанавливаем соединение и удаленный компьютер отказывает во входе. Полезно если одна и та же связь используется как для входящих так и для исходящих соединений. По умолчанию disable.
keep-ms-domain
Обычно, используя MS-CHAP, Домен MS удален, и только простое имя пользователя используется. При определенных обстоятельствах Домен MS должен быть сохранен, например если используется IAS как сервер RADIUS. Значение по умолчанию disable.
time-remain
Отправляет Time-Remaining LCP пакет если AAA сообщило о завершении времени простоя сессии. По умолчанию disable.
peer-as-calling
mpd может отсылать адреса удаленных туннелей в Calling-Station-Id вместо адреса поданного от удаленного компьютера через тунель (PPTP и L2TP). Может быть использовано для непроверенных хостов. По умолчанию disable.
report-mac
mpd может отправлять MAC адреса и интерфейсы в Calling-Station-Id. По умолчанию disable.
4.3.1. EAP
Эта глава описывает команды, которые конфигурируют EAP. Mpd изначально поддерживает только EAP-тип MD5; другие EAP-типы могут использоваться вместе с сервером RADIUS. Все эти команды относятся к в настоящее время активной связи.
set eap accept option ... set eap deny option ... set eap enable option ... set eap disable option ... set eap yes option ... set eap no option ...
Эти команды конфигурируют различные опции EAP. Большинство опций двунаправлено поэтому могут, вкл выкл независимо в каждом направлении.
md5
EAP-Тип MD5. Это - то же самое что и CHAP-MD5, за исключением того, что создан внутри EAP пакетов. По умолчанию disable и accept.
radius-proxy
Заставляет Mpd проксировать все EAP запросы на сервер RADIUS. По умолчанию disable.
Bundle layer
Все команды (за исключением new) применимы к текущим активным связкам т.е. к связкам отображаемых в командной строке.
set bundle period seconds
set bundle hiwat percent
set bundle lowat percent
set bundle min-con seconds
set bundle min-dis seconds
set bundle links link1 [ ... ]
Эти команды работают только при включенном шейпере. Mpd попытается поднять новую связь или положить существующую, когда использование превышает hiwat или ниже lowat процентов, соответственно. Использование вычисляется каждый period поделенный на 6 промежутков, и также усредняет по предыдущему period. Mpd не отключит связь пока предыдущая не была разорвана хотя б min-dis секунд(Как я понял это минимальный интервал через который mpd совершает отключения). Также, mpd не подымет связь если предыдущая была открыта хотя б min-con секунд. Два последних параметра помогают увеличить устойчивость, но увеличивает время отклика.
set bundle fsm-timeout seconds Устанавливает время отклилка от всех пиров(FSM). Использовать только в исключительных ситуациях таких как РРР соединение через спутниковые каналы с большой задержкой. По умолчанию 2 секунды.
set bundle accept option ...
set bundle deny option ...
set bundle enable option ...
set bundle disable option ...
set bundle yes option ...
set bundle no option ... Конфигурирует разные опции связки. Большинство опция двунаправленные т.е. они могут вкл и выкл независимо друг от друга в каждом направлении . enable и disable команды определяют использовать или нет эту опцию. accept и deny команды определяют разрешим ли мы доступ рабочей станции к запрошенной опции . команда yes тоже самое что и enable и accept. no тоже самое что и disable и deny. Опции доступные на уровне связки:
bw-manage Эта команда включает управление пропускной способностью (bandwidth management), с которой mpd пытается динамически разграничивать число подключенных связей в зависимости от загрузки канала. Правильное функционирование bandwidth management зависит от нормальной задержки и полосы пропускания для каждой связи; см. set link latency и set link bandwidth . По умолчанию опция отключена ¬- mpd соединяет все связи или ни одной
round-robin Когда мультилинковый PPP включен и подключено 2 или более связей, эта опция включает циклический алгоритм передачи пакетов в связях. То есть, вместо разделения каждого пакета на части и доставки отдельных пакетов через все связи в связке, каждый пакет доставляется целиком через одну связь. Соединение устанавливается поочередно через все связи в связке. Полезна при больших задержках, и возможных задержках обусловленных получением беспорядочных (испорченных) TCP пакетов; как бы то ни было, это может помочь при больших потерях или при испорченном оборудовании. По умолчанию отключена.
ipcp ВКЛ/ВЫКЛ IPCP согласование. См. IPCP layer. По умолчанию включена.
ipv6cp ВКЛ/ВЫКЛ IPV6CP согласование. По умолчанию отключена.
compression ВКЛ/ВЫКЛ СCP согласование. См. СCP layer. По умолчанию отключена
encryption ВКЛ/ВЫКЛ ЕCP согласование. См. ЕCP layer. По умолчанию отключена
crypt-reqd Обязательное шифрование. Когда mpd скомпилировано с поддержкой шифрования эта опция mpd отключает связь если шифрование невозможно установить в двух направлениях(т.е. использовать шифрование в противном случае связи не будет). По умолчанию ОТКЛ
P.S. Ногами, за перевод, не пинать переводил ночью после учебы:)
Encryption (ECP) layer
Этот раздел описывает команды конфигурирования уровня Encryption Control Protocol (ECP) Все команды применимы для текущей активной связки. Для использования ЕСР вы должны включить шифрование на уровне связки. Для разрешения установки шифрование вы должны включить здесь пару протоколов. Прим. При использовании РРР предпочтительнее ECP чем CCP. Тем не менее Microsoft объединил сжатие и шифрование в своем алгоритме «сжатия» (МРРС).
set ecp key string
Установки ключа шифрования.
set ecp accept option ...
set ecp deny option ...
set ecp enable option ...
set ecp disable option ...
set ecp yes option ...
set ecp no option ...
Конфигурирует разные опции ЕСР. Каждое направление связи(прием/передача) независимы. Все опции по умолчанию disable и deny. Enable и disable для полученных данных. accept и deny для переданных данных. команда yes тоже самое что и enable и accept. no тоже самое что и disable и deny.
Доступные опции:
dese-bis Включает DESE-bis (rfc 2419)шифрование. Этот алгоритм принадлежит пользовательскому уровню и поэтому значительно увеличивают требования к CPU на линиях (>10Mbit/s) . По умолчанию disable.
dese-old Включает DESE (rfc 1969)шифрование. Этот алгоритм принадлежит пользовательскому уровню и поэтому значительно увеличивают требования к CPU на линиях (>10Mbit/s) . Прим: DESE это протокол с излишком. Потому что на границе между каждыми 8 байтами стоит блок DES шифрования, dese-old имеет совместимость с другими протоколами которые работают над ним. Не совместимость с Predictor-1 и Deflate сжаитием. По умолчанию disable.
Compression (CCP) layer
Этот раздел описывает команды конфигурирования уровня Compression Control Protocol (CCP) Все команды применимы для текущей активной связки. Для использования ССР вы должны включить шифрование на уровне связки. Для разрешения сжатия вы должны включить здесь пару протоколов.
set ccp accept option ...
set ccp deny option ...
set ccp enable option ...
set ccp disable option ...
set ccp yes option ...
set ccp no option ...
Каждое направление связи(прием/передача) независимы. Все опции по умолчанию disable и deny. Enable и disable для полученных данных. accept и deny для переданных данных.
Yes = enable и accept. no =disable и deny.
Доступные опции:
pred1 Включает Predictor-1 (RFC 1978) сжатие. Predictor-1 более быстрый чем Deflate. Необходимо ng_pred1 Netgraph node type, присутствует с FreeBSD 6.2-STABLE 2007-01-28. если в системе нет ng_pred1, этот алгоритм работает на пользовательском уровне но требует мощного процессора. ПО умолчанию disable.
deflate Включает Deflate (RFC 1979). У Deflate степень сжатия выше чем у Predictor-1. Необходимо ng_deflate Netgraph node type, присутствует с FreeBSD 6.2-STABLE 2007-01-28. по умолчанию disable.
mppc Включает субпротокол сжатия/шифрования MPPC . более детально в след разделе. По умолчанию disable.
4.6.1. MPPC protocol
Для включения этого протокола на уровне ССР должна быть включена опция 'mppc' MPPC CCP subprotocol состоит из MPPC сжатия и MPPE шифрования. Для активации MPPC CCP необходимо выбрать некоторые опции из списка приведенного ниже.
set mppc accept option ...
set mppc deny option ...
set mppc enable option ...
set mppc disable option ...
set mppc yes option ...
set mppc no option ...
Эти команды конфигурируют MPPC. compress Включает MPPC сжатие. Это только метод сжатия поддерживаемый Microsoft Windows RAS. Прим: необходимо ng_mppc node который откл. по умолчанию поскольку требует наличие некоторых патентованных файлов. Если поддержки не обнаружено то сжатие работать не будет. Используйте 'show version' для получения реального статуса. По умолчанию disable.
e40 Вкл 40-bit MPPE шифрование. По умолчанию disable.
e56 Вкл 56-bit MPPE шифрование. По умолчанию disable.
e128 Вкл 128-bit MPPE шифрование. Прим: к тому же для работы MPPE, необходимо MS-CHAPv1 или MS-CHAPv2 авторизация, потому что MPPE ключи генерируются на основе результата авторизации. Если MS-CHAP не используется то шифрование не будет установлено. По умолчанию disable.
stateless Включает режим без запоминания состояния(о сетевых протоколах, которые не предусматривают сохранения информации о сессии пользователя; каждая передача данных рассматривается как новая сессия. Пример - HTTP, не хранящий информацию о соединении). Требует более мощного процессора и отчасти ухудшает безопасность, но позволяет более быстро восстановится после потери пакетов. По умолчанию disable.
policy Если enable, Mpd использует MPPE-Types и MPPE-Policy информацию из буфера авторизации. По умолчанию disable.
IPCP layer
Этот раздел описывает команды конфигурирования уровня IP Control Protocol (IPCP). Для включения необходимо указать ipcp опцию в уровне связки. Все команды применимы для текущей активной связки
set ipcp ranges (local/width|ippool pool) (remote/width|ippool pool) Команда определяет IP каждой конечной точки. Для каждой конечной точки у нас будет адрес и маска. width 32 конкретный адрес; width 0 любой адрес. Например 192.168.1.17/25 означает что выбран IP 192.168.1.17, но любой адрес из диапазона 192.168.1.0 -192.168.1.128 разрешены. По соглашению local адрес может быть 0.0.0.0 и запрос на удаленный сервер назначит нам IP. Конечно, для того чтобы это работало удаленный компьютер должен знать каким должен быть наш local IP. remote не может быть 0.0.0.0. Но если пользовательский запрос 0.0.0.0,мы выдадим ему какой-то адрес. width должна быть 0. Также возможно установить имя ippool для назначения адреса. В таком случае маска будет 32. Если сторонам не удается договорится о IP то после повторных переговоров соединение прерывается. И выводится сообщение ``IPCP: not converging.
set ipcp dns primary [ secondary ] Некоторые PPP клиенты запрашивают информацию о DNS сервере. Эта команда разрешает mpd отвечать на эти запросы. Эта команда особенно полезна для информирования PPTP клиентов. Могут быть определены 1 или 2 DNS сервера. 0.0.0.0 отключает эту опцию.
set ipcp nbns primary [ secondary ] Некоторые MIcrosoft PPP клиенты запрашивают информацию о NetBIOS (NBNS) сервере. Эта команда разрешает mpd отвечать на эти запросы. Эта команда особенно полезна для информирования PPTP клиентов. Могут быть определены 1 или 2 NBNS сервера. 0.0.0.0 отключает эту опцию.
set ipcp accept option ...
set ipcp deny option ...
set ipcp enable option ...
set ipcp disable option ...
set ipcp yes option ...
set ipcp no option ...
Настраивает разные опции IPCP. vjcomp двунаправленная и может быть включена в одном и/или другом направлении. enable и disable определяют хотим ли мы включить ту или иную опцию на локальном компьютере. accept и deny разрешим ли мы соответствующую опцию на удаленном компьютере. yes =enable и accept. no = disable и deny.
Доступные опции:
vjcomp Эта опция включает Van Jacobson сжатие заголовка TCP, которая сохранит несколько байт в TCP пакете. Почти всегда включается. Неэффективен для ТСР соединений с современными добавлениями такими как штамп времени или SACK, которые изменяют ТСР опции от пакета к пакету. По умолчанию enable и accept.
req-pri-dns req-sec-dns req-pri-nbns req-sec-nbns
Включение этой опции заставляет mpd запрашивать primary и/или secondary DNS и/или NBNS сервера от удаленных компьютеров во время установления связи. Если DNS сервера были получены от удаленной машины, они появятся как параметры скрипта определенного как set iface up-script, если такой есть. Обычно , mpd не использует NBNS значения; они появляются только в логах. В будущем это может изменится.
IPv6CP layer
Mpd поддерживает IPv6 Control Protocol (IPv6CP). Для включения IPv6CP, включите опцию ipv6cp на уровне связки.
Interface layer
Этот раздел описывает команды конфигурирования уровня интерфейса. Все команды применимы для текущей активной связки (active bundle). Следует заметить, что хотя чаще всего mpd используется для передачи IP трафика, но он поддерживает и другие (ныне не поддерживаемые) протоколы, такие как AppleTalk, IPX, и т.д. Вот почему Interface layer (чей протокол независим) стоит отдельно от IP Control Protocol (IPCP) layer который привязан к IP.
set iface addrs [!]local-ip [!]remote-ip Как правило, используется при включенном dial-on-demand (вызов по требованию). В обычной ситуации mpd конфигурирует интерфейс, используя IP-адреса, получаемые в процессе установки связи. В ситуации dial-on-demand интерфейс должен быть сконфигурирован еще до установки связи, для чего mpd нужно указать локальный и удалённый IP-адреса для настройки интерфейса. Эти адреса не обязательно должны соответствовать реальным; в действительности, оба адреса могут быть полностью произвольными. Если в процессе установки связи будут выданы другие адреса, mdp автоматически переконфигурирует интерфейс и обновит таблицу маршрутизации. Также эта команда применяется для принудительного использования заданных адресов взамен получаемых при установке связи. Это может быть полезно в отдельных случаях, например, чтобы избежать маршрутной петли из-за неверной конфигурации PPTP-сервера. В таком случае "!" указывает на принудительность установки IP-адресов.
set iface route address[/width] Связывает маршрут и связку (bundle). Когда интерфейс настроен, добавляются все дочерние маршруты. Маршрут default указывает на маршрут по умолчанию. В противном случае, маршрут это адрес сети с ее маской (т.е., 192.168.1.0/24).Если маска опущена, то подразумевается что она равна 32. Маршруты автоматически удаляются когда интерфейс отключается.
set iface mtu value Устанавливает max значение MTU связки. Не используется для установленных в это время связей; это отличает настройку этого параметра для связи и связки. Даже если установлено большее значение MTU для связки, это ограничение будет работать!
Эта команда полезна, когда вы хотите вручную ограничить MTU по другим причинам, например если вы также используете IPSec.
Значение по умолчанию 1500.
set iface idle seconds Устанавливает время простоя связки. Если за время seconds не будет передано «учетных» пакетов, то соединение разрывается. 0 значение отключает эту опцию. Когда проходит время простоя, если вызов по требованию включен, mpd перезванивает. В противном случае связь разрывается и маршруты удаляются.
По умолчанию 0
set iface session seconds Устанавливает таймаут сессии для связки. 0 откл эту опцию.
По умолчанию 0
set iface up-script script
set iface down-script script
Mpd может запускать программы пользователей, когда протоколы (IPCP/IPv6CP) установлены или разорваны.
Пример вызова up-script:
script interface proto local-ip remote-ip authname [ dns1 server-ip ] [ dns2 server-ip ]
Если статус при выходе скрипта не 0, то mpd убивает данный протокол.
Пример вызова down-script:
script interface proto local-ip remote-ip authname
set iface enable option ...
set iface disable option ...
Разрешает и запрещает различные опции связки (bundle) уровня интерфейса.
Опции могут быть:
on-demand
Заставляет интерфейс работать в режиме ВСЕГДА ВКЛЮЧЕН. Даже если событие OPEN установлено на интерфейсе, то реальное соединение будет установлено только после того как будет замечен «учетный» пакет. Кроме того, после того как время простоя закончится, соединение не потеряется, следующий трафик подымет связь снова.
По умолчанию disable.
proxy-arp
Когда включена эта опция после установки связи, IP клиента принадлежит локальной подсети, тогда для локальных машин mpd разместит в proxy ARP адрес точку доступа удаленной машины. Например, локальная машина имеет адрес 192.168.1.10, другая машина соединяется через mpd используя адрес 192.168.1.20. тогда эта команда установит proxy ARP для удаленной машины:
set iface enable proxy-arp set ipcp 192.168.1.10/32 192.168.1.20/32
По умолчанию disable.
tcpmssfix
Эта опция заставляет mpd приводить в порядок TCP данные для того чтобы размер отправленного фрагмента не превышал установленный MTU для интерфейса.
Необходимо для устранения ошибки когда роутер дропает ICMP Datagram Too Big сообщения. Без этих сообщений, звонящая машина посылает данные, это передается неуправляемому неконтролируемому роутеру а потом машине у которой MTU недостаточен для данных. Поскольку установлена опция IP Don't Fragment, эта машина возвращает сообщение ICMP Datagram Too Big звонящему и дропает пакет. Неуправляемый роутер дропает ICMP сообщение и звонящий никогда не поймет что нужно уменьшить размер фрагмента или выключить опцию IP Don't Fragment.
По умолчанию disable.
tee
Если enabled, a ng_tee(4) node будет вставлен в график связки сразу после interface node. Может быть полезен для отладки или учета трафика.
По умолчанию disable.
nat
Включает NAT для связки.
По умолчанию disable.
netflow-in
netflow-out
netflow-once (начиная с версии 5.3)
если enabled, связка будет участвовать в генерировании потока NetFlow. Подробнее смотри раздел о the NetFlow. Опция netflow-out подобна netflow-in, но генерирует поток NetFlow для исходящего трафика вместо входящего. Если включен netflow-once, пакеты будут учитаны только когда находятся в ядре.
По умолчанию disable.
ipacct
Если enabled, связка будет участвовать в IP учете с ng_ipacct node. Смотри раздел IP Accounting для дополнительной информации.
По умолчанию disable.
Аутентификация, Авторизация и Учет (AAA)
Mpd на данный момент поддерживает аутентификацию через (проверенную в этой версии) внешний скрипт, RADIUS, PAM, базу системных паролей (master.passwd), OPIE и внутренний файл mpd.secret.
Эта глава описывает команды конфигурации подсистемы аутентификации уровня LCP. Все эти команды применимы к текущему активному подключению.
set auth authname login
Эта команда устанавливает логин ассоциированный с подключением (если подключений PPP много, несмотря на то, что каждое подключение аутентифицируется отдельно, все они должны использовать один логин). login может соответствовать записи в mpd.secret. login и пароль используется когда пир требует от нас аутентифицироватся.
set auth password password
В этой команде обычно нет необходимости. Она указывает mpd не искать пароль для login в mpd.secret, а используется ему взамен. Если вы не хотите устанавливать mpd.secret и используете только дозвон, можете использовать эту команду взамен.
set auth max-logins num [CI]
Ограничение максимального числа конкурентных попыток залогинится под одним именем. Запрещено если нуль. Если присутствует аргумент CI сравнение логина будет чувствительным к регистру.
set auth acct-update seconds
Разрешает периодическое обновление данных авторизации, если значение больше нуля.
set auth timeout seconds
Устанавливает таймаут для всего процесса аутентификации. По умолчанию 40 секунд. При некоторих обстоятельствах значение должно менятся; это обычно зависит аутентифицирующейся стороны и протокола. Например, когда используется EAP с медленным RADIUS сервером это значение надо увеличить.
set auth extauth-script script set auth extacct-script script
Устаналивают имена внешних скриптов аутентификации и учета.
set auth enable option ... set auth disable option ...
Возможные опции:
internal
Разрешает аутентификацию через файл mpd.secret. По умолчанию enable.
radius-auth
Разрешает аутентификацию через RADIUS. Детальнее смотрите главу RADIUS. По умолчанию disable.
radius-acct
Разрешает учет подключений через RADIUS. Детальнее смотрите главу RADIUS. По умолчанию disable.
ext-auth
Разрешает аутентификацию посредством вызова внешнего скрипта. Этот метод может быть полноценной заменой radius-auth. Детальнее смотрите главу Внешняя аутентификация. По умолчанию disable.
pam-auth
Разрешает аутентификацию используя PAM сервис mpd. Эта опция может быть использована только с PAP. По умолчанию disable.
pam-acct
Разрешает учет ипользуя PAM сервис mpd. По умолчанию disable.
system-auth
Разрешает аутентификацию через системную базу паролей. Эта опция может быть использована с PAP и MS-CHAP, но не с CHAP-MD5. Если вы планируете использовать MS-CHAP, то пароли в master.passwd должны хранится в NT-Hashes. Вы можете разрешить это вставив :passwd_format=nth: в ваш /etc/login.conf, но вам потребуется как минимум FreeBSD 5.2. По умолчанию disable.
system-acct
Разрешает учет через utmp/wtmp.
opie
Разрешает аутентификацию используя OPIE. Если используется PAP здесь ничего не надо менять. Для всех других протоколов надо поместить имя пользователя в файл mpd.secret, но указанный пароль интепретируется как секретная фраза. По умолчанию disable.
4.10.1. RADIUS
Описывает работу аутентификации и системы учета RADIUS, они могут работать независимо. Все методы аутентификации поддерживаются в RADIUS (PAP, CHAP, MS-CHAPv1, MS-CHAPv2, EAP). Изменение пароля еще не реализовано.
set radius server name secret [ auth-port [ acct-port ]]
Устанавливает параметры RADIUS server. Множество RADIUS серверов могут быть настроены повторением этой строки, может быть задано до 10 серверов. Если один из auth/acct ports равен 0, он не будет использоваться.
set radius timeout seconds
Устанавливает время отклика RADIUS запроса.
set radius retries #retries
Установить к-во попыток RADIUS запросов.
set radius me IP|ifname|hostname
Посылает полученный IP в RAD_NAS_IP_ADDRESS параметр на сервер.
set radius v6me IPv6
Посылает полученный IP в RAD_NAS_IPV6_ADDRESS параметр на сервер.
set radius identifier name
посылает полученное имя в RAD_NAS_IDENTIFIER на сервер. Если не указано используется локальное имя компьютера.
set radius enable message-authentic
Добавляет Message-Authenticator параметр к RADIUS запросу. Message-Authenticator это HMAC-MD5 контрольная сумма всего Access-Request пакета использующего общий секрет как ключ.Это защищает RADIUS server от атак по словарю. Это необходимо при использовании EAP-RADIUS-Proxy и добавлению к запросу Mpd.
RADIUS internals
RADIUS свойства поддерживаемые mpd:
N Name Access Accounting Req Resp Req Resp 1 User-Name + + + - 2 User-Password + - - - 3 CHAP-Password + - - - 4 NAS-IP-Address + - + - 5 NAS-Port + - + - 6 Service-Type + - + - 7 Framed-Protocol + - + - 8 Framed-IP-Address - + + - 9 Framed-IP-Netmask - + + - 12 Framed-MTU - + - - 13 Framed-Compression - + - - 18 Reply-Message - + - - 22 Framed-Route - + - - 24 State + + + - 25 Class - + + - 27 Session-Timeout - + - - 28 Idle-Timeout - + - - 30 Called-Station-Id + - + - 31 Calling-Station-Id + - + - 32 NAS-Identifier + - + - 40 Acct-Status-Type - - + - 42 Acct-Input-Octets - - + - 43 Acct-Output-Octets - - + - 44 Acct-Session-Id + - + - 45 Acct-Authentic - - + - 46 Acct-Session-Time - - + - 47 Acct-Input-Packets - - + - 48 Acct-Output-Packets - - + - 49 Acct-Terminate-Cause - - + - 50 Acct-Multi-Session-Id - - + - 51 Acct-Link-Count - - + - 52 Acct-Input-Gigawords - - + - 53 Acct-Output-Gigawords - - + - 60 CHAP-Challenge + - - - 61 NAS-Port-Type + - + - 64 Tunnel-Type + - + - 65 Tunnel-Medium-Type + - + - 66 Tunnel-Client-Endpoint + - + - 67 Tunnel-Server-Endpoint + - + - 85 Acct-Interim-Interval - + - - 87 NAS-Port-Id + - + - 88 Framed-Pool - + - - 90 Tunnel-Client-Auth-ID + - + - 91 Tunnel-Server-Auth-ID + - + - 95 NAS-IPv6-Address + - + - 99 Framed-IPv6-Route - + - -
Microsoft VSA (311) 1 MS-CHAP-Response + - - - 2 MS-CHAP-Error - + - - 7 MS-MPPE-Encryption-Policy - + - - 8 MS-MPPE-Encryption-Types - + - - 10 MS-CHAP-Domain - + - - 11 MS-CHAP-Challenge + - - - 12 MS-CHAP-MPPE-Keys - + - - 16 MS-MPPE-Send-Key - + - - 17 MS-MPPE-Recv-Key - + - - 25 MS-CHAP2-Response + - - - 26 MS-CHAP2-Success - + - - 28 MS-Primary-DNS-Server - + - - 29 MS-Secondary-DNS-Server - + - - 30 MS-Primary-NBNS-Server - + - - 31 MS-Secondary-NBNS-Server - + - -
mpd VSA (12341) 1 mpd-rule - + - - 2 mpd-pipe - + - - 3 mpd-queue - + - - 4 mpd-table - + - - 5 mpd-table-static - + - - 6 mpd-filter - + - - 7 mpd-limit - + - - 8 mpd-input-octets - - + - 9 mpd-input-packets - - + - 10 mpd-output-octets - - + - 11 mpd-output-packets - - + - 12 mpd-link + - + - 13 mpd-bundle - - + - 14 mpd-iface - - + - 15 mpd-iface-index - - + - 16 mpd-input-acct - + - - 17 mpd-output-acct - + - - 154 mpd-drop-user - - - +
Для использования mpd VSA вы должны добавить словарь на ваш RADIUS server:
#---------------------------------------------------------- # dictionary.mpd VENDOR mpd 12341 ATTRIBUTE mpd-rule 1 string mpd ATTRIBUTE mpd-pipe 2 string mpd ATTRIBUTE mpd-queue 3 string mpd ATTRIBUTE mpd-table 4 string mpd ATTRIBUTE mpd-table-static 5 string mpd ATTRIBUTE mpd-filter 6 string mpd ATTRIBUTE mpd-limit 7 string mpd ATTRIBUTE mpd-input-octets 8 string mpd ATTRIBUTE mpd-input-packets 9 string mpd ATTRIBUTE mpd-output-octets 10 string mpd ATTRIBUTE mpd-output-packets 11 string mpd ATTRIBUTE mpd-link 12 string mpd ATTRIBUTE mpd-bundle 13 string mpd ATTRIBUTE mpd-iface 14 string mpd ATTRIBUTE mpd-iface-index 15 integer mpd ATTRIBUTE mpd-input-acct 16 string mpd ATTRIBUTE mpd-output-acct 17 string mpd ATTRIBUTE mpd-drop-user 154 integer mpd #----------------------------------------------------------
Mpd разрешает RADIUS серверу завершать сессию установкой специального mpd-drop-user параметра в ненулевое значение при учете start/update пакетов..
RADIUS ACL's
Mpd может использовать Access Control Lists (ACLs) от RADIUS server. Эти ACLs могут включать ipfw rules, pipes, queues и tables а также mpd internal traffic filtering/shaping/limiting. Установка двух параметров излишня. ipfw устанавливается как стандартное и универсальное решение, в то время как внутренние filter/shaper/limiter основанные на ng_bpf+ng_car работают быстрее с большим количеством активных связей.
ipfw
вы можете указать такую конфигурацию вашему RADIUS серверу:
mpd-table += "1=10.0.0.1",
mpd-table += "1=10.0.0.15",
mpd-pipe += "1=bw 10Kbyte/s",
mpd-pipe += "5=bw 20Kbyte/s",
mpd-rule += "1=pipe %p1 all from any to table\\(%t1\\) in",
mpd-rule += "2=pipe %p5 all from table\\(%t1\\) to any out",
mpd-rule += "100=allow all from any to any",
Когда MPD получит этот параметр то вызовет ipfw(8) для создания firewall rules, pipes и queues с уникальным номером начинающимся с 10000 (настраивается через 'set global start...'). В конце каждого правила будет добавлено "via ngX" для каждого конкретного интерфейса.
В результате выполнятся такие команды:
ipfw table 32 add 10.0.0.1
ipfw table 32 add 10.0.0.15
ipfw pipe 10000 config bw 10Kbyte/s
ipfw pipe 10001 config bw 20Kbyte/s
ipfw add 10000 pipe 10000 all from any to table\(32\) in via ng0
ipfw add 10001 pipe 10001 all from table\(32\) to any out via ng0
ipfw add 10002 allow all from any to any via ng0
Когда интерфейс будет отключен все правила удалятся.
Note: Как только mpd выполнит ipfw команды используя shell, спец символы shell такие как "(" and ")" должны быть отделены косой чертой.
internal (ng_bpf/ng_car)
Mpd может создать групповой механизм filtering/limiting трафика основанный на netgraph когда это установлено с помощью mpd-filter и mpd-limit RADIUS атрибутов.
mpd-filter это описание для использования в mpd-limit. mpd-filter состоит из 2 частей: match/nomatch и режим tcpdump (libpcap) для наблюдения состояния.
mpd-filter: match|nomatch {condition}
mpd-limit параметр который применяется к пакетам. Состоит из двух частей: фильтр действие.
mpd-limit: {filter} {action}
Фильтр может быть или "all" (any packet) или "fltX" (пакеты совпавшие с заданными в mpd-filter). filter: any|fltX
Действие(action) может быть : "" (ничего не делать только считать), "pass" (остановить обработку и пропустить пакет), "deny" (остановить обработку и дропнуть пакет), "rate-limit" (Cisco-like rate-limit), "shape" (простой RED шейпинг). Действие "rate-limit" и "shape" могут иметь дополнительный суффикс "pass" для остановки обработки после этого действия.
action: | pass | deny | rate-limit {rate(bits/s)} [{normal burst(bytes)} [{extended burst(bytes)}]] [pass] | shape {rate(bits/s)} [{burst(bytes)}] [pass]
Например вы можете задать такую RADIUS конфигурацию:
mpd-filter += "1#1=nomatch src net 10.0.0.0/24",
mpd-filter += "1#2=match src net 10.0.0.0/10",
mpd-filter += "2#1=match dst net 10.0.0.0/16",
mpd-filter += "2#2=match dst net 11.0.0.0/8",
mpd-limit += "in#1=flt1 pass",
mpd-limit += "in#2=flt2 shape 64000 4000 pass",
mpd-limit += "in#3=all deny",
mpd-limit += "out#1=flt2 pass",
mpd-limit += "out#2=all rate-limit 1024000 150000 300000",
mpd-limit += "out#3=all pass",
В результате, для реализации фильтрации трафик будет создан один ng_bpf node и несколько (в нашем примере 2) ng_car nodes для шейпования трафика и rate-limiting. Входящий трафик с 10.0.0.0/10 за исключением 10.0.0.0/24 будет пропущен, трафик в 10.0.0.0/16 и 11.0.0.0/8 будет обрезан до 64Kbits/s остальной заблокирован. Исходящий трафик в 10.0.0.0/16 и 11.0.0.0/8 будет пропущен, остальной будет ограничен до 1024Kbit/s.
4.10.2. External authentication
Mpd поддерживает аутентификацию и учет с помощью внешних скриптов. Пути к этим скриптам должны быть заданы с помощью set auth extauth-script ... и set auth extacct-script ... При вызове extauth/extacct скриптов устанавливаются требуемые параметры на stdin:значение пар оканчивается пустой строкой, а ответ должен быть сгенерирован в том же формате на stdout. Поддерживаемые параметры:
Name Access Accounting Req Resp Req Resp USER_NAME + + + - AUTH_TYPE + - - - USER_PASSWORD + + - - USER_NT_HASH - + - - USER_LM_HASH - + - - LINK + - + - NAS_PORT + - + - NAS_PORT_TYPE + - + - CALLING_STATION_ID + - + - CALLED_STATION_ID + - + - SELF_NAME + - + - PEER_NAME + - + - SELF_ADDR + - + - PEER_ADDR + - + - PEER_PORT + - + - PEER_MAC_ADDR + - + - PEER_IFACE + - + - PEER_IDENT + - + - RESULT - + - - FRAMED_IP_ADDRESS - + + - PRIMARY_DNS_SERVER - + - - SECONDARY_DNS_SERVER - + - - PRIMARY_NBNS_SERVER - + - - SECONDARY_NBNS_SERVER - + - - FRAMED_ROUTE - + - - FRAMED_IPV6_ROUTE - + - - FRAMED_MTU - + - - FRAMED_COMPRESSION - + - - FRAMED_POOL - + - - SESSION_TIMEOUT - + - - IDLE_TIMEOUT - + - - ACCT_INTERIM_INTERVAL - + - - ACCT_INTERIM_LIM_RECV - + - - ACCT_INTERIM_LIM_XMIT - + - - REPLY_MESSAGE - + - - MS_CHAP_ERROR - + - - IFACE - - + - IFACE_INDEX - - + - BUNDLE - - + - ACCT_STATUS_TYPE - - + - ACCT_SESSION_ID + - + - ACCT_MULTI_SESSION_ID - - + - ACCT_LINK_COUNT - - + - ACCT_TERMINATE_CAUSE - - + - ACCT_SESSION_TIME - - + - ACCT_INPUT_OCTETS - - + - ACCT_INPUT_PACKETS - - + - ACCT_OUTPUT_OCTETS - - + - ACCT_OUTPUT_PACKETS - - + - MPD_RULE - + - - MPD_PIPE - + - - MPD_QUEUE - + - - MPD_TABLE - + - - MPD_TABLE_STATIC - + - - MPD_FILTER - + - - MPD_LIMIT - + - - MPD_INPUT_OCTETS - - + - MPD_INPUT_PACKETS - - + - MPD_OUTPUT_OCTETS - - + - MPD_OUTPUT_PACKETS - - + - MPD_DROP_USER - - - +
Параметр USER_PASSWORD доступны в Access-Request только при использовании PAP auth. Параметры USER_NT_HASH и USER_LM_HASH используются в Access-Reply только при MS-CHAP auth. В ответ скрипт может установить любую комбинацию параметров. Единственный НЕОБХОДИМЫЙ параметр в Access-Response это RESULT. RESULT должен быть: SUCCESS, UNDEF или FAIL. RESULT UNDEF означает что mpd должен аутентифицировать пользователя самостоятельно используя USER_PASSWORD/USER_NT_HASH параметры заданные скриптом. Для описания большинства параметров обратите внимание на их RADIUS аналоги.
Traffic accounting
Mpd поддерживает несколько методов учета трафика
NetFlow
NetFlow протокол экспорта собранного трафика из UDP пакетов. NetFlow использует ng_netflow(4) node. Для включения NetFlow на определенном интерфейсе должны использоватся опции netflow-in или netflow-out. Лучше всего включить netflow на каждом интерфейсе только для одного направления (входящий или исходящий трафик)
Note: Netflow работает как daemon, и должен быть запущен до того как будет подключена первая связка.
Note: Только для версии >=FreeBSD 6.0-RELEASE.
set netflow peer ip port Устанавливает адрес назначения и порт, куда будут отосланы NetFlow datagrams. Необходима для работы NetFlow.
set netflow self ip port Устанавливает локальный адрес и порт, с которого слать netflow пакеты.
set netflow timeouts inactive active Изменяет значения активного и неактивного таймаутов. Подробнее см. Манн ng_netflow(4).
set netflow node nodename Использовать созданный ng_netflow(4) node вместо создания нового.
set netflow hook number Использовать ng_netflow(4) node's hooks начиная с определенного номера. Более детально о именах hooks, см ман ng_netflow(4) .
IP Accounting
IP Accounting сохраняет информацию о трафике в буфере ядрa. Этот буфер периодически считывается и очищается другими программами. IP Accounting требует ng_ipacct node. Для включения IP Accounting на интерфейсе должна быть установлена опция ipacct. По умолчанию режим verbose="no"
Accounting Update
Mpd поддерживает общую статистику трафика в каждом accounting Update/Stop запросе radius-acct или ext-acct.
Для radius-acct доступны такие опции:
Acct-Input-Packets 32bit input packets counter,
Acct-Output-Packets 32bit output packets counter,
Acct-Input-Octets lower 32bit of input bytes counter,
Acct-Output-Octets lower 32bit of output bytes counter,
Acct-Input-Gigawords higher 32bit of input bytes counter,
Acct-Output-Gigawords higher 32bit of output bytes counter.
Для ext-acct it provides:
ACCT_INPUT_PACKETS 64bit input packets counter,
ACCT_OUTPUT_PACKETS 64bit output packets counter,
ACCT_INPUT_OCTETS 64bit input bytes counter,
ACCT_OUTPUT_OCTETS 64bit output bytes counter.
NOTE: так как Accounting Update реализован на link layer то он считает трафик через физический канал (без издержек). То есть подсчитывает трафик после сжатия шифрования и учета multilink.
Typed Accounting Update
В дополнение к стандартному Accounting Update stats, mpd поддерживает учет трафика по типу. Тип трафика задается используя 3й компонент mpd-limit(например в примере ниже это Local и Biz).
В запросе на учет mpd может отправлять такие атрибуты для radius-acct:
mpd-input-packets traffic type : 64bit input packets counter,
mpd-output-packets traffic type : 64bit output packets counter,
mpd-input-octets traffic type : 64bit of input bytes counter,
mpd-output-octets traffic type : 64bit of output bytes counter,
для ext-acct:
MPD_INPUT_PACKETS traffic type : 64bit input packets counter,
MPD_OUTPUT_PACKETS traffic type : 64bit output packets counter,
MPD_INPUT_OCTETS traffic type : 64bit input bytes counter,
MPD_OUTPUT_OCTETS traffic type : 64bit output bytes counter.
NOTE: так как Typed Accounting Update работает на interface layer вместо уровня связи как обычный Accounting Update, одни и те же данные будут переданы по всем связям в связке. Немного извратившись можно не учитывать один и тот же трафик в мультилинке.
Например:
mpd-filter += "1#1=match dst net 10.0.0.0/8",
mpd-limit += "in#1#Local=flt1 pass",
mpd-limit += "in#2#Biz=all shape 64000 4000",
заставит mpd разделить трафик на 2 группы: "Local" и "Biz". Трафик от клиента к 10.0.0.0/8 будет помечен как "Local", весь остальной входящий трафик после шейпера как "Biz". В учетном запросе mpd передаст RADIUS что-то вроде:
mpd-input-packets = Local:213213
mpd-input-octets = Local:32132132
mpd-input-packets = Biz:21321
mpd-input-octets = Biz:3213213
для упрощения AAA может возвращать mpd особый тип трафика используя RADIUS. Необходимый тип трафика может быть задан используя mpd-input-acct/mpd-output-acct.
IP address pools
Mpd поддерживает динамическое управление адресным пулом. Когда юзер аутентифицируется и у него нет статического адреса, он будет назначен из пула. Для того что бы это работало вам нужно создать пулы с помощью 'set ippool add ...' и определить какой пул должен использоваться с 'set ipcp ranges ... ippool ...' , radius-auth Framed-Pool attribute или ext-auth FRAMED_POOL attribute.
set ippool add pool first last Создает новый пул IP адресов, если не создан, и добавляет указанный диапазон адресов.
Network Address Translation (NAT)
NAT основывается на ng_nat(4) node. Для включения на некотором интерфейсе должна использоваться опция nat.
Note: ng_nat node доступна в >=FreeBSD 6.0-RELEASE. Некоторые опции такие как установка адреса назначения доступны в более поздних версиях.
set nat address ip Устанавливает алиасы IP адресов. Если не задано будет использоваться IP интерфейса.
set nat target ip Устанавливает IP адреса назначения для неопознанных входящих пакетов. Если не задано пакеты не будут переводится.
set nat enable option ...
set nat disable option ...
Вкл и Откл опции nat .
Доступные опции:
log Включает логирование. По умолчанию отключено
incoming Разрешает проход всех неизвестных входящих пакетов. По умолчанию enable.
same-ports При маскарадинге пакетов использовать тот же порт на который он пришел. По умолчанию enable.
unreg-only Включает маскарадинг только для неопознанных сетей. По умолчанию disable.
З.Ы. Если есть рабочие конфиги реализации нат поделитесь
Рабочий конфиг mpd5 сервера с 3-мя внешними PPPoE линками (на них включен nat) и внутренним VPN-сервером (отдающим стату по NetFlow в UTM_core).
joe# uname -a: FreeBSD joe 7.2-RELEASE-p4 FreeBSD 7.2-RELEASE-p4 #1: Sun Oct 18 17:04:17 NOVST 2009 @joe:/usr/obj/usr/src/sys/joe10 i386
- cat mpd.conf
- MPD configuration file
- This file defines the configuration for mpd: what the
- bundles are, what the links are in those bundles, how
- the interface should be configured, various PPP parameters,
- etc. It contains commands just as you would type them
- in at the console. Lines without padding are labels. Lines
- starting with a "#" are comments.
- $Id: mpd.conf.sample,v 1.45 2007/11/26 20:41:37 amotin Exp $
-
startup:
# configure mpd users # Задаем пароль для доступа в web-intarface # т.е меняем password на свой пароль set user admin password 1234 # set user password cancer # configure the console set console self 127.0.0.1 5005 set console open # configure the web server
- set web self 0.0.0.0 5006
- set web open
# куда лить netflow set netflow peer 127.0.0.1 9996 set netflow timeouts 30 30
default:
load pppoe1 load pppoe2 load pppoe3 load pptp_server
pppoe1:
- PPPoE client: only outgoing calls, auto reconnect,
- ipcp-negotiated address, one-sided authentication,
- default route points on ISP's end
create bundle static B1 set iface route default set ipcp ranges ip1 gw1 set iface enable nat set iface enable tcpmssfix create link static L1 pppoe set link action bundle B1 set auth authname login set auth password 1234 set link max-redial 0 set link mtu 1492 set link keep-alive 10 60 set link enable multilink set pppoe iface vr0 set pppoe service "" open
pppoe2:
- PPPoE client: only outgoing calls, auto reconnect,
- ipcp-negotiated address, one-sided authentication,
- default route points on ISP's end
create bundle static B2 set ipcp ranges ip2 gw2 set iface enable nat set iface enable tcpmssfix create link static L2 pppoe set link action bundle B2 set auth authname login2 set auth password 1234 set link max-redial 0 set link mtu 1492 set link keep-alive 10 60 set link enable multilink set pppoe iface vr0 set pppoe service "" open
pppoe3:
- PPPoE client: only outgoing calls, auto reconnect,
- ipcp-negotiated address, one-sided authentication,
- default route points on ISP's end
create bundle static B3 set ipcp ranges ip3 gw3 set iface enable nat set iface enable tcpmssfix create link static L3 pppoe set link action bundle B3 set auth authname login3 set auth password 1234 set link max-redial 0 set link mtu 1492 set link keep-alive 10 60 set link enable multilink set pppoe iface vr0 set pppoe service "" open
pptp_server:
# Определяем диапазон выдаваемых IP удалённым клиентам # у меня 3 пула. set ippool add pool1 192.168.117.2 192.168.117.254 set ippool add pool2 192.168.118.2 192.168.118.254 set ippool add pool3 192.168.119.2 192.168.119.254 create bundle template B set iface idle 0 set iface enable tcpmssfix set ipcp yes vjcomp set iface enable netflow-in set iface enable netflow-out # IP адрес сервера, который мы будем выдавать клиентам в качестве шлюза # для их vpn-соединения set ipcp ranges 192.168.117.1/32 ippool pool1 # Если есть свой ДНС сервер, то меняем IP адрес set ipcp dns ip-dns'a
- Enable Microsoft Point-to-Point encryption (MPPE)
set bundle enable compression set ccp yes mppc set mppc yes compress e40 e56 e128 stateless
create link template L pptp set link enable multilink set link yes acfcomp protocomp set link action bundle B set link no pap chap set link enable chap set link enable chap-msv1 set link enable chap-msv2 set link mtu 1460 set link keep-alive 10 75 load radius
- Configure PPTP and open link
# Тут указываем IP сетевой карты которая смотрит в локалку set pptp self Ip-сетевухи set link enable incoming
radius:
- You can use radius.conf(5), its useful, because you can share the
- same config with userland-ppp and other apps.
set radius config /etc/radius.conf
- or specify the server directly here
set radius server localhost passwd 1812 1813 set radius retries 3 set radius timeout 3
- send the given IP in the RAD_NAS_IP_ADDRESS attribute to the server.
set radius me 127.0.0.1
- send accounting updates every 5 minutes
set auth acct-update 300
- enable RADIUS, and fallback to mpd.secret, if RADIUS auth failed
set auth enable radius-auth
- enable RADIUS accounting
set auth enable radius-acct
- protect our requests with the message-authenticator
set radius enable message-authentic
Control console
Настройка доступа к консоли через телнет.
set console open Открывает консоль.
set console close Закрывает консоль. Активная сессия не закрывается.
set console self ip [ port ] Устанавливает адрес и порт на котором доступна консоль . При изменении параметра необходимо перегрузить консоль. По умолчанию '127.0.0.1 5005'.
set console enable option ...
set console disable option ...
Устанавливает разные опции консоли
logging Включает запись сообщений входа на консоли. По умолчанию enable для stdout и disable для остальных.
Web server
Mpd поддерживает настройку через веб интерфейс.
set web open Открывает web сервер.
set web close Закрывает web сервер
set web self ip [ port ] Устанавливает адрес и порт на котором доступен веб сервер. При изменении параметра необходимо перегрузить веб сервер. По умолчанию '127.0.0.1 5006'.
set web enable option ...
set web disable option ...
Устанавливает разные опции сервера.
Enable и disable включает и выключает определенную опцию.
Доступные опции:
auth
Включает авторизацию на веб сервере. По умолчанию enable. Можете устанавливать параметры через веб. Формат установки параметров: text/html (/cmd?command1&...) или text/plain (/bincmd?command1&...).
Типы устройств
Модемные команды
Этот раздел описывает команды, специфичные для модемного типа подключений. Эти команды применимы к текущему активному соединению и действительны только, если текущее активное подключение имеет тип modem.
set modem device devname
Модемные подключения работают через последовательные порты. Эта команда сообщает mpd какой последовательный порт необходимо использовать для этого подключения. Имя устройства devname должно представлять из себя путь до этого устройства, например /dev/cuad0.
set modem var $variable string
Устанавливает строковый тип переменной $variable в скрипте chat. Больше информации о переменных chat смотрите в разделе Chat скрипты.
set modem speed speed
Устанавливает изначальную скорость последовательного порта при открытии последовательного устройства, например, 9600, 57600, 115200. Помните, что вы всегда можете поменять скорость последовательного порта позже, вне chat-скрипта.
set modem script connect-script
Сообщает mpd какой именно chat-скрипт запустить, чтобы инициировать PPP-соединение для этого подключения. Скрипт соединения должен отправить к метке в mpd.script. Mpd перейдет к этой метке после открытия устройства последовательного порта. Если скрипт соединения не указан явно, тогда фаза соединения chat пропускается (например если у вас прямое нуль-модемное соединение).
set modem idle-script idle-script
Сообщает mpd, что нужно делать с последовательным портом, при отсутствии подключения.Если idle-script не установлен явно, то mpd оставит последовательный порт закрытым при неустановленном соединении. В противном случае, при разрыве соединения mpd запускает указаный idle-script. Если скрипт возвращает ошибку, то mpd его перезапускает.
Если же скрипт возвращает код успешного запуска, то mpd проверяет содержимое chat-переменной $IdleResult, чтобы определить дальнейшие действия. Если оно (содержимое chat-переменной $IdleResult) равно answer, то mpd предполагая, что входящий звонок отвечен, немедленно начнет PPP-переговоры. Если же оно (содержимое chat-переменной $IdleResult) равно ringback, то mpd закроет последовательный порт, откроет его, и инициирует исходящее соединение в обычном режиме (т.е. используя скрипт подключения).
Если $IdleResult содержит что-то иное или вообще не установлена, тогда mpd работает так, как если бы произошла ошибка и просто перезапускает скрипт.
set modem watch +/-signal ...
Mpd обычно отслеживает сигнал наличия несущей на последовательном порту и прекращает соединение в случае потери сигнала. Можно отключить такое поведение командой set modem watch -cd. Также mpd может следить и за DSR-сигналом (сигнал о готовности принимать информацию), но по умолчанию это выключено. Для слежения за DSR-сигналом используйте set modem watch +dsr.
Команды Netgraph-устройств
Этот раздел описывает команды, специфичные к подключениям типа netgraph. Эти команды применимы к текущему активному подключению и действительны, только если подключение имеет тип ng.
Помните, что этот тип устройств не имеет прямой возможности определить разрыв на физическом уровне (т.е. что должно быть аналогично потере несущего сигнала), кроме как получить ошибку записи. Один из способов достижения этого гарантировать, что при падении физического слоя произойдет разрыв netgraph-крючка.
set ng node nodepath
set ng hook hook
Эти команды описывают к какому узлу netgraph, и к какому крючку этого узла предполагается подключить mpd. Узел находится по абсолютному пути адресов netgraph и должен содержать свободный крючок hook. Обе эти команды необходимы.
Крючок должен быть способен подключаться напрямую к соединительному крючку ng_ppp(3) узла netgraph. То есть, он должен быть подготовлен к передаче и приёму PPP-кадров, начиная с адресных и контрольных полей (пока не сжатых) с последующими по PPP-протоколу цифровыми и информационными полями, не содержащими контрольных сумм.
Команды устройств TCP
Этот раздел описывает команды, специфичные к TCP-подключениям. Эти команды применимы к текущему, активному подключению и действительны только, если текущее активное подключение имеет тип tcp.
Вследствие ограничений модуля ng_ksocket этот тип устройств имеет две особенности: когда отсутствуют свободные входящие линии, новое соединение в любом случае будет принято, а потом сброшено вместо того, чтобы просто не принимать его. Статус соединения TCP не мониторится, поэтому нужно использовать set link keep-alive, чтобы определять битое соединение.
set tcp self ipaddr [ port ]
Устанавливает локальный IP-адрес и порт для соединений TCP. Поле порта необходимо для того, чтобы принять входящее соединение.
set tcp peer ipaddr [ port ]
Устанавливает клиентский порт и IP-адрес для TCP-соединения. Адрес и порт необходимы для исходящих соединений. Для входящих же соединений это необязательные параметры, кроме возможности предовратить несанкционированные подключения.
Команды устройств UDP
Этот раздел описывает команды, специфичные к UDP-подключениям. Эти команды применимы к текущему, активному подключению и действительны только, если текущее активное подключение имеет тип udp.
При использовании этого типа подключений рекомендуется использовать команду set iface mtu, дабы избежать фрагментации IP-пакетов и благодаря этому улучшить использование канала.
Помните, технически этот тип устройства не совсем верен потому, что PPP-соединения не позволяют перестраивать кадры, а UDP-пакеты всё ещё могут быть доставлены беспорядочно. Поэтому, если вы используете этот тип соединения, то не должны использовать многоканальный PPP, PPP-шифрование или PPP-сжатие. Иначе, беспорядочные кадры будут сброшены и приведут к потерям производительности.
set udp self ipaddr [ port ]
Устанавливает локальный IP-адрес для UDP-соединений. Если ничего не указано, будет использован любой подходящий локальный IP-адрес. Явное указание порта необходимо для того, чтобы принимать входящие соединения.
set udp peer ipaddr [ port ]
Устанавливает порт и IP-адрес для UDP-соединения. Явное указание адреса и порта необходимо для организации исходящих соединений. Для входящих же соединений это необязательные параметры, кроме возможности предовратить несанкционированные подключения.
Команды устройств PPTP
Этот раздел описывает команды, специфичные к PPTP-подключениям. Эти команды применимы к текущему, активному подключению и действительны только, если текущее активное подключение имеет тип pptp
Проще всего понять PPTP-протокол, как ещё один тип канального уровня, где физическим уровнем является IP-соединение. Так, например, вместо изменения телефонного номера для дозвона, необходимо изменить IP-адрес соединения. Всё, что выше канального уровня работает точно также. Таким образом PPTP позволяет туннелировать PPP-кадры поверх IP.
Помните, что PPTP-подключения инициируются TCP соединением от одной машины к другой и серверная сторона обычно слушает 1723 порт TCP (это порт по умолчанию для команд ниже). PPTP также использует протокол GRE, имеющий 47 номер протокола IP. Ваш брэндмауер должен быть настроен для разрешения данного типа пакета.
Так выглядит полная топология PPTP-сети:
клиент <- некий тип подключения -> PAC <- PPTP туннель -> PNS
PAC это повторитель физического уровня, который принимает PPP-соединение некого типа и направляет его в PNS, используя PPTP-протокол. PNS это конечная точка PPP, которая принимает и обрабатывает PPP кадры через PPTP-туннель.
В простейшом случае, когда физическое преобразование не требуется топология может быть упрощена:
клиент (эмулятор PAC) <- PPTP туннель -> PNS
Mpd может работать и в PAC и в PNS режимах. В роли PAC mpd поддерживает как простой режим PAC-эмулятора, так и полную PAC-топологию. Полноценный PAC может быть установлен объединением двух физических устройств, используя функцию повторителя mpd.
set pptp self ipaddr [ port ]
Устанавливает локальный порт и IP-адрес для PPTP соединения.
set pptp peer ipaddr [ port ]
Устанавливает клиентские порт и IP-адрес для PPTP-соединения. Эта команда применима как к входящим, так и к исходящим соединениям. Для исходящего соединения эта команда необходима для указания цели подключения. Для входящих соединений эта команда необязательна; так, если её не указать явно, то mpd будет принимать входящее соединение от любого хоста. Иначе соединения будут разрешены только с указанного IP-адреса (и порта).
set pptp callingnum number
set pptp callednum number
Устанавливает вызывающий и вызываемый телефонные номера, для использования при PPTP-соединении. Большинство VPN-приложений игнорируют эти установки, но в некоторых случаях требуется реальный телефонный номер. Значение по умолчанию - пустая строка.
set pptp enable option ...
set pptp disable option ...
Включает или выключает дополнительные опции PPTP-устройства, для данного подключения.
Поддерживаются следующие опции:
outcall
В PPTP, каждое PPP-соединение меж двумя IP-хостами (их может быть несколько и их не следует путать с единственным TCP-соединением между двумя хостами), инициируется либо как входящий, либо как исходящий вызов. Это позволяет делать исходящий телефонный вызов (при помощи PNS) через сервер удаленного доступа (PAC), а также в более общем случае направить входящий телефонный вызов от сервера доступа (PAC) к удаленному PPTP-серверу (PNS).
Когда эта опция включена, mpd будет инициировать исходящие вызовы (PNS); иначе mpd будет инициировать входящие вызовы (PAC). Хотя по всему кажется, что конфигурация с входящими вызовами более правильная, по умолчанию установлены исходящие вызовы, так как это согласуется с поведением PPTP-клиента от Майкрософт.
Mpd принимает оба типа входящих PPTP-соединений.
delayed-ack
Включает таймаут перед отправкой флагов ACK. Это может улучшить пропускную способность на хороших каналах.
По умолчанию включена.
always-ack
Всегда включать флаг ACK в пакет, даже если он уже был послан. Это может улучшить пропускную способность на плохих каналах.
По умолчанию выключена.
windowing
Включает оконный механизм, указанный протоколом. Его выключение влечет за собой нарушение mpd PPTP-протокола и может ввести в заблуждение некоторые PPTP-клиенты, но обычно означает лучшую производительность. Оконный механизм - ошибка проектирования в PPTP-протоколе; L2TP, преемник PPTP, избавлен от него.
По умолчанию выключен
Помните, что если вы соединяетесь с NT-сервером, то ваше имя при аутентификации должно включать доменное имя.
Например:
set auth authname "DOMAIN\\username"
Как обновить клиенты Windows 95 и 98, чтобы работали правильно, смотрите VPN Update for Windows 98 and Dial-Up Networking 1.3 Available
Команды устройств L2TP
Этот раздел описывает команды, специфичные к L2TP-подключениям. Эти команды применимы к текущему, активному подключению и действительны только, если текущее активное подключение имеет тип l2tp
Протокол L2TP использует UDP-дэйтаграммы по порту 1701 (и это порт по умолчанию для команд ниже) для создания и поддержки виртуальных туннелей между IP-пирами. В этом туннеле может быть одно или больше независимых PPP-соединений (сессий).
Полная топология сети L2TP выглядит так:
клиент <- некое подключение -> LAC <- L2TP туннель -> LNS
LAC - это повторитель физического уровня, который получает PPP-соединение и переправляет его к LNS, используя протокол L2TP. LNS - конечная точка PPP, которая получает и обрабатывает PPP-кадры через L2TP-туннель.
В простейшем случае, когда физическое преобразование не требуется, топология может быть упрощена:
клиент (LAC-эмулятор) <- L2TP-туннель -> LNS
Mpd может работать в LAC и LNS-режимах. В режиме LAC mpd поддерживает как упрощенный вариант LAC-эмулятора, так и полную LAC-топологию. Полноценный LAC может быть установлен объединением двух физических устройств, используя функцию повторителя mpd.
Виндовый L2TP-клиент использует IPSec-шифрование для дополнительной защиты туннеля. Поэтому, чтобы его подключить к MPD-роутеру требуется либо настроить на нем IPSec, либо выключить IPSec в Windows установкой ключа реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RasMan\Parameters\ProhibitIpSec [DWORD] в единицу.
set l2tp self ipaddr [ port ]
Устанавливает локальный IP-адрес и порт для L2TP-соединения. Существует известная ошибка. Если данная опция не установлена явно, то во время принятия входящего соединения роутером с несколькими IP-адресами, клиенты не подключаются к ближайшему от роутера адресу.
set l2tp peer ipaddr [ port ]
Устанавливает порт и IP-адрес пира для L2TP-соединения. Эта команда применима как к входящим, так и к исходящим соединениям. Для исходящего соединения эта команда необходима для указания цели подключения. Для входящих соединений эта команда необязательна; так, если её не указать явно, то mpd будет принимать входящее соединение от любого хоста. Иначе соединения будут разрешены только с указанного IP-адреса (и порта).
set l2tp hostname name
Устанавливает локальное имя в L2TP-туннеле. Серверной сторона поддерживает только одно, уникальное имя хоста, для каждой пары IP-адресов состояния listen, (set l2tp self ...) серверу, и пиру (set l2tp peer ...). Если указано больше одного имени хоста, то для всех входящих соединений будет использовано только первое подходящее.
set l2tp secret secret
Устанавливает секретную фразу для L2TP. Испозьзуется для аутентификации туннельного соединения и шифрования контрольных пар. Серверной сторона поддерживает только одну, уникальную секретную фразу, для каждой пары IP-адресов состояния listen, (set l2tp self ...) серверу, и пиру (set l2tp peer ...). Если указано больше одной парольной фразы, то для всех входящих соединений будет использовано только первая подходящая.
ПОМНИТЕ: Эти опции не связаны с обычной PPP-аутентификацией. Клиенты Windows не поддерживают туннельной аутентификации.
set l2tp callingnum number
set l2tp callednum number
Устанавливает вызывающий и вызываемый телефонные номера, для использования при L2TP-соединении. Большинство VPN-приложений игнорируют эти установки, но в некоторых случаях требуется реальный телефонный номер.
По умолчанию - пустая строка.
set l2tp enable option ...
set l2tp disable option ...
Включает или выключает дополнительные опции L2TP-устройства, для данного подключения.
Поддерживаются следующие опции:
outcall
Внутри L2TP-туннеля, каждое PPP-соединение (их может быть несколько), может быть инициировано либо как входящий, либо как исходящий вызов. Это позволяет делать исходящие вызовы (с помощью LNS) через сервер удаленного доступа (LAC), а также в более общем случае направлять входящий телефонный вызов от сервера доступа (LAC) удаленному L2TP-серверу (LNS).
При включенной опции, mpd будет инициировать исходящие вызовы (LNS), иначе mpd будет инициировать входящие вызовы (LAC).
По умолчанию - выключена.
hidden
Когда установлена секретная фраза для L2TP-туннеля, есть возможность скрыть (зашифровать) некоторые контрольные пакеты данных, для большей безопасности.
По умолчанию - выключена.
length
По умолчанию L2TP использует поле Lenght в заголовке для контрольных пакетов, но не для пакетов с данными. Эта опция включает поле Lenght в заголовок пакетов данных. Эта возможность может быть полезна в подключениях (where packets padding may happend). Выключение этой опции уменьшает накладные расходы в два байта на пакет.
По умолчанию - выключена.
dataseq
По умолчанию L2TP использует поля SEQ для контрольных пакетов, но не требует их для пакетов данных. Эта опция включает поля SEQ для пакетов с данными. Опция может быть полезна на подключениях, где пакеты могут быть не по порядку, но и она неудовлетворительна. Её выключение уменьшает накладные расходы в 4 байта на пакет.
По умолчанию - включена.
Команды устройств PPPoE
Этот раздел описывает команды, специфичные к PPPoE-подключениям. Эти команды применимы к текущему, активному подключению и действительны только, если текущее активное подключение имеет тип pppoe.
Для работы PPPoE необходимо 2 параметра: имя используемого Ethernet-интерфейса и имя сервиса, который выдается провайдером. Если вам не выдали имя сервиса, тот в большинстве случаев подходит пустая строка (по умолчанию).
set pppoe iface interface-name
Устанавливает имя используемого Ethernet-интерфейса. PPPoE не влияет на обычную работу интерфейса.
set pppoe service service-name
Устанавливает имя сервиса PPPoE. Имя со значением "*" на подключении с разрешенными входящими соединениями, будет принимать запросы с любым установленным именем.
Начиная с FreeBSD 6.3-STABLE/7.0-STABLE от 2008-01-30 возможно использование "AC-Name\Service-Name" синтаксиса запроса доступа для исходящих соединений.
По умолчанию - "*".
set pppoe acname name
Устанавливает имя сервиса доступа PPPoE которое будет отослано клиенту. Если не задано, будет использоваться локальное имя компьютера.
Chat скрипты
Mpd включает в себя мощный язык chat-скриптов для использования с подключениями типа modem, т.е. асинхронными последовательными портами. Язык интерпретируется, исполняется динамически, полностью поддерживает обработку управления событиями с таймаутами и проверкой шаблонов регулярных выражений.
Многое, что описано ниже, проще понять в mpd.script, который поставляется вместе с mpd.
Формат файла скрипта и его исполнение
Синтаксис mpd.script такой же, что и у других конфигурационных файлов mpd. Строчки, начинающиеся со значка решетки, игнорируются. Метки используют свою строку, начинаются они с первого столбца и заканчиваются символом двоеточия.
Команды chat отделяются символами табуляции и пишутся в одну строчку.
Команды выполняются по порядку. Выполнение происходит без остановки до тех пор, пока одна из команд не выдаст ошибку, либо не встретится одна из команд:
- success - скрипт возвращает код удачного выполнения.
- failure - скрипт возвращает ошибку.
- wait - выполнение скрипта остановилось, вследствие возникновения события.
События описаны в следующей секции
События
Событие, это либо истечение времени по таймеру, либо соответствие входных данных некоторому шаблону. События, которые ещё не произошли называются ожидаемыми. Ожидаемые события создаются таймером и соответствуют командам.
Каждое ожидаемое событие имеет соответственную метку события(называемую целевой). Когда событие происходит, выполнение возобновляется с целевой метки. События возникают только в процессе выполнения команды wait.
События сгруппированы в именованные структуры. События из той же структуры обычно связаны меж собой, в том смысле, что они дают различные результаты в той же самой ситуации.
Структура ожидаемых событий может быть отменена явно до того, как она случится, командой cancel. Все события в данной структуре отменятся.
Есть другой способ косвенной отмены ожидаемых событий, когда происходит любое событие из данной структуры. Выполнение возобновляется с целевой метки, соответствующей данному событию и все другие события в данной структуре отменяются.
События таймера
События таймера создаются с помощью команды timer. Событие таймера возникает, когда проходит указанное команде время, начиная с момента выполнения выражения timer. Дальнейшее выполнение продолжается, начиная с целевой метки, указанной командой timer.
События таймера (как и все события) могут выполняться только в период выполнения команды wait.
События соответствия
События соответствия создаются командами match и regex. Событие соответствия возникает, когда шаблон указанный команде match или regex совпадает с данными на входе. Символы могут быть только введены в процессе команды wait. Для сверки шаблона первый совпадающий символ шаблона должен быть прочитан после того как событие было создано (т.е. в процессе последующей команды wait).
Когда шаблон совпадает, исполнение chat-скрипта продолжает выполняться с целевой метки. Когда множество шаблонов соответствуют одному и тому же входному символу, mpd выбирает первый соответствующий.
Шаблон, это либо простой текст, либо расширенное регулярное выражение (смотри ниже).
Структуры
Структура, это набор ожидающих таймера и/или соотвествующих событий. Когда происходит любое из событий, или в процессе выполнения надлежащих команд отмены, все события данной структуры отменяются.
Множественные структуры могут быть активированы в любое время. Возникновение события в пределах одной структуры никак не повлияет на события из другой.
Специальные структуры и цели
Команды timer, match и regex могут указывать (без аргументов) структуру по умолчанию. Эта структура точно такая же, как и другие, кроме того, что она автоматически отменяется после любого события. Также она может быть именована явно пустой строкой (т.е. "").
Команды timer, match и regex могут указывать (без аргументов) цель по умолчанию. Эта цель, чьё имя также является пустой строкой, имеет специальное свойство всегда ссылаться на "выражение следующее за выражением wait ". Так получается, что если цель любого события есть цель по умолчанию, то возникновение данного события лишь вызовет возобновление запуска с выражения следующего за выражением wait.
И наконец, когда всё используется с командой cancel, все структуры (т.е. все ожидаемые события) будут отменены.
Переменные
Переменные содержат простые строки. Все они глобальные и бывают двух типов: временные и постоянные. Постоянные переменные сохраняются в течении множества вызовов скрипта chat, в отличие от временных переменных, которые очищаются каждый раз, когда скрипт заканчивает работу.
Переменные обозначаются значком доллара с последующей буквой, далее могут быть использованы буквы, цифры и знаки подчеркивания. Если первая буква переменной имеет верхний регистр, то это постоянная переменная; иначе временная. Имя переменной может также быть заключено в фигурные скобки.
Примеры:
$initString $My_variable_234 ${i_am_safely_followed_by_a_letter}
Специальные переменные
У нижеперечисленных переменных своё значение в chat-скриптах:
$Login
Имя, используемое для авторизации при входе, установленное командой set auth authname.
$Password
Пароль к имени $Login.
$modemDevice
Используемое устройтво последовательного порта, установленного командой set modem device command, например, /dev/cuad0. Изменение этой строчки не изменит используемого порта.
$Baudrate
Всегда равен текущей скорости соединения (например, 57600). Эта переменная с возможностью чтения/записи; её изменение изменит скорость. Попытка установить неверную скорость завершит скрипт с ошибкой.
$matchedString
При возникновении события соответствия match, эта строчка будет содержать в себе строчку, совпавшую с шаблоном.
$matchedString0
$matchedString1
$matchedString2
...
При возникновении события соответствия при запуске "regex" или "match" или "!match" команд и плюс к тому если шаблон регулярного выражения содержит в скобках подвыражения, эти строки будут равны подстрокам, соответствующим каждому подвыражению. Так $matchedString0 будет содержать всю строку, тогда как $matchedString1 будет содержать первое соответствующее подвыражение, а $matchedString2 будет содержать второе, и.т.д.
$IdleResult
Эта переменная используется для возвращения результата скрипта idle; если значение - answer, то mpd полагает, что входящий вызов был отвечен. Если значение - ringback, mpd инициирует исходящий вызов. Смотрите главу Модемные команды для большей информации.
$$
Соответствует одному символу доллара.
Команды скриптов
set $variable-name string
Устанавливает переменную $variable-name равную строке string. The string is variable expanded first.
match name string label
match string label
match string
Add a new pending event to event set name such that when string is seen in the input, resume execution at label. The match must be exact. All arguments are variable expanded.
If no name is given, or if name is the empty string, add the new event to the default set.
If no label is given, or if label is the empty string, the event causes execution to resume starting with the statement following the wait command (i.e., use the default target).
regex name pattern label
regex pattern label
regex pattern
Same as the match command, but matches an extended regular expression instead of an exact string. If pattern is not a valid extended regular expression, the script fails.
Regular expressions are matched on a line-by-line basis; the input matching the pattern cannot span more than one line. A line is terminated with either a newline or a carriage return-newline pair (the latter is more common). An end-of-line should be matched using a dollar sign rather than trying to match these characters directly, as mpd elides them from the input when testing the regular expression.
See re_format(7) for more information about extended regular expressions.
timer name seconds label
timer seconds label
timer seconds
Add a new pending event to set name such that when seconds seconds have elapsed, resume execution at label. All arguments are variable expanded.
If no name is given, or if name is the empty string, add the new event to the default set.
If no label is given, or if label is the empty string, the event causes execution to resume starting with the statement following the wait command (i.e., use the default target).
wait
wait seconds
In the first form, wait indefinitely for any event to happen. When an event happens, continue execution starting at the target label for that event.
The second form is equivalent to:
timer seconds wait
if string1 == string2 command
if string1 != string2 command
Executes command if the two variable expanded strings are equal or not equal.
if string match pattern command
if string !match pattern command
Tests string against the regular expression pattern and executes command if string matches or does not match. Both string and pattern are variable expanded first.
print string
Ouput the string to the serial port. Variables are expanded, and the normal mpd C-style character escapes may be used.
cancel name1 [ name2 ... ]
Cancel all pending events in the sets name1, name2, etc. It is not an error to cancel a set which is already empty.
goto label
Jump to label label.
call label
Call a subroutine at label.
return
Return from subroutine.
success
Exit the script successfully.
failure
Exit the script unsuccessfully.
log string
Print string, variable expanded, to the log file under logging level CHAT.
Errors
The included mpd.script
Troubleshooting
Troubleshooting
Internals
ToDo
Authentication
Hints for developers
Ссылки
Ссылки
Протокол PPP описан во множестве RFC. Часть из них приведена ниже.
RFC 1332 The PPP Internet Protocol Control Protocol (IPCP)
RFC 1334 PPP Authentication Protocols
RFC 1570 PPP LCP Extensions
RFC 1661 The Point-to-Point Protocol (PPP)
RFC 1662 PPP in HDLC-like Framing
RFC 1877 PPP Internet Protocol Control Protocol Extensions for Name Server Addresses
RFC 1962 The PPP Compression Control Protocol (CCP)
RFC 1968 The PPP Encryption Control Protocol (ECP)
RFC 1969 The PPP DES Encryption Protocol (DESE)
RFC 1973 PPP in Frame Relay
RFC 1974 PPP Stac LZS Compression Protocol
RFC 1978 PPP Predictor Compression Protocol
RFC 1979 PPP Deflate Protocol
RFC 1990 The PPP Multilink Protocol (MP)
RFC 1994 PPP Challenge Handshake Authentication Protocol (CHAP)
RFC 2284 EAP
RFC 2419 The PPP DES Encryption Protocol, Version 2 (DESE-bis)
RFC 2427 Multiprotocol Interconnect over Frame Relay
RFC 2433 Microsoft PPP CHAP Extensions
RFC 2516 A Method for Transmitting PPP Over Ethernet (PPPoE)
RFC 2548 Microsoft Vendor-specific RADIUS Attributes
RFC 2637 Point-to-Point Tunneling Protocol (PPTP)
RFC 2661 Layer Two Tunneling Protocol (L2TP)
RFC 2865 Remote Authentication Dial In User Service (RADIUS)
RFC 2866 RADIUS Accounting
RFC 2868 Attributes for Tunnel Protocol Support
RFC 2869 RADIUS Extensions
RFC 3579 RADIUS EAP
Заслуги
- EAP, RADIUS расширения, начатые для mpd4 спонсированы SURFnet
- L2TP расширение спонсировано Scom.ca Интернет Inc.
- Особая благодарность Optima-Telecom за поддержку и производственные испытания в течении долгого времени.