Linux и точки. Настройка Сети.

Настраиваем dial-up соединение с Internet в Linux.

[Сергей Хлутчин]

Вопросы по настройке сети в Linux постоянно всплывают в новостях, поэтому я решил поделиться своим опытом.
Надеюсь что приведенная настройка поможет вам.
Для настройки Linux я использую текстовый редактор и файловые утилиты, никаких диалоговых конфигураторов.
Вся настройка должна производиться привилегированным пользователем (root).
Для удобного восприятия статьи лучше загрузить файлы настройки в виде архива: ppp-conf-2.tar.bz2

Описание ситуации

В данной статье приводится конкретный пример настройки.

  • Операционная система Slackware Linux. О версии судить сложно, так как она обновлялась вручную от третьей до седьмой и что-то возможно осталось от старой версии.
  • Модем USR Courier с дягилевской прошивкой ("Русский курьер"), один.
  • Два провайдера, логины с различными способами начисления стоимости.
  • Бесплатный почтовый ящик на samara21 от Крафт-С.
  • Во всех случаях используется коммутируемая линия и динамический IP-адрес.

Нам понадобится

  • Ядро версии не старее 2.0.36, лучше последнее из серии 2.2.х с включенной поддержкой ppp
  • pppd версии не старее 2.3.10 (более старый можно настроить, но некоторые параметры придется переименовать)
  • командный интерпретатор bash или ash
  • sudo для разрешения выхода в интернет определенным пользователям
  • modutils: insmod, kerneld (только для 2.0.x) соответствующие ядру.
  • minicom - для проверки работоспособности модема и линии
  • ftp для закачки ip-адреса на свою страницу у провайдера
  • sendmail - версии 8.x для отправки почты
  • fetchmail - для ее получения

Файлы настройки

Упоминаемые здесь файлы размещены в следующих каталогах:

/etc

sendmail.cf
sendmail.cf2

/etc/ppp

pap-secrets
ftpparm
options
hippo
dial-hippo
dialin
dial-in
ip-down
ip-up
ppp-hang

/usr/bin

ppp

Настройка PPP

Cначала убедитесь в функционировании модема
Установите ссылку /dev/modem на устройство к которому подключен модем,
обычно это /dev/ttyS0 или /dev/ttyS1
# ln -sf /dev/ttyS0 /dev/modem
Загрузите minicom
# minicom
если minicom неправильно сконфигурирован, он может не запуститься, тогда воспользуйтесь ключом -s:
# minicom -s
и установите параметры модема
после чего проинициализируйте модем и наберите: AT модем должен ответить: OK После этого можно набрать номер сервера доступа провайдера и посмотреть коннект

ATDP430000
CONNECT 33333/ARQ

Если вы добились похожего сообщения, можно переходить к настройке ppp. Файлы настройки pppd собраны в директории /etc/ppp
Запишите сюда указанные выше файлы и отредактируйте их для вашего случая.
Начнем по-порядку

pap-secrets содержит все пароли для протокола авторизации PAP
Замените логины и пароли на ваши
вторая строка :
albina - логин провайдера samtel (Телеграф) и имя компьютера
дальше:
albina - первый логин провайдера hippo (Крафт-С)
belaya - второй логин того же провайдера
khlut - третий логин (бесплатная почта на Крафт-С)
testuser - тестовый логин
guest - входной логин на ваш компьютер
server - имя вашего компьютера

ftpparm содержит команды ftp для записи полученного динамического IP на вашу страницу у провайдера
Этим можно пользоваться например для удаленной настройки компьютера через интернет
Замените
ftp.kraft-s.ru - адрес вашего ftp сервера для доступа к домашней странице
albina - ваш логин
ftppassword - ваш пароль
public_html/IP/albina - путь, где должен лежать файл с IP адресом

hippo это файл дополнительных настроек ориентированных на конкретного провайдера
для другого провайдера его можно скопировать и подкорректировать
debug - запись в системный лог отладочной информации - иногда помогает при определении причины отказа в соединении
nobsdcomp, nodeflate - отключается программное сжатие, т.к. оно обычно не поддерживается серверами удаленного доступа - можно включить, если на другом конце linux или BSD
connect - имя файла со скриптом установки соединения с данным провайдером
idle - время бездействия линии в секундах после которого pppd разорвет связь. В старой версии pppd было использовано другое название данного параметра.

dial-hippo - скрипт дозвона. Функция att вызывается с набираемым номером, если связь установить не удалось - пробуется другой номер и т.д. Лучший номер стоит поставить в начало. Номера здесь соответствуют серверам доступа Крафт-С.
В самой функции можно подрегулировать пределы скорости &N - максимум, &U - минимум. Числа можно получить от модема в minicom по команде AT&$.

dialin - аналогичен файлу hippo, но для входящих соединений, требуются несколько другие настройки.
persist - означает что после разрыва соединение будет устанавливаться заново.
ip:ip - локальный и удаленный адреса
ms-dns - сообщает клиенту что наш сервер является еще и dns сервером
name server - имя сервера в файле pap-secrets после получения логина и пароля в pap-secrets будет искаться строка:
login server pass ip
и выделится указанный ip-адрес, если он не указан в pap-secrets, будет использован адрес из описанного выше параметра.
Модуль компресии здесь включен. Это эффективно, если клиент на linux, если же на том конце windows - он не сможет использовать алгоритм bsdcomp.

dial-in - скрипт ответа на входящий звонок. Аналогичен dial-hippo, за исключением того, что номер не набирается, а ожидается входящий звонок. Скрипт расчитан на то, что в модеме отключен автоматический ответ и установка соединения при входящем звонке.

ip-up - сердце настройки. Этот скрипт pppd вызывает после установки IP-соединеия с дополнительным аргументом, который можно задать с помощью опции pppd ipparam. Этот аргумент используется здесь для выбора режима работы соединения. Скрипт использует каталог /var/run/ip для записи выданного ip-адреса, так что не забудьте создать этот каталог

Логика обработки установки и разрыва соединения

Скрипты ip-up и ip-down специальным образом обрабатывают повторную выдачу одинаковых ip-адресов.
При первом получении адреса перезапускается демон sendmail и очищается каталог /var/run/ip. Далее в нем создается файл с именем соответствующим выданному адресу, куда записывается pid порождаемого фонового процесса, который ждет 5 секунд и за тем запускает sendmail в режиме обработки очереди. По разрыву соединения данный процесс не уничтожается, в надежде на то что может быть выдан тот же ip-адрес повторно. Если выдается повторно тот же адрес, что определяется по существованию файла с таким именем, то ip-up быстро завершается. Если разрыв соединения происходит после завершения процесса обработки почтовой очереди, производятся другие завершающие действия. В случае если связь рвется до завершения sleep, то sendmail -q быстро определит недоступность сети и завершится.
Таким образом удается обойти повторную выдачу ip адреса с трехсекундной задержкой, которую я наблюдал при соединении с сервером USR, и случаи быстрого разрыва связи.
Данный алгоритм конечно не идеален, и я с удовольствием приму ваши предложения по его улучшению, но вполне работоспособен.

Режимы работы соединения

После проверки выделенного адреса в ip-up обрабатывается аргумент $6 содержащий параметр передаваемый через ipparam в pppd.
Поддерживается несколько режимов:
g - полный доступ с периодическим получением и отправкой почты.
gm - забрать почту и закрыть соединение.
u - отправить почту из очереди и закрыть соединение
ug - забрать почту из бесплатного почтового ящика и закрыть соединение
di - вход на сервер через модем - почта не обрабатывается
другое - только запустить обработку почтовой очереди. Это для режима прокси и других вариантов неполного доступа.

Режимы доступа рассмотренных файлов

Скрипты необходимо сделать исполняемыми:

# chmod 744 /ppp/dial-* /ppp/ip-*

Обратите так же внимание на замечания об информационной безопасности в конце данной статьи.

Запуск pppd

Для запуска pppd с данной настройкой используйте следующую команду:

# pppd /dev/modem 115200 file /etc/ppp/hippo user USER ipparam MODE

где:
/etc/ppp/hippo - настройка под конкретного провайдера
USER - PAP login
MODE - режим соединения, как описано выше.

Для упрощения запуска pppd можно использовать скрипт вроде следующего:
ppp
который следует запускать с одним аргументом, указывающим требуемый режим.
Назначение режимов ясно из содержимого файла. Логины конечно надо заменить на свои.
Записав данный файл в общедоступный системный каталог вроде /usr/bin можно позволить непривилегированным пользователям устанавливать соединение через команду sudo.

Настройка Sendmail

Sendmail - универсальная и гибкая программа, но к сожалению ни одна из ее стандартных настроек не подходит для диалапа с динамическими адресами, и с каждой версией авторы ужесточают проверки адресов из-за которых почтовые серверы становятся все более несговорчивыми. В то же время докуметация не успевает за развитием программы. Тем не менее мне кажется удалось на текущий момент решить проблему настройки sendmail для рядового пользователя.

В данной настройке используется 2 конфигурационных файла sendmail: один обычный и /etc/sendmail.cf2 с настройкой на другой почтовый сервер, который используется в режиме отправки почты "u". Он ничем не отличается от /etc/sendmail.cf кроме установки smart host и DeliveryMode.

Найдите в sendmail.cf следующие строки:

# my official domain name
# ... define this only if sendmail cannot
# automatically determine your domain
Dj

добавьте после Dj имя вашего компьютера которое будет использовано при общении с smtp сервером провайдера и в mime-заголовках.
Это доменное имя должно существовать, иначе удаленный сервер может отказать в соединении, в то же время нельзя здесь использовать имя почтового сервера провайдера. Универсального решения наверно не существует. Сейчас я использую имя dial-up.kraft-s.ru. Некоторые серверы требуют чтобы данное имя имело ip адрес, тогда надо поставить что-то другое, может помочь вариант с одним из динамических адресов

# "Smart" relay host (may be null)
DS

Добавьте после DS имя smtp сервера который будет принимать и отправлять далее всю вашу исходящую почту.

# default delivery mode
O DeliveryMode=d

Поставьте режим d (deferred) чтобы sendmail не пытался сразу отправить письмо, а без проверок клал его в очередь. Данный режим включите в sendmail.cf, а в sendmail.cf2 оставьте b - этот режим будет действовать при установленном соединении.

В такой конфигурации sendmail может работать как релейный хост вашей локальной сети, но если почта исходит от localhost sendmail подставит имя указанное в макропеременной, определенной строкой Dj. Это может не понравится некоторым особо придирчивым почтовым серверам. Для решения этой проблемы нужно изменить файл следующим образом:
добавить новые макросы (после Dj):
DAимя
DJхост
где имя@хост - адрес вашего ящика у провайдера.
За тем найдите следующие строки:

###################################################################
### Ruleset 94 -- convert envelope names to masqueraded form ###
###################################################################

S94
R$* < @ *LOCAL* > $* $: $1 < @ $j . > $2

последнюю из них замените на:

R$* < @ *LOCAL* > $* $: $A < @ $J . > $2

Настройка Fetchmail

fetchmail настраивается через файл .fetchmailrc у пользователя, получающего всю почту из почтового ящика у провайдера. В данном случае это - root.
Ниже приведен пример файла /root/.fetchmailrc

poll mail.samaramail.ru protocol pop3 username albina password ***** is boss here
skip samara21.ru protocol pop3 username khlut password ***** is sergey here

skip означает что fetchmail будет работать с этим сервером только при указании его в строке запуска.

Безопасность

Установите правильные режимы доступа к файлам с вашими паролями:

# chown -R root.root /etc/ppp
# chmod 0600 /etc/ppp/pap-secrets /etc/ppp/ftpparm /root/.fetchmail

В режиме DeliveryMode=d sendmail не делает проверок адресов, поэтому не используйте данный режим при постоянном соединении с интернетом, если не хотите, чтобы кто-нибудь использовал ваш сервер как релейный для отправки спама.

Автоматизация

Проверив работоспособность скриптов, можно заставить компьютер периодически выполнять их в режиме получения и отправки почты. Для этого добавьте в файл /var/spool/cron/crontabs/root следующие строки :

30 * * * * /usr/bin/ppp gm
0,15,45 * * * * /usr/bin/ppp u

Теперь каждый час будет забираться почта и каждые 15 минут отправляться. Если очередь пуста, то pppd запускаться не будет - в скрипте ppp есть проверка.

Если вы столкнулись с трудностями при использовании предложенной настройки, обращайтесь за помощью в конференцию kraft.os.linux

Выделенные термины имеют пояснения. LinuxCenter : База Знаний

[Источник Softterra.ru]

[Опубликовано 11.08.2001]

[ опубликовано 22/10/2001 ]

Сергей Хлутчин - Linux и точки. Настройка Сети.   Версия для печати