При конфигурировании PPP для приема входящих звонков возникает ряд дополнительных требований. В этом разделе мы рассмотрим тонкую настройку PPP под Linux для такого случая.
При запуске pppd нужно учитывать, что запуск в режиме сервера, это только вопрос добавления соответствующей опции в командной строке и конфигурирования последовательного tty-устройства так, чтобы вызвать pppd с соответствующими параметрами, когда было получено входящее обращение. Было бы идеально создать специального пользователя, скажем ppp, и задать ему скрипт или программу, которая вызывает pppd с этими опциями как оболочку входа в систему. Другой вариант: если Вы предполагаете поддерживать авторизацию по PAP или CHAP, можно использовать программу mgetty, чтобы поддерживать модем и использовать свойство "/AutoPPP/".
Чтобы создать сервер с использованием метода входа в систему, добавьте следующую строку в файл /etc/passwd:
ppp:x:500:200:Public PPP Account:/tmp:/etc/ppp/ppplogin |
ppp:!:10913:0:99999:7::: |
Конечно, UID и GID, которые Вы используете, зависят от того, какой пользователь использован для подключения. Вы также должны установить пароль для этого пользователя, используя команду passwd.
Скрипт ppplogin может выглядеть так:
#!/bin/sh # ppplogin - script to fire up pppd on login mesg n stty -echo exec pppd -detach silent modem crtscts |
Команда mesg отключает других пользователей от записи в tty с использованием, например, вызова write. Команда stty выключает повторение символов (эхо). Эта команда необходима: без нее все, что посылает клиент будет послано ему назад. Наиболее важная опция pppd -detach. Она не дает pppd отсоединится от управления tty. Если мы не определили эту опцию, pppd перейдет в фоновый режим, а скрипт входа завершится. Это в свою очередь приведет к завершению связи. Опция silent заставляет pppd ждать получения пакета с вызываемой системы и не начинать свою передачу до его прибытия. Эта опция предотвращает разрыв связи, если удаленная система медлительная. Параметр modem предписывает pppd управлять линиями контроля модема на последовательных портах. Вы должны всегда задать эту опцию при использовании pppd с модемом. Опция crtscts включает аппаратное соединение (hardware handshake).
Помимо этих параметров можно использовать какой-либо вариант авторизации, например, определяя auth в командной строке pppd или в глобальном файле параметров.
Если Вы хотите использовать mgetty, все, что Вы должны сделать, это настроить mgetty так, чтобы поддерживать последовательное устройство с которым связан модем (подробности изложены в главе 4), затем настроить pppd для авторизации по PAP или CHAP с помощью соответствующих параметров в файле options и добавить раздел, подобный следующему, к файлу конфигурации /etc/mgetty/login.config:
# Configure mgetty to automatically detect incoming PPP calls and invoke # the pppd daemon to handle the connection. # /AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login |
Первое поле используется, чтобы обнаружить входящее обращение к PPP (чувствительно к регистру). Третий столбец задает имя пользователя, которое появится в выводе команды who. Остальная часть строки команда для вызова сервиса. В нашем примере мы определяем, что нужна авторизация PAP, запрещаем CHAP и определяем, что системный файл passwd должен использоваться для авторизации пользователей. Не забудьте, что Вы можете определять параметры в файле options или в командной строке.
Чтобы запустить PPP на Вашей машине, нужно сделать следующее:
Настроить модем на автоответ. Hayes-совместимые модемы используют для этого команду ATS0=3. Если вы хотите использовать mgetty daemon, это необязательно.
Настройте последовательное устройство с помощью команды getty на прием входящих звонков. Обычно это делается с помощью варианта getty, команды mgetty.
Решите какой вариант авторизации будет использован. Системный логин, PAP или CHAP?
Настройте pppd для работы в режиме сервера.
Рассмотрите маршрутизацию. Вы должны обеспечить сетевой маршрут к вызывающим абонентам или нет? Маршрутизация может выполняться, используя скрипт ip-up.
Далеко не всегда возможно держать телефонную линию, занятой модемной связью постоянно. Это все-таки не выделенный канал... Поэтому было разработано решение, получившее название demand dialing (дозвон по требованию). Суть метода сводится к тому, что соединение устанавливается только при появлении некоего трафика, который нужно передать по модему. В этом случае компьютер должен сам дозвониться до провайдера, зарегистрироваться на сервере и выполнить обмен данными. По окончании сеанса связи компьютер должен просто завершить соединение. На деле он ждет некоторое время, не появится ли еще информация для передачи через Internet.
Традиционные Linux-решения использовали команду diald, которая работала хорошо, но была довольно сложна в настройке. Версии 2.3.0 и старше PPP daemon имеют встроенную поддержку дозвона по запросу, в результате чего процесс существенно упростился. Вы должны использовать для этого современное ядро (на деле любое ядро старше версии 2.0).
Для настройки pppd на дозвон по запросу все, что Вы должны сделать, это добавить параметры к файлу options или командной строке запуска pppd. Подробно эти параметры рассмотрены в таблице чуть ниже:
Параметр | Описание |
---|---|
demand | Указывет, что PPP-связь работает в режиме "дозвон по запросу". Сетевое устройство PPP будет создано, но команда connect не будет использоваться, пока не придет пакет с локального компьютера. Эта опция обязательна для данного режима. |
active-filter expression | Позволяет Вам определять, какие пакеты стоит рассматривать как трафик. Любой трафик, соответствующий заданным критериям, перезапустит таймер неактивности сетевого соединения, гарантируя, что pppd подождет указанное время перед закрытием связи. Синтаксис фильтра был заимствован из команды tcpdump. Заданный по умолчанию фильтр соответствует всем пакетам. |
holdoff n | Позволяет Вам определять минимальное время в секундах, которое нужно ждать перед перезапуском линии в случае обрыва связи. Если подключение терпит неудачу в то время, как pppd полагает, что оно находится в активном пользовании, соеднение будет восстановлено после того, как кончится время на этом таймере. Этот таймер не относится к перезапуску связи после окончания времени бездействия линии. |
idle n | Если эта опция задана, pppd разъединит связь всякий раз, когда время в этом таймере истекает. Каждый новый активный пакет сбросит таймер. Время неактивности задается в секундах. |
demand holdoff 60 idle 180 |
Persistent dialing (постоянный дозвон) используется, если Вы очень активно используете модемную линию. В этом режиме связь должна поддерживать как можно больше времени (лучше всего, постоянно), и именно это компьютер постарается обеспечить.
Однако, есть опасность, что в случае сбоя на телефонной линии pppd будет вечно пытаться установить связь. К счастью, есть опции, позволяющие обойти эту проблему.
Для включения этого режима, Вы должны включить опцию persist в файл настройки pppd. Включение этой опции единственное, что Вы должны сделать. Дальше pppd автоматически вызовет команду, определенную опцией connect, чтобы восстановить подключение, когда произошел сбой связи. Если модем пытается связаться раньше, чем нужно (например, в случае неисправности модема или сервера на другом конце линии), Вы можете использовать опцию holdoff, чтобы установить минимальное время, которое pppd будет ждать перед попыткой установить связь. Эта опция не решит проблему неисправности, но она по крайней мере уменьшит загрузку канала.
Типичная конфигурация для постоянного дозвона:
persist holdoff 600 |
Можно объединить постоянный дозвон с дозвоном по требованию, используя опцию idle, чтобы прерывать связь по таймеру неактивности соединения. Вряд ли найдется много желающих использовать такой режим, однако он описан на man-странице по pppd.
Назад | Глобальное оглавление | Вперед |
Отладка Ваших настроек PPP | Локальное оглавление | TCP/IP Firewall |