Библиотека сайта rus-linux.net
diald - демон для дозвона по требованию для IP соединений по телефонным сетям
diald.ru(8) Документация по diald diald.ru(8) НАЗВАНИЕ diald - демон для дозвона по требованию для IP соединений по телефонным сетям. КРАТКИЙ ОБЗОР /usr/sbin/diald [устройство1 ...] [опции...] [-- [pppd опции...]] ОПИСАНИЕ Внешние соединения с IP сетями по телефонным линиям с помощью SLIP или PPP по модему или с помощью PPP по ISDN-линии обычно явно включаются и выключаются оператором. Diald может использоваться для автоматического подъема соединения, когда имеются IP-пакеты, которые необходимо доставить на другую машину, и для прекращения соединения, когда оно не используется. Diald работает, создавая SLIP-соединение на псевдо-терминале и устанавливая маршрутизацию на получившийся интерфейс. Этот интерфейс называется "прокси" (proxy). Diald следит за прокси, чтобы узнать, когда следует установить настоящее соединение, а когда оно установлено, то diald маршрутизирует пакеты между прокси и настоящим соединением и следит за настоящим соединением, чтобы узнать, когда его требуется закрыть. Также, когда соединение неожиданное прерывается, diald будет пытаться возобновить его. Правила, контролирующие эти операции, обширно настраиваются в конфигурационных файлах. Эта страница -- справочник по diald. Она документирует все опции конфигурации, которые можно задать diald. Возможно, чтение этой страницы -- не самый простой способ начать работу с diald. Страница diald-examples предоставляет несколько работающих примеров конфигурации, чтобы помочь вам начать использовать diald. На странице dctrl можно прочитать о программе, помогающей управлять запущенной копией diald, используя графический интерфейс. Вдобавок, на страницах diald-control и diald-monitor можно подробно прочитать о командах, которые dctrl может слать diald и об информации, которую diald может сообщить dctrl. ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ Diald обычно настраивается с помощью файлов конфигурации. По историческим причинам почти все, что может находиться в файле конфигурации, также может появиться и в командной строке. Однако, за исключением передачи diald опции, указывающей, из какого файла загрузить конфигурацию, передача аргументов в командной строке не требуется и не приветствуется. При старте diald читает опции сначала из /usr/lib/diald/diald.defs, затем из /etc/diald.conf, а затем из командной строки. Дополнительные файлы, которые нужно прочитать, могут быть заданы из командной строки или внутри самих файлов конфигурации. Первая часть командной строки -- список из нуля или более последовательных устройств. Заметьте, что diald поддерживает ISDN устройства, которые выглядят как Ethernet устройства, но такие устройства не могут быть указаны в первой части командной строки. Эта возможность существует исключительно для обратной совместимости с существующими приложениями. Предпочтительно указывать устройства с помощью опции "device", документированной в секции "Конфигурация" этого руководства. Первый параметр командной строки, не являющийся последовательным устройством, указывает на начало последовательность из нуля или более опций конфигурации diald. Все опции конфигурации diald, документированные ниже, за исключением опции "pppd-options", могут быть указаны в командной строке. Каждая из этих опций принимает фиксированное количество параметров, которые должны немедленно следовать за ней в командной строке. Например, команда "-f" получает единственный параметр, обозначающий имя файла. В командной строке это выглядит так: diald -f /etc/diald/config.18 Эта командная строка указывает diald получить дополнительные опции конфигурации из файла /etc/diald/con- fig.18. На самом деле, это единственная опция конфигурации, которая должна появляться в командной строке. Более того, если вы не запускаете несколько процессов diald, то он может быть запущен вообще без параметров. Для этого надо поместить опции конфигурации в файл /etc/diald.conf, который всегда читается diald. Любые параметры после "--" являются опциями pppd и передаются ему, когда он выполняется diald. Эти опции также могут быть помещены в файл /etc/ppp/options или указаны в файле конфигурации с помощью команды "pppd- options". Если вы используете эту возможность, прочитайте важное замечание в следующей секции, документирующей команду "pppd-options". ФАЙЛЫ КОНФИГУРАЦИИ Как уже упоминалось, при старте diald читает опции сначала из файла /usr/lib/diald/diald.defs, затем из /etc/diald.conf, а затем из командной строки. Дополнительные файлы, которые нужно прочитать, могут быть указаны в командной строке, или внутри самих файлов конфигурации. Заметьте, что файл /usr/lib/diald/diald.defs предназначен только для указания опций var и prule. Это не обязательно, но не следует нарушать это соглашение. Более того, во всех, за исключением самых сложных случаев, поставляемый файл diald.defs не требует редактирования. На самом деле, изменение правил, указанных в этом файле, изменяет язык, который понимает diald при дальнейшем чтении конфигурационных файлов. Необходимость такого редактирования следует тщательно обдумать. Каждая команда в файле конфигурации должна быть записана на одной строке. Каждая строка разбивается на последовательность слов, разделенных пустыми местами (пробелами или символами табуляции). Слова могут заключаться в кавычки ( пустое место. В слове, заключенном в кавычки, можно использовать последовательности (\ или (?). Остальные escape-последовательности интерпретируются в стиле языка C. Пустые строки, равно как и строки, содержащие первым символом символ (#), игнорируются. Основная конфигурация Нижеследующие команды управляют основным поведением diald. Оно включает в себя файлы, из которых читаются опции конфигурации, пути к важным файлам или программам, и несколько других команд, которые менее легко разбиваются на категории. -f <f> Прочитать дополнительные команды из файла <f>. -file <f> Это синоним команды -f include <f> Это еще один синоним команды -f. Заметьте, что эти команды могут использоваться в файле, чтобы включить в него другой файл. mode <m> Устанавливает режим работы <m>. Возможные варианты: slip Режим SLIP. cslip Режим сжатого SLIP (CSLIP). slip6 Режим 6-битного SLIP. cslip6 Режим сжатого 6-битного SLIP. aslip Режим адаптивного SLIP. ppp Режим PPP. dev Режим устройства Ethernet. Все режимы, кроме последнего, работают с последовательными устройствами. Последний режим необходим для адаптеров ISDN, которые выглядят как Ethernet устройства. Эти устройства звонят по требованию, но делают это для всех пакетов без каких-либо policy-decisions. Эта опция позволяет использовать diald как интерфейс к этим устройствам и обеспечивать более сложный механизм управления. В директории "contrib/isdn4linux" в пакете diald находятся примеры файлов конфигурации, использующих этот режим. Заметьте, что бОльшая часть конфигурации управления модемом не используется в этом режиме и просто игнорируется. -m <m> Это синоним команды mode. keepalive <t> Эта опция указывает diald установить таймер SLIP keepalive на <t> секунд. Это работает только если ядро скомпилировано с опцией SLIP keepalive. С этой опцией ядро положит трубку на SLIP линии, на которой нет ни одного пакета в течении <t> секунд. Если другая сторона SLIP соединения может делать SLIP outfill, то эта опция может использоваться для проверки линий с проблемами оборудования. Вы можете достичь того же эффекта, если сделаете так, чтобы во время соединения другая сторона регулярно посылала вам пакеты. Один из способов добиться этого -- настроить diald так, чтобы он игнорировал ping-пакеты и посылать ping-пакеты каждую секунду на ваш маршрутизатор. Если он перестает отвечать, то опция keepalive приведет к закрытию соединения (положит трубку) через <t> секунд. Заметьте, что <t> должно находиться в пределах от 0 до 255. outfill <t> Эта опция указывает diald установить таймер SLIP outfill на <t> секунд. Это работает только если ядро скомпилировано с опцией SLIP outfill. С этой опцией ядро будет посылать пустой SLIP пакет каждые <t> секунд, если в течение этого времени не было послано никакого другого трафика. Это может использоваться в сочетании с опцией keepalive, чтобы убедиться, что соединение существует, даже если в текущий момент отсутствует IP трафик. accounting-log <f> Имя файла, в который diald дописывает учетную информацию. Эта команда позволяет diald записывать время начала и завершения соединения и размер данных, переданных в течение каждого соединения. Это предназначено для учета использования телефонов. pidfile <f> Изменяет имя файла, которое diald использует для хранения своего собственного PID, с diald.pid на указанное имя файла. Обычно этот файл находится в директории /var/run, хотя на некоторых системах он помещается в /etc. fifo <f> Включает управляющий FIFO-канал. Diald попытается открыть именованный канал с именем <f>. Внешние программы могут писать команды в этот канал, и diald будет реагировать на них. Список команд, которые можно дать diald, смотрите ниже в секции о сигналах и FIFO-командах. Если именованный канал уже существует, diald просто попытается открыть его. Если он не существует, то будет создан. Diald создает канал, владельцем которого является пользователь, запускающий diald (обычно root), с правами "0600". Заметьте, что обычно предоставление слишком большому количеству пользователей доступа к управляющему каналу diald -- плохая идея. Также, бОльшая безопасность, вероятно, обеспечивается при создании FIFO и установке его владельцев и прав доступа заранее, нежели чем при создании канала самим diald. debug <mask> Устанавливает отладочную маску. Маска является двоичным ИЛИ следующих шестнадцатиричных флагов: 0x0001 FILTER_MATCH 0x0004 PROXYARP 0x0008 VERBOSE 0x0010 STATE_CONTROL 0x0020 TICK 0x0040 CONNECTION_QUEUE Флаг FILTER_MATCH указывает diald выдавать информацию о пакетах, которые соответствуют правилам фильтрации и об этих правилах. Флаг PROX- YARP указывает diald выдавать информацию о настройке proxyarp. Флаг VERBOSE указывает diald выдавать подробную информацию о различных нормальных операциях. Флаг STATE_CONTROL указывает diald выдавать информацию о конечном состоянии управления статусом соединения. Флаг TICK указывает diald выдавать heartbeat сообщение каждые несколько секунд. Флаг CONNECTION_QUEUE указывает diald выдавать подробную информацию о каждом изменении в очереди соединения. Значение 0 отключает отладочную выдачу. По умолчанию это именно так и есть. -daemon Не исполняться в режим демона. Это означает, что стандартный ввод, стандартный вывод и стандартный ошибочный вывод не закрывается, все сообщения печатаются как на стандартный ошибочный вывод, так и в syslog, и diald не уходит в фоновое выполнение. В основном это полезно, когда вы запускаете его в отладочном режиме и хотите видеть, что происходит. pppd-options <arg1> ... Когда diald используется в режиме PPP, можно передать дополнительные параметры pppd, указав их после команды pppd-options, или после "--" в командной строке. Обычно этого не требуется, так как команды по умолчанию помещаются в файл /etc/ppp/options. Но если вам требуется запускать много копий diald с разными опциями pppd, то вам придется использовать эту способность. ПРЕДУПРЕЖДЕНИЕ: Заметьте, что некоторые команды pppd не должны быть указаны, даже в файле /etc/ppp/options, потому что они будут мешать нормальной работе diald. В частности, не следует указывать терминальное устройство, скорость передачи, и опции crtscts, xonxoff, -crtscts, defaultroute, lock, netmask, -detach, modem, local, mtu и proxyarp. Используйте соответствующие команды diald для управления этими настройками pppd. lock-prefix <path> Устанавливает префикс пути, используемого для создания файловых флагов модемов. По умолчанию равно "/var/lock/LCK..". pidstring Пишет файловые флаги в виде ASCII-строки, содержащий идентификатор процесса программы, создающей файловый флаг. Включено по умолчанию. -pidstring Создает файловые флаги в двоичном формате. run-prefix <path> Указывает директорию, в которую diald пишет файл со своим PID. По умолчанию это "/var/run". path-route <path> Устанавливает путь к команде route. По умолчанию это "/sbin/route". Diald должен знать правильный путь для нормальной работы. path-ifconfig <path> Устанавливает путь к команде По умолчанию это "/sbin/ifconfig". Diald должен знать правильный путь для нормальной работы. path-pppd <path> Устанавливает путь к команде pppd. По умолчанию это "/usr/sbin/pppd". Diald должен знать правильный путь для нормальной работы в режиме PPP. path-bootpc <path> Устанавливает путь к команде bootpc. По умолчанию это "/usr/sbin/bootpc". Diald должен знать правильный путь для нормальной работы при использовании режима bootp опции "dslip-mode". buffer-packets Указывает diald буферизовать пакеты, ожидая появления соединения. По умолчанию это именно так. -buffer-packets Указывает diald не буферизовать пакеты, ожидая появления соединения. buffer_size <n> Устанавливает размер буфера для хранения пакетов при ожидании появления соединения. По умолчанию равно 65536 байт. buffer-fifo-dispose Указывает diald отбрасывать пакеты в порядке "первый пришел -- первый ушел", если ему не хватает места для буфера пакетов при ожидании появления соединения. По умолчанию это именно так. -buffer-fifo-dispose Указывает diald не отбрасывать старые пакеты, когда буфер наполняется. Не могу представить себе, зачем вам это может понадобиться, но я все равно включил эту опцию. buffer-timeout <n> Устанавливает таймаут для отбрасывания пакетов в буфере. По умолчанию это 600 секунд (10 минут). Это хорошая идея, так как вы не хотите, чтобы отсылались пакеты, которым уже несколько часов, если diald поднимает соединение по какой-нибудь другой причине. Конфигурация устройств Команды в этой секции управляют устройством(ами), которые diald использует для внешнего IP соединения. device <f> Добавляет устройство <f> в список устройств, которые могут использоваться для исходящих соединений. Для режимов SLIP и PPP параметр должен быть именем последовательного устройства. Для режима "dev" параметр должен быть именем Ethernet устройства. Если вы указывает более одного устройства, то при попытке установить внешнее соединение diald будет пробовать каждое устройств по очереди, пока не найдет то, которое не заблокировано. Потом он попытается позвонить по этому устройству. Если он не сможет позвонить, то снимет свою блокировку и продолжит обход списка устройств, пытаясь установить соединение. rotate-devices Обычно diald пытается открыть каждое возможное устройство, указанное в командной строке, в порядке, в котором они заданы. Если первое устройство отказывает, причем так, что оно еще может быть открыто, но неспособно соединиться (например, кто-то наступил на модемный кабель), то diald окажется неспособным совершить соединение, пока эта проблема не будет решена. Эта команда заставляет diald циклически обходить список устройств при каждом открытии устройства. Таким образом, в вышеприведенном сценарии diald не сможет соединиться с помощью поврежденного устройства, но в следующий раз сначала попробует второе устройство. connect <p> Использовать исполняемый файл или shell-script <p> для установки соединения. Обычно этот файл звонит по модему и устанавливает SLIP или PPP сессию. Команда <p> выполняется со стандартными вводом и выводом перенаправленными в модемное устройство. Вдобавок, устанавливаются переменные среды MODEM и FIFO. Переменная среды MODEM содержит имя устройства. Это полезно в случаях, когда скрипт должен вести себя по-разному в зависимости от устройства, с которым он работает. Переменная среды FIFO содержит имя управляющего FIFO, используемого diald. Это позволяет скриптам передавать информацию обратно diald через управляющий канал. Заметьте, что переменная среды FIFO не будет установлена, если diald сконфигурирован, чтобы не использовать управляющий fifo. Программа chat, поставляемая с pppd обычно используется для создания скрипта соединения. В случаях, когда chat'а недостаточно, можно использовать скрипты на sh, csh, perl или expect. Эта команда требуется, если опция mode отличается от "dev", в этом случае опция "connect" будет игнорирована. disconnect <p> Использовать исполняемый файл или shell-script для закрытия последовательного соединения. Эту опцию можно использовать, чтобы положить трубку модема, который не умеет делать это сам. Так же, как и со скриптом соединения, этот скрипт исполняется со стандартными вводом и выводом перенаправленными в модем и переменной среды MODEM установленной в имя устройства, с которым работает скрипт. lock Производить блокирование последовательной линии в стиле UUCP. speed <baud-rate> Устанавливает скорость передачи, используемую на последовательной линии. Значение по умолчанию -- 38400. modem Указывает работать с последовательным устройством как с модемом. Эта команда также будет передана pppd при работе в режиме PPP. crtscts Использовать аппаратный контроль передачи (RTS и CTS) по последовательной линии. Эта команда также будет передана pppd в режиме PPP. Скорее всего, вы будете использовать эту команду. Сетевая конфигурация Нижеследующие команды указывают, как diald будет конфигурировать свои сетевые интерфейсы и какие строки будут добавлены в таблицу маршрутизации. local <a> Задает локальный IP-адрес соединения, устанавливаемого diald. Эта опция обязательно должна присутствовать. Если вы не используете опцию dynamic, то этот адрес должен соответствовать локальному IP-адресу, присвоенному вам вашим провайдером. remote <a> Задает удаленный IP-адрес соединения, устанавливаемого diald. Эта опция также обязательно должна присутствовать. Если вы не используете опцию dynamic, то этот адрес должен совпадать с удаленным IP-адресом вашего провайдера. (Заметьте, что по природе IP-маршрутизации это не обязательно, но ваши таблицы маршрутизации будут выглядеть запутанно, если эти адреса не совпадают. dynamic Динамически изменять локальный и удаленный IP-адреса так, чтобы они совпадали с полученными во время установки соединения (по SLIP или PPP). Заметьте, что в динамическом режиме начальные локальный и удаленный IP-адреса все равно должны быть указаны, но необязательно должны быть правильны. Обычно это означает, что вам следует использовать адреса из интервала IP-номеров, зарезервированных для приватных сетей, которые не могут появляться в самом Интернете. Такими адресами являются адреса в сетях 10.0.0.0/255.0.0.0, 172.16.0.0/255.240.0.0, и 192.168.0.0/255.255.0.0. Если вы уже используете их, то адреса 192.168.0.1 и 192.168.0.2 являются удобным вариантом для ваших локального и удаленного адресов. Заметьте, что вы можете знать только локальный либо удаленный адрес, не зная второй из них. В этом случае вы можете указать тот, который знаете. strict-forwarding Если у вас динамический локальный IP адрес, то если соединение прервется во время TCP-сессии, то возобновить ее будет невозможно. Это ограничение TCP. Однако, обычно diald все равно будет пытаться восстановить соединение, так как в имеется трафик в рамках вашей старой TCP сессии. Это -- потеря времени соединения. Опция strict-forwarding помогает избежать этого. Когда strict-forwarding включен, diald будет игнорировать все пакеты, у которых как исходный, так и конечный адреса не совпадают с текущим локальным адресом. Если соединение отсутствует, то это локальный адрес, указанный в опции "local". Если соединение есть, то это -- текущий динамически присвоенный адрес. Скорее всего, вам захочется использовать эту опцию, если у вас динамический локальный адрес. Скорее всего, вам не нужно использовать эту опцию, если у вас статический локальный адрес. Эта опция никак не связана с опцией "dynamic", потому что у вас могут быть динамический удаленный и фиксированный локальный адреса, в этом случае опция "strict-for- warding" нежелательна. dslip-mode <mode> Устанавливает интерпретацию информации о динамических адресах для режима SLIP. Возможные варианты: bootp, remote, local, remote-local, и local-remote. Если режим -- bootp, то для определения динамического SLIP адреса используется протокол BOOTP. В противном случае динамический SLIP адрес определяется путем чтения строки приветствия, которую выдает удаленный SLIP сервер при старте. Строка может выглядеть следующим образом: Annex address is 137.130.1.14. Your local address is 137.130.2.44. Опция dslip-mode указывает, какие IP адреса следует прочитать из начального сообщения сервера, и в каком порядке они появляются там. Режим по умолчанию -- remote-local. netmask <a> Устанавливает маску сети, используемую для интерфейса. mtu <m> Устанавливает MTU (Maximum Transmission Unit, Максимальная Единица Передачи) в значение <m>. По умолчанию равно 1500. Это максимальный размер пакета, который сетевой уровень будет слать по физическому соединению. Используются значения между 296 и 3000. Если вы выберете небольшое значение, то получите лучшее время ответа при интерактивных сессиях, тогда как большие значения приведут к лучшей пропускной способности, за счет скорости интерактивной работы. Заметьте, что pppd может выбрать значение, отличающееся от того, которое вы задали. Если вы используете режим SLIP, то это значение должно в точности соответствовать значению, требуемому вашим SLIP провайдером. Если значения MTU на обоих концах соединения не совпадают, вы столкнетесь с серьезными проблемами с производительностью. Если вы используете pppd, и pppd устанавливает значение меньшее, чем вы задали, то diald попытается изменить MTU на значение, установленное pppd. Безошибочная работа этого механизма не гарантируется, так как изменение MTU на уже работающем интерфейсе не поддерживается ядром. Возможно, будущие версии ядра и будут поддерживать это. Если требуется изменение, diald напишет предупреждение в системный журнал. Чтобы убедиться, что проблем не возникает, вам, вероятно, потребуется перезапустить diald с тем значением MTU, которое diald сообщил в системном журнале. mru <m> Устанавливает MRU (Maximum Receive Unit, Максимальная Единица Приема) в значение <m>. Это имеет смысл только в режиме PPP и задает размер MTU, о котором pppd будет просить удаленную сторону. Это может быть полезно для установки совпадающих значений MTU на обоих концах PPP соединения. window <s> Эта опция задает размер окна TCP, помещаемый в таблицу маршрутизации. Установка размера окна ограничивает количество байт, которые TCP-соединение будет помещать в очередь передачи в каждый момент времени. Это может сильно повлиять на производительность интерактивных сессий. Теоретически, размер окна должен быть немного больше, чем произведение пропускной способности на время задержки, и большие размеры окна могут отрицательно повлиять на производительность. Для модема на 33.2 kbps с временем полного обращения (round-trip time), равным 120ms, произведение пропускной способности на время задержки равно всего лишь 576 байт! Это слишком мало для практических целей, но размер окна между 2048 и 4096 является нормальным для MTU между 296 и 1500. Вам также следует задавать размер окна кратным MTU, в противном случае всегда будет оставаться неиспользуемая часть окна. reroute Эта команда указывает diald изменить системный маршрут так, чтобы он указывал на настоящее соединение, когда оно появляется, а не пересылать пакеты с прокси-соединения на настоящее соединение. Это -- поведение diald по умолчанию. -reroute Эта команда указывает diald пересылать пакеты с прокси-соединения на настоящее соединения, а не изменять системный маршрут так, чтобы он указывал на настоящее соединение. Это может быть необходимо, чтобы избежать зависания TCP сессий, если вы работаете с ядром Linux старше 2.0.0 и у вас есть несколько выходящих SLIP или PPP соединений. Также это может быть полезно, если какие-либо программы, которые вы запускаете, смущаются из-за постоянных изменений выходного сетевого устройства. (Сообщают, что пакет SOCKS-прокси сталкивается из-за этого с проблемами.) Обычно этой опции следует избегать, потому что она может вызвать замедление исходящего трафика вплоть до 20%. defaultroute Указывает diald установить маршрут по умолчанию на SLIP соединение. proxyarp Указывает diald добавить строку с IP адресом удаленной системы и Ethernet адресом этой системы в системную таблицу ARP [Address Resolution Protocol] (Протокол Сопоставления Адресов). addroute <script-name> Указанные скрипт или исполняемый файл вызывается diald, когда он устанавливает прокси-устройство. Скрипту передается пять аргументов: <iface> <net- mask> <local-ip> <remote-ip> <metric>. Аргумент <iface> обозначает интерфейс, который использует прокси-устройство, следующие три аргумента задают текущую маску сети, локальный IP адрес и удаленный IP адрес этого интерфейса. Аргумент <metric> задает метрику маршрута, которую diald хотел бы установить. Diald устанавливает этот параметр в 1 для маршрутов через прокси-соединение или в 0 для маршрутов через физическое соединение. Следует соблюдать аккуратность при установке маршрутов в этих двух случаях. Маршруты для прокси-соединения должны иметь в качестве маршрутизатора "0.0.0.0". Маршруты для физического соединения в качестве маршрутизатора должны иметь <remote-ip>. Если вы не сделаете этого, то появится окно во время переключения между прокси и физическим соединением, во время которого маршрутизация не будет установлена. Это может привести к прекращению TCP соединений при использовании Linux версии 1.3.x и выше. Заметьте, что параметры маршрутизации могут измениться в промежутке между первым вызовом вашего скрипта и моментом, когда diald установит динамическое соединение. Это приведет к тому, что скрипт будет вызван еще раз. delroute <script-name> Указанный скрипт или исполняемый файл вызывается diald перед тем, как он удалит прокси-устройство (когда diald готовится к завершению). Скрипт получает те же параметры, что и скрипт addroute. Эта команда присутствует для симметрии, и скорее всего, она вам не понадобится, так как ядро само удаляет маршруты, проходящие через интерфейс, который прекращает работу. ip-up <script-name> Указанный скрипт или исполняемый файл вызывается diald каждый раз, когда уровень IP начинает свою работу. Этот скрипт получает те же параметры, что и скрипт addroute. Diald не ждет, пока этот скрипт завершит свою работу, а переходит к другим делам. Это означает, что существует вероятность одновременного выполнения более одной копии скрипта. Учитывайте это при его написании. ip-down <script-name> Указанный скрипт или исполняемый файл вызывается diald каждый раз, когда уровень IP прекращает свою работу. Этот скрипт получает те же параметры, что и скрипт addroute. Diald не ждет, пока этот скрипт завершит свою работу, а переходит к другим делам. Это означает, что существует вероятность одновременного выполнения более одной копии скрипта. Учитывайте это при его написании. Настройка таймаутов Нижеследующие опции конфигурируют, сколь долго diald будет ждать разнообразных событий, и до некоторой степени то, что будет предпринято, когда такие таймауты произойдут. connect-timeout <t> Устанавливает максимальное время ожидания завершения работы скрипта connect в <t> секунд. По умолчанию -- 60 секунд. disconnect-timeout <t> Устанавливает максимальное время ожидания завершения работы скрипта disconnect в <t> секунд. По умолчанию -- 60 секунд. redial-timeout <t> Устанавливает время между попытками дозвона в <t> секунд. По умолчанию -- 30 секунд. nodev-retry-timeout <t> Устанавливает задержку между попытками дозвона, если в течение <t> секунд недоступно ни одно модемное устройство. По умолчанию -- 1 секунда. stop-dial-timeout <t> Устанавливает максимальное количество времени ожидания завершения скрипта connect после посылки ему сигнала SIGINT. По умолчанию -- 60 секунд. kill-timeout <t> Устанавливает максимальное время ожидания завершения работы запущенного процесса после посылки ему сигнала SIGKILL. После этого diald будет считать, что что-то заклинило и завершит работу (этого никогда не должно произойти). По умолчанию -- 60 секунд. start-pppd-timeout <t> Устанавливает максимальное время ожидания, пока pppd выберет PPP устройство. По умолчанию -- 60 секунд. stop-pppd-timeout <t> Устанавливает максимальное время ожидания, пока pppd не прекратит свою работу после посылки ему сигнала SIGINT. По умолчанию -- 60 секунд. first-packet-timeout <t> Устанавливает таймаут для первого пакета. После того, как соединение было установлено, может пройти небольшое время перед тем, как будет послан первый пакет, например, пока pppd договаривается о параметрах соединения. Если в течение <t> секунд, не появилось ни одного пакета, то diald посчитает, что что-то сломалось и закроет соединение. Таймаут по умолчанию -- 120 секунд. retry-count <n> Устанавливает максимальное число раз, которые diald должен пытаться совершить перед тем, как прекратить попытки и опять ждать появления сетевого трафика. По умолчанию -- 0. died-retry-count <n> Устанавливает максимальное количество раз, которые diald должен пытаться восстановить прервавшееся соединение перед тем, как прекратить попытки и опять ждать появления сетевого трафика. По умолчанию -- 1 раз. redial-backoff-start <n> Задает количество последовательных неудач при соединении, после которого diald удваивает задержку между попытками дозвона после каждой попытки. Эта команда может использоваться для предотвращения загрузки телефонной линии, когда удаленная сторона сильно занята. Если эта команда не указана, то считается бесконечностью, что фактически отключает этот алгоритм. Когда опция redial-backoff-start установлена, diald будет использовать redial-time- out в качестве времени задержки между первыми <n> неудачными попытками. После этого diald будет удваивать время ожидания после каждой неудачи, пока не достигнет предела в redial-backoff-limit секунд. Успешное соединение начинает этот алгоритм сначала. redial-backoff-limit Устанавливает максимальное количество секунд, которые diald будет ждать между неудачными попытками дозвона, при срабатывании алгоритма замедления звонков. Значение по умолчанию -- 600 секунд (10 минут). dial-fail-limit Устанавливает максимальное количество последовательных неудачных попыток соединения. Если этот предел превышен, diald заблокирует дальнейшие соединения до тех пор, пока в командный FIFO не будет послана команда "unblock". Если эта опция установлена в 0, diald не будет устанавливать никакого предела. Значение по умолчанию 0. Когда произойдет превышение, diald запишет в системный журнал такое сообщение: "Too many dialing failures in a row. Blocking con- nection." Эта команда предназначена для использования в системах, которым необходимо избежать большого количества оплачиваемых звонков на некорректно работающую машину. Когда diald блокирует соединение, оператор может, узнав об этом, исправить проблему и выдать команду "unblock", чтобы разрешить diald продолжение работы. route-wait На некоторых плохо сконфигурированных PPP серверах трафик не будет пересылаться до тех пор, пока демон маршрутизации не заметит, что PPP соединение установлено, и пакет с информацией о маршрутизации не пройдет по соединению от сервера на локальную машину. Эта опция указывает diald, что он общается с сервером, имеющим такую проблему, и что он не должен считать IP уровень работающим до тех пор, пока не получит хотя бы один пакет с той стороны. Надеюсь, никому не придется использовать эту опцию. two-way Обычно, если соединение прервалось из-за того, что другая сторона положила трубку, то diald немедленно будет перезванивать. Эта команда заставляет diald перезванивать только если имеется выходящий трафик. Это предназначено для использования тогда, когда другая сторона тоже использует систему дозвона по требованию (возможно, тоже diald). give-way Обычно, если команда connect выдается в FIFO, когда выполняется скрипт соединения, то она игнорируется (the FIFO connect request shell is terminated). Эта команда вызывает противоположное поведение: скрипт соединения завершается, и выполняется команда con- nect. Это предназначено для использования на одном (или обоих) концах двусторонних соединений, чтобы избежать проблем при одновременных попытках дозвониться друг до друга. Команды настройки правил фильтрации пакетов Diald постоянно поддерживает виртуальное соединение с другой системой. Это соединение может находиться в одном из двух режимов -- либо соответствующее физическое соединение должно быть установлено, либо оно должно быть разорвано. Когда физическое соединение должно быть установлено, diald будет поддерживать физическое соединение, звоня и перезванивая при необходимости. Также он будет отслеживать пакеты, проходящие по виртуальному каналу, чтобы определить, когда следует разорвать физическое соединение. Когда физическое соединение должно быть разорвано, diald будет отслеживать пакеты, проходящие по виртуальному каналу, чтобы определить, что физическое соединение следует установить. Общий подход, используемый diald, чтобы определить, когда переключиться между этими двумя режимами, заключается в создании набора соединения (con- nection set), состоящего из предметов соединения (connec- tion identities), каждому из которых присвоен таймаут. Когда таймаут, присвоенный предмету соединения, истекает, этот предмет удаляется из набора. Когда набор соединения пуст, diald считает, что физическое соединение должно быть разорвано, в противном случае -- что оно должно быть установлено. Эта секция описывает опции конфигурации, управляющие тем, как diald создает предметы для наборов соединения. На странице diald-examples находятся несколько примеров использования этих опций. prule <name> <protocol> <spec> Определяет новое правило протокола с именем <name>, которое будет использоваться в опциях filter. Поле <protocol> должно быть именем протокола, определенного в файле /etc/protocols, специальным словом "any" либо целым числом от 0 до 254 включительно. Поле <spec> -- это список из шестнадцати кодов смещений, разделенных двоеточиями, которые указывают байты, извлекаемые из пакетов, чтобы создать идентификатор соединения. Каждый код смещения -- это целое число, возможно, с префиксом значения с префиксом -- смещения в сегмент данных IP пакета. var <name> <spec> Определяет новую переменную с именем <name>, которая будет использоваться в опциях filter. Поле <spec> определяет, как создать значение этой переменной на основе пакета. Оно состоит из однобайтового смещения к четырехбайтовому слову, возможно, с префиксом '+', за которым, возможно, следует значение в скобках для сдвига вправо, за которым, возможно, следует символ '&' и значение битовой маски. Смещения с префиксом '+' являются смещениями в сегмент данных IP пакета, в противном случае они являются смещениями в заголовке пакета. Например, IP адрес отправителя пакета определяется как var ip.saddr 12 что означает "получить четыре байта, находящихся со смещения 12 в заголовке пакета." Похожим образом определяется IP-протокол пакета: var ip.protocol 9(24)&0xff что означает "получить четыре байта, находящихся со смещения 9 байт в заголовке, сдвинуть полученное значение вправо на 24 бита и маскировать побитово значением 0xff." В качестве заключительного примера, порт отправки в заголовке tcp определяется как var tcp.source +0(16)&0xffff что указывает "получить четыре байта, начиная с начала сегмента данных ip, сдвинуть значение вправо на 16 бит, и маскировать побитово с 0xffff." accept <protocol-rule> <timeout> <packet-rule> Определяет правило фильтрации пакетов для управления соединением. Пакеты, которые соответствуют этому правилу, приведут к установлению соединения и поддержанию его в течение как минимум <timeout> секунд. <protocol-rule> должно указывать на протокольное правило, созданное предварительно с помощью оператора prule. Значение <timeout> должно быть неотрицательным целым числом. Значение 0 означает, что соединение, созданное из-за этого пакета, будет немедленно разорвано. Параметр <packet-rule> -- это список одного или более условий, которым должен соответствовать пакет. Специальное правило "any" соответствует любому пакету. В противном случае, правило записывается как список условий, разделенных запятыми, и без пробелов между ними. Каждое условие является проверкой значения какого-либо поля в пакете. Простые условия записываются в виде <variable-name><op><value> или <variable-name>&<bitmask><op><value> Где <bitmask> -- необязательная битовая маска. Перед сравнением производится логическая операция AND между битовой маской и значением переменной <variable-name>. <op> -- один из операторов "=", "!=", "<=" или ">=". Также существует две короткие формы: "<variable- name>" и "!<variable-name>", которые являются сокращениями для "<variable-name>!=0" и "<variable- name>=0". В правилах для пакетов могут использоваться лишь переменные, предварительно созданные с помощью оператора var. Значения для сравнения и битовые маски могут задаваться как десятичные, восьмиричные и шестнадцатиричные числа, цифровые IP-адреса, или как символические имена. Символические имена вида "tcp.<service>", "udp.<service>" соответствуют значениям, определенным в /etc/services. Символические имена могут также соответствовать любому протоколу, определенному в /etc/protocols. См. обсуждение управления временем поддержания соединения за дальнейшей информацией о том, как применяются эти "accept"-правила. bringup <protocol-rule> <timeout> <packet-rule> Определяет правило фильтрации пакетов для управления соединением. Пакеты, соответствующие правилу bringup, вызовут попытку установить соединение на время по крайней мере <timeout> секунд. Эти правила игнорируются, если соединение в настоящий момент уже установлено. Параметры полностью соответствуют параметрам команды "accept". См. обсуждение управления временем поддержания соединения за дальнейшей информацией о том, как применяются "bringup"-правила. keepup <protocol-rule> <timeout> <packet-rule> Определяет правило фильтрации пакетов для управления соединением. Пакеты, которые соответствуют правилу "keepup", вызывают продление поддержания соединения на время по крайней мере <timeout> секунд. Эти правила игнорируются, если соединение в настоящий момент не установлено. Параметры полностью соответствуют параметрам команды "accept". См. обсуждение управления временем поддержания соединения за дальнейшей информацией о том, как применяются "keepup"-правила. ignore <protocol-rule> <packet-rule> Определяет правило фильтрации пакетов для управления соединением Пакеты, соответствующие правилу "ignore" будут игнорироваться и не станут соответствовать больше никаким правилам. За исключением отсутствующего параметра <timeout>, параметры полностью соответствуют параметрам команды "accept". См. обсуждение управления временем поддержания соединения за дальнейшей информацией о том, как применяются "keepup"-правила. restrict <start> <end> <weekdays> <monthdays> <months> or-restrict <start> <end> <weekdays> <monthdays> <months> Обычно правила фильтрации применяются постоянно. Оператор "restrict" приводит к тому, что все правила фильтрации, следующие за ним, применяются только во время, указанное в этом операторе. У оператора "restrict" имеется пять числовых параметров. Первые два поля указывают начальное и конечное время в виде "ЧЧ:ММ:СС". "*" вместо начального времени равносильна "00:00:00". Соответственно, "*" вместо конечного времени равносильна "23:59:59". В оставшихся трех полях могут находиться либо "*", обозначающая любое значение, либо разделенный запятыми список чисел и числовых диапазонов. Поле <weekdays> задает дни недели. Допускаются числа в промежутке от 0 до 6, где номер 0 -- это воскресенье, номер 1 -- понедельник, и так далее. Поле <monthdays> задает числа месяца. Допускаются значения от 1 до 31. Поле <months> задает месяцы. Допускаются значения от 1 до 12. Команда "restrict" указывает временной диапазон. Команда "or-restrict" дополняет предыдущую команду "restrict" так, чтобы она включала в себя также и указанный диапазон. Например, чтобы ограничить правила фильтрации так, чтобы они применялись в промежутке с 02:00-03:00 по 17:00-18:00 каждое воскресенье, можно использовать операторы restrict 2:00:00 3:00:00 0 * * or-restrict 17:00:00 18:00:00 0 * * ПРЕДУПРЕЖДЕНИЕ: эта возможность экспериментальна, синтаксис может измениться в будущих версиях diald. up Правило up заставляет постоянно поддерживать соединение, независимо от того, наличествуют ли какие-либо пакеты. Применение этого правила может быть ограничено использованием оператора "restrict". Например, последовательность команд restrict 12:00:00 13:00:00 * * * up заставит поддерживать соединение с 12:00 по 13:00 каждый день. down Правило down приводит к тому, что соединение не устанавливается, независимо от наличия пакетов. Применение этого правила может быть ограничено оператором restrict. Например, последовательность команд restrict 12:00:00 13:00:00 * * * down приведет к тому, что соединения не будет происходить в промежутке 12:00-01:00 каждый день. ЗАМЕТЬТЕ: Правила up и down, с взаимоисключающими параметрами применяются в порядке, в котором они заданы в файлах конфигурации. Например, последовательность restrict 12:30:00 12:39:00 * * * down restrict 12:00:00 13:00:00 * * * up вызовет установку соединения в 12:00, разрыв его в 12:30, повторную установку в 12:40, затем после 13:00 состояние соединения будет зависеть от трафика. impulse <duration>,<fuzz> impulse <initial-duration>,<secondary-duration>,<fuzz> Команда impulse используется для управления соединением, используя кванты времени длиннее секунды. Это предназначено для использования в условиях, где телефонные звонки оплачиваются исходя из длительности этих квантов. Если у команды два аргумента, то параметр <duration> указывает количество секунд, которое diald будет удерживать соединение перед проверкой необходимости разорвать его. Параметр <fuzz> -- это количество секунд, в течение которых diald будет отслеживать состояние соединения, перед тем, как снова начать удерживать его в течение <duration> секунд. При использовании с тремя параметрами, параметр <initial-duration> указывает минимальное количество секунд, в течение которых diald будет удерживать соединение, после того, как сделан телефонный звонок. После того, как это время истечет, diald будет вести себя как в случае с двумя параметрами, используя <secondary-duration> вместо <duration>. Нулевые значения для параметров <duration> и <fuzz> отключают использование импульсов. Например, если по воскресеньям телефонные звонки оплачиваются как $1 в час, с округлением в большую сторону, то вы можете удерживать соединение в течение одного часа, раз уж вы сделали звонок. Чтобы добиться этого, используйте следующие команды: restrict * * 0 * * impulse 3570,30 Эти команды заставят удерживать соединение в течение 3570 секунд, с 30-секундным запасом, необходимым на установку и завершение соединения. Заметьте, что параметр <fuzz> не следует устанавливать в малые значения, потому что в противном случае вы можете не успеть завершить звонок, и вам придется платить еще за один импульс. Точно так же, если ваши звонки оплачиваются посекундно, но за первые десять минут -- отдельная небольшая оплата, вы можете использовать команду impulse 600,0,0 flushfilters Удаляет все существующие правила фильтрации. flushprules Удаляет все существующие определения правил протоколов. flushvars Удаляет все существующие определения переменных. ДИАГНОСТИКА Если что-либо привело к ненормальному завершению, выходит с кодом ошибки 1. Ошибки и информационные сообщения журналируются с помощью демона syslog с кодом LOCAL2. Если diald работает не в режиме демона, то они также печатаются в stderr. Установка отладочной маски (команда debug) может сильно увеличить количество этих сообщений. Если вы включили отладку, следите за своими логами! FILES /etc/diald.conf Файл конфигурации по умолчанию. /etc/diald.defs Стандартные правила протоколов и определения переменных. /var/lock/LCK..* Блокировочные файлы в стиле UUCP для последовательных устройств. /var/run/* Место расположения файла с pid'ом работающего diald. По умолчанию используется файл diald.pid. Изменить это можно с помощью команды pidfile. СМОТРИ ТАКЖЕ dctrl(1), diald-examples(5), diald-control(5), diald-moni- tor(5), pppd(8), chat(8), expect(1) АВТОР Eric Schenk (Eric.Schenk@dna.lth.se) ПЕРЕВОД Translation Copyright (C) Alexey Mahotkin 1998-1999 alexm@hsys.msk.ru, http://alexm.here.ru ОШИБКИ И ОГРАНИЧЕНИЯ Имеется некоторое количество известных проблем и ограничений: Строки в файлах конфигурации могут содержать не более 1024 символов. Более длинные строки молча обрубаются. Если не указано ни одного правила фильтрации, то ни один пакет не будет им соответствовать и демон не будет ничего делать. Вероятно, в этом случае следует, чтобы соответствовали все пакеты. Diald пытается автоматически установить MTU для прокси-соединения в соответствии с MTU реального соединения, на котором работает ppp. Работа этого механизма не гарантируется, потому что изменение MTU на активном интерфейсе не поддерживается ядром. Возможно, автоматически установленный MTU приведет к тому, что некоторые пакеты будут отброшены. Если вы наблюдаете проблемы, вам следует вручную установить эти значения. Diald сообщит о значении реального MTU в логах, и предупредит о том, что вам необходимо настроить его. Использование команды monitor несет определенный риск для безопасности, так как любой имеющий доступ к управляющему FIFO, может заставить diald писать в любой именованный канал в системе. Будьте осторожнее с правами доступа управляющих FIFO.