Решения, основанные на доставке по требованию (dial-on-demand)

Написано Jan P Tietze <jptietze@mail.hh.provi.de>.

У многих пользователей Linux есть доступ в Интернет через телефонные линии, и многие решили реализовать на своей системе "доставку почты по требованию". То есть всякий раз, когда некоторый IP - пакет должен выйти за пределы локальной сети или машины, автоматически происходит соединение с провайдером услуг Интернет (ISP). Cвязь завершается после некоторого периода бездействия (пакеты для доставки в Интернет отсутствуют).

Хотя это очень удобно и эффективно, с точки зрения стоимости решения, имеется один частный случай, когда это не совсем так (мы помним, что время установления соединения через "обычную" модемную линию относительно велико). И этот случай связан с посылкой электронной почты. E-Mail обычно посылается через SMTP, локально настроенной на вашей системе, через SMTP-сервер, который постоянно находится в Интернет (SMTP-сервер вашего провайдера).

Когда Вы посылаете сообщение, линия будет поднята и связь установлена. Все будет хорошо, если делаете Вы это нечасто, однако если Вы посылаете множество сообщений (писем), то это станет утомительно и невыгодно. Более того, если ваш провайдер налагает ограничения на время или количество звонков, то это уменьшит возможность посылать письма в течении дня, и Вам придется делать это вручную в другое время.

Глава 1 данного документа позволит выйти из этой ситуации, хотя в системах, где имеется внешний поиск DNS имен, это все равно вызовет соединение с ISP. Хотя почта и будет поставлена в очередь. Это случается потому, что sendmail пытается "канонизировать" имена хостов.

Решение этой проблемы двояко: Сначала мы подправим sendmail.cf. Затем мы должны определить процесс, который действительно займется доставкой почты. Лично я предпочитаю использовать crond и создавать задания - это будет описано ниже.

Конфигурирование sendmail.cf

По причинам, описанным в [1.2], я рекомендую изменять m4 файлы, вместо непосредственного редактирования sendmail.cf. Это сэкономит много нервов и позволит избежать неприятных незапланированных осечек, а также сделает конфигурацию более гибкой.

Сначала реализуйте все шаги, описанные в первой части. Затем прочтите материал, специфичный "доставке по требованию".

Непосредственное конфигурирование sendmail.cf для простых конфигураций

!Непосредственное конфигурирование очень непрактично и негибко, но ведь вы этого хотите.

Найдите в вашем sendmail.cf строку, похожую на эту:

R$* < @ $* $~P > $*		$: $1 < @ $[ $2 $3 $] > $4

Поставьте в начале строки "#", чтобы все выглядело примерно так:

#R$* < @ $* $~P > $*		$: $1 < @ $[ $2 $3 $] > $4

Конфигурирование sendmail.cf, при помощи m4-файлов

Добавьте следующую строку в файл /usr/src/sendmail-8.8.7/cf/cf/имя_вашей_машины.smtp.mc:

FEATURE(nocanonify)dnl

Файл sendmail.cf будет построен автоматически с использованием специальных команд. Сохраните старую версию /etc/sendmail.cf перед тем, как устанавливать новую:

cp /etc/sendmail.cf /etc/sendmail.cf.bak
cd /usr/src/sendmail-8.8.7/cf/cf
m4 yourhostname.smtp.mc > /etc/sendmail.cf

Добавление задержки при доставке

Часто бывает полезным установить некоторую задержку при доставке почты на время набора номера и установления соединения. Это означает, что, если sendmail пытается установить соединение, но получает отказ, так как связь еще не установилась, то он будет ждать некоторое время, а затем пытаться вновь.

Непосредственное конфигурирование sendmail.cf

Где-то в вашем sendmail.cf должна быть строка, похожая на эту:

#O DialDelay=10s

(или очень похожая). Удалите символ "#". Если этого символа уже нет, то значит все в порядке (видимо Вы сделали это ранее).

Если же нет ничего похожего на эту строку, то сами вставьте ее (лучше всего сделать это в разделе "options"):

O DialDelay=10s

А сейчас измените значение "10s" на значение, которое Вы считаете подходящим.

Конфигурирование sendmail.cf, при помощи m4-файлов

Добавьте следующую строку в файл /usr/src/sendmail-8.8.7/cf/cf/имя_вашей_машины.smtp.mc:

define(`confDIAL_DELAY',`10s')

А теперь измените значение"10s" на значение, которое Вы считаете подходящим.

Файл sendmail.cf будет построен автоматически с использованием специальных команд. Сохраните старую версию /etc/sendmail.cf перед тем, как устанавливать новую:

cp /etc/sendmail.cf /etc/sendmail.cf.bak
cd /usr/src/sendmail-8.8.7/cf/cf
m4 yourhostname.smtp.mc > /etc/sendmail.cf