Как только вы сможете войти в систему вручную, вы можете переделать установки скриптов так для автоматизировать процесс соединения.
Раздел ``Автоматизация ваших соединений - Создание скриптов соединения'' разъясняет установку необходимых скриптов, акцентируя внимание на chat и создании сценариев входа в систему через PPP сервер.
Этот раздел обсуждает скрипты определения имени/пароля пользователя, а также написание скриптов для аутентификации PAP/CHAP на сервере.
Хотя вы можете продолжать регистрироваться вручную как было показано выше, гораздо лучше настроить некоторые скрипты, чтобы для вас это происходило автоматически.
Набор скриптов автоматизирует процесс входа в систему и запускает PPP так что все, что вы должны сделать (от root или как член группы PPP) - дать одну команду запуска вашего соединения.
Версия v3.0, 31 марта 1997
Этот документ рассказывает как подключить ваш Linux PC к серверу PPP, как использовать PPP для того, чтобы связать две LAN вместе и предлагает один из методов настройки вашего компьютера с Linux в качестве сервера PPP. Документ также предлагает помощь по отладке неработающих PPP соединений.
Авторские права
Этот документ распространяется под GPL (GNU Public License).
Распространение
Этот документ отсылаться по мере обновления в comp.os.linux.answers Также он доступен в формате HTML на:
Другие форматы (SGML, ASCII, postscript, DVI) доступны на .
Так как sunsite.unc.edu обычно сильно загружен, пожалуйста, пользуйтесь соответствующими зеркалами.
Подтверждения
Огромное число людей помогло мне в подготовке этого документа. Специальная благодарность Al Longyear за непосредственное руководство по PPP (если здесь имеются ошибки, то они не оттуда), Грэг Ханкинс (ведущий системы Linux Howto) и Debi Tackett (MaximumAccess.com) за множество полезных предложений по стилю, упорядочению содержания, логичность и ясность объяснений.
В заключение, благодарю всех тех людей, которые контактировали со мной по емайл и предлагали комментарии. Как и для всех авторов HOWTO, удовлетворение от помощи всем - эта та плата, которую мы получаем и ее нам достаточно. Написанием этого HOWTO я возмещаю свой маленький долг, который я - и все другие пользователи Linux - должны людям, которые пишут и поддерживают выбранную нами ОС.
Скрипт chat - последовательность пар "ожидаемая строка" "посылаемая строка". В частности обратите внимание, что мы ВСЕГДА ожидаем что-нибудь перед тем, как пошлем что-либо.
Если мы должны послать что-то БЕЗ того, чтобы сначала получить что-нибудь, мы должны использовать пустую строку ожидания (обозначаемую "") и аналогично для ожидания чего-либо без того, чтобы посылания чего-нибудь! Также, если строка состоит из нескольких слов, (например, NO CARRIER), вы должны взять строку в кавычки, чтобы chat вопринял ее как одно целое.
Строка chat в нашем шаблоне:
______________________________________________________________________
exec /usr/sbin/chat -v ______________________________________________________________________
В вызове chat опция -v говорит, чтобы chat копировал ВЕСЬ ввод/вывод в систеный лог (обычно /var/log/messages). Как только вы убедитесь, что скрипт chat работает надежно, отредактируйте эту строку, чтобы удалить -v, чтобы не хранить ненужную информацию в вашем syslog.
______________________________________________________________________
TIMEOUT 3 ______________________________________________________________________
Это устанавливает паузу для получения ожидаемого ввода в 3 секунды. Вы можете увеличить это значение до 5 или 10 секунд, если вы используете медленный модем!
______________________________________________________________________
ABORT '\nBUSY\r' ______________________________________________________________________
Если получена строка BUSY, то операция аварийно прекращается.
______________________________________________________________________
ABORT '\nNO ANSWER\r' ______________________________________________________________________
Если получена строка NO ANSWER, то операция аварийно прекращается.
______________________________________________________________________
ABORT '\nRINGING\r\n\r\nRINGING\r' ______________________________________________________________________
Если (повторимся) получена строка RINGING, то операция аварийно прекращается.
Это потому, что кто-то сидит на вашей телефонной линии!
Советую почитать пользователям:
документация, которая приходит с PPP пакетом;
man pppd и man chat;
Linux Network Administration Guide (NAG); см.
Net-2/3 HOWTO; см.
документация по ядру Linux, установленная в /usr/src/linux/Documentation, во время устанавки исходных текстов Linux;
страница информации по установке модема - см.
Превосходные книги Unix/Linux, изданные O'Reilly и Ассоциацией. См. . Если вы плохо знакомы с Unix/Linux, сбегайте (не сходите) к вашему самому близкому компьютерному книжному магазину и купите их немедленно!
PPP-FAQ, поддерживаемый Al Longyear, доступный из . Он содержит много полезной информации в формате вопрос/ответ, что является очень полезным при выяснении, почему PPP не работает (правильно).
возрастастающее количество книг по Linux от различных издательств и авторов; вы стесняйтесь проверять ценность этих книг.
Разработка Linux и дистрибутивов имеют стремительную тенденцию развития, в то время, как выпуск книг в новой редакции (вообще) намного медленнее! Покупка превосходной книги (и таких много), которая сегодня является устаревшей, вызовет у новых пользователей значительное беспокойство и расстройство.
Самая лучшая общая отправная точка для Linux документации - домашняя страница . HOWTO имеет тенденцию пересматриваться достаточно регулярно.
Хотя вы можете использовать этот документ для создания вашего соединения PPP без необходимости читать любой из этих документов, в таком случае вы не будете понимать, что именно вы делаете! Также вы сможете самостоятельно сформулировать проблемы (или по крайней мере задавать более интеллектуальные вопросы в группах новостей comp.os.linux ... или списках почтовой рассылки по Linux).
Эти документы (также как и различные другие, включая RFCS) обеспечивают дополнительные и более детальные объяснения, чем можно сделать в этом HOWTO.
Если вы соединяете LAN с Интернет, используя PPP, вы должны обладать приемлемым уровнем знаний о работе с TCP/IP сетями. В дополнение к документам выше вы найдете много полезного в книгах O'Reilly "Сетевое администрирование TCP/IP" и "Построение файерволов Интернет"!
Имеется много причин, кроме перечисленных, по которым ppp будет не в состоянии соединиться и/или функционировать правильно.
Смотрите PPP FAQ (который является набором вопросов и ответов). Это - очень всесторонний документ, и ответы там ЕСТЬ! Из моего собственного (грустного) опыта, если там нет ответа на ваши вопросы, то проблема - НЕ в ppp! В моем случае я использовал ELF ядро, которое я не нарастил до возможностей, соответствующих ядерным модулям.
Я потратил впустую около 2 дней (и часть ночи), ругая прекрасно работающий PPP сервер, пока меня не осенило!
Многие люди затрудняются установить PPP связь. Разновидностей PPP серверов и их требований к установке соединения очень много. Точно так же имеется много опций PPP - и некоторые их комбинации не работают вместе.
К проблемам регистрации и запуска PPP обслуживания также добавляются проблемы с модемами и фактическими телефонными линиями!
Раздел ``Решение проблем" предлагает некоторую основную информацию об общих ошибках, как их изолировать и исправить.
Он НЕ ставит своей задачей дать больше, чем только основы. Al Longyear поддерживает PPP-FAQ, который содержит много подробной информации по этой теме!
Многие ISP и корпоративные PPP серверы используют PAP. Если ваш сервер не требует для вы использовали PAP (если вы можете регистрировать вручную и получать стандартную текстовую подсказку входа в систему (логин/пароль), значит он не использует PAP), то вы можете спокойно проигнорировать этот раздел.
Вместо того для регистрироваться на таком сервере, используя имя пользователя и пароля когда их ввод запрошен сервером, PPP сервер, использующий PAP не требует обычного ввода логина/пароля для входа в систему.
Вместо этого информация установления подлинности пользователя идет как часть протокола управления связи (LCP), который является первым шагом установления связи PPP.
Раздел ``Если ваш PPP сервер использует PAP (Password Autentificaion Protocol)" предоставляет информацию о файлах, которые вы должны инсталлировать, чтобы установить связь PPP, используя PAP.
Если сервер, с которым вы соединяетесь, требует PAP или CHAP, то вам придется поработать несколько больше.
К вышеупомянутому файлу options добавьте следующие строки
______________________________________________________________________ # # заставить pppd использовать ваше ISP имя пользователя в качестве вашего # 'имени хоста' при аутентификации name <your ISP user name> # исправьте эту строку как вам нужно # # Если вы запустили PPP *сервер* и непременно нужен PAP или CHAP # раскомментируйте соответственно одну из этих строк. НЕ используйте их, # если вы - клиент, подключающийся к PPP серверу (даже если он использует PAP # или CHAP), так как это говорит СЕРВЕРУ аутентифицировать себя на вашей # машине (что почти никогда нельзя сделать - и связь не будет установлена). #+chap #+pap # # Если вы используете ЗАШИФРОВАННЫЕ сведения в файле /etc/ppp/pap-secrets, # то раскомментируйте следующую строку. # Заметьте: это НЕ тоже, что использование MS шифрации паролей, которая # может стоять на MS RAS Windows NT. #+papcrypt ______________________________________________________________________
Вы должны также проверить, что ваш файл /etc/host.conf правильно настроен. Он должен выглядеть примерно так
______________________________________________________________________
order hosts,bind multi on ______________________________________________________________________
Эти строки сообщают resolver'у, что сперва надо искать информацию в файле хостов, а потом уже посылать DNS запросы.
Служба поддержки пользователей вашего PPP сервера должна обеспечить вас IP адресами DNS (необходим только один - но два адреса дают некоторую избыточность в случае отказа одного из них).
Как упоминалось выше, Linux не может устанавливать IP адрес сервера имен тем же способом, что и MS WINDOWS 95. Так что вы должны настоять (вежливо), чтобы ваш ISP обеспечил вас этой информацией!
Ваш /etc/resolv.conf должен выглядеть примерно так:
______________________________________________________________________
domain your.isp.domain.name nameserver 10.25.0.1 nameserver 10.25.1.2 ______________________________________________________________________
Отредактируйте этот файл (создайте в случае необходимости) так, чтобы прописать информацию, которую дал ваш ISP. Он должен иметь следующие права владения и доступа:
-rw-r--r-- 1 root root 73 Feb 19 01:46 /etc/resolv.conf
Если вы уже настроили /etc/resolv.conf, потому что вы находитесь в LAN, просто добавьте IP адреса PPP DNS серверов к вашему существующему файлу.
Некоторые дистрибутивы PPP, кажется, потеряли файл options.tpl, так что вот полный файл. Я предлагаю вам не редактировать этот файл, а создать ваш(и) файл(ы) /etc/ppp/options. Достаточно скопировать его в новый файл и затем отредактировать. Если вы запутались в ваших иправлениях, то вы можете затем вернуться к оригиналу и начать снова.
______________________________________________________________________ # /etc/ppp/options -*- sh -*- общие опции для pppd # создано 13-Jul-1995 jmk # автоматически проставленная дата: 01-Aug-1995 # автоматически проставленное время: 19:45
# Использовать указанную команду или программу для настройки линии. Этот # обычно использует программу "chat", чтобы позвонить модемом и запустить # удаленную ppp сессию. #connect "echo Вам нужно установить команду connect."
# Запустить указанную команду или программу, когда pppd завершил связь. # Этот скрипт мог бы, к примеру, ввести команды в модем, чтобы завершить # связь, если сигналы аппартного управления модемом недоступны #disconnect "chat -- \d+++\d\c OK ath0 OK"
# async карта символов -- 32-bit hex; каждый бит - символ, который надо # представить в виде escape-последовательности, чтобы pppd мог его принять. # 0x00000001 - это маска для '\x01', а 0x80000000 - маска для '\x1f'. #asyncmap 0
# Требование для удаленной стороны назвать себя перед тем как начнется обмен # пакетами. #auth
# Использовать аппаратное управление потоком данных (напр., RTS/CTS), чтобы # управлять потоком данных на последовательном порту #crtscts
# Использовать программное управление потоком данных (напр., XON/XOFF), чтобы # управлять потоком данных на последовательном порту #xonxoff
# Добавить маршрут по умолчанию в системную таблицу маршрутизации, # используя удаленную сторону как шлюз, когда договоренность IPCP успешно # достигнута. Эта запись удаляется при завершении связи #defaultroute
# Определяет, что некоторые символы должны быть за'escape'лены при передаче # (Независимо от того, просила ли удаленная сторона их escape'ить своей # async картой управляющих символов). Символы, которые надо escape'ить # указываются в виде списка шестнадцатиричных чисел, разделенных запятыми. # Заметьте, что для опции escape могут быть указаны почти все символы, в # отличие от опции asyncmap, которая позволяет указывать только управляющие # символы. Символы, которых нельзя escape'ить - это 0x20 - 0x3f или 0x5e. #escape 11,13,ff
Он требует, чтобы вы имели взаимно опознавательные методы - вы должен позволить и вашей машине опознать удаленный сервер И удаленному серверу опознать вашу машину.
Итак, если ваша машина - fred и удаленная - barney, то ваша машина установила бы name fred remotename barney, а удаленная машина установит name barney remotename fred в их соответствующих файлах /etc/ppp/options.ttySx .
/etc/chap-secrets файл для fred такой
______________________________________________________________________ <p>
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses fred barney flintstone barney fred wilma ______________________________________________________________________
а для barney
______________________________________________________________________
# Secrets for authentication using CHAP # client server secret acceptable local IP addresses barney fred flintstone fred barney wilma ______________________________________________________________________
Обратите внимание в частности, что обе машины должны иметь записи для двунаправленного установления подлинности. Это позволяет локальной машине называть себя на удаленной машине И удаленной машине называть себя на локальной машине.
Файл /etc/ppp/pap-secrets выглядит примерно так:
______________________________________________________________________
# Secrets for authentication using PAP # client server secret acceptable_local_IP_addresses
______________________________________________________________________
Четыре поля - разграниченные пробельными символами, причем последнее может быть пустым (которое вы можете захотеть использовать для динамического и вероятно статического IP распределение от вашего ISP).
Предположим, что ваш ISP дал вам имя пользователя fred и пароль flintstone, установите опцию name fred в /etc/ppp/options[.ttySx] и настройте ваш файл /etc/ppp/pap-secrets следующим образом
______________________________________________________________________
# Secrets for authentication using PAP # client server secret acceptable local IP addresses fred * flintstone ______________________________________________________________________
Обратите внимание, что мы не должны определять локальный адрес IP, если мы не требуем ПРИНУДИТЕЛЬНО выставить локальный, статический адрес IP. Даже если вы попробуете это сделать, вряд ли что-нибудь получиться, так как большинство PPP серверов (для защиты) не позволяют удаленной системе устанавливать свой IP адрес, они должны быть выданы со стороны ISP.
Если вы используете установление подлинности по pap или chap, то вы также должны создать файл секретов. Это:
______________________________________________________________________
/etc/ppp/pap-secrets /etc/ppp/chap-secrets ______________________________________________________________________
Для защиты они должны принадлежать пользователю root, группе root и иметь права доступа к файлу 740.
Первое, на что надо обратить внимание насчет PAP и CHAP - то, что они разработаны, чтобы опознавать компьютерные системы, а не пользователей.
"Оп-па!.. А какая разнаца? " слышу я ваш вопрос.
А такая что, как только ваш компьютер создал PPP соединение с сервером, ЛЮБОЙ пользователь вашей системы может использовать это соединение - не только вы. Именно поэтому вы можете устанавливать WAN связь, которая соединяет две LAN, используя PPP.
PAP может требовать (а CHAP ТРЕБУЕТ) двунаправленного установления подлинности, то есть компьютер на каждом конце соединения должен иметь правильные имя и пароль другой стороны. Однако, большинство PPP серверов с доступом по коммутируемым линиям, использующие PAP, этим способом НЕ пользуются.
Как уже упоминалось, ваш ISP вероятно даст вам имя пользователя и пароль, чтобы позволить вам соединяться с их системой и выходить дальше в Интернет. Ваш ISP не интересуется именем вашего компьютера вообще, так что вы вероятно будете должны использовать ваше ISP имя пользователя как имя вашего компьютера.
Это делается, используя имя пользователя в опции name pppd. Так, если вы должны использовать имя пользователя, выданное вам вашим ISP, добавьте строку
______________________________________________________________________
name your_user name_at_your_ISP
______________________________________________________________________
к вашему файлу /etc/ppp/options.
Технически, вы действительно должны использовать пользователя our_user name_at_your_ISP для PAP, но pppd достаточно интеллектуален, чтобы интерпретировать имя как пользователя, если это требуется для использования PAP. Преимущество использования опции name в том, что она также является допустимой для CHAP.
Так как PAP служит для опознания компьютеров, технически вы должны также определить удаленное компьютерное имя. Однако, поскольку большинство людей работает только с одним ISP, то вы можете использовать групповой символ (*) для удаленного имени хоста в файле секретов.
Также стоит заметить, что многие ISP применяют модемные пуллы, соединенные с различными терминальными серверами - каждый со своим именем, но ДОСТУПНЫЙ с одного (циклически переключаемого) входного номера. Следовательно может быть очень трудно при некоторых обстоятельствах знать заранее имя удаленного компьютера, поскольку это зависит от того, к какому терминальному серверу вы подсоединились!
Хорошая проверка для ядра - команда uname -a, которая должна вывести
______________________________________________________________________
Linux archenland 2.0.28 #2 Thu Feb 13 12:31:37 EST 1997 i586 ______________________________________________________________________
Выведены версия ядра и дата, когда это ядро компилировалось - этого должно быть достаточно, чтобы разобраться с данным вопросом.
Исторически, Linux использовал для исходящих звонков устройства cuaX и устройства ttySx для входящих звонков.
Код ядра, который требовал это был изменен в версиях ядер 2.0.x, и вы должны теперь использовать ttySx и для исходящих, и для входящих звонков. Я полагаю, что имена устройств cuaX могут совсем исчезнуть в будущих версиях ядра.
На некоторых инсталляциях (например Red Hat и Caldera), имеется PPP система работы по телефонной линиии, настроенная для X Windows. Этот HOWTO не раскрывает эти дистрибутивные специфические инструментальные средства. Если у вас есть проблемы с ними, войдите в контакт с непосредственно дистрибьюторами!
Для пользователей Red Hat 4.x, теперь имеется Red Hat PPP-TIP
в области ресурсов Linux и также на Red Hat Software в области поддержки.
Каждое устройство, которое соединяется с Интернет, должно иметь собственный, уникальный IP адрес. Они назначаются централизованно соответствующей полномочной организацией каждой страны.
Если вы подключаете локальную сеть (LAN) к Internet, вы ДОЛЖНЫ использовать IP адрес из назначенного вашей сети диапазона адресов компьютеров и устройств, которые составляют вашу локальную сеть. Вы НЕ МОЖЕТЕ взять такие IP адреса, какие вам захотелось и использовать их при соединении с другими LAN (уже не говоря о Интернете). В худшем случае просто ничего не будет работать вообще и может вызывать общий бардак, когда ваш 'захваченный' IP адрес начнет конфликтовать с другим компьютером, который уже использует IP адрес, который вы выбрали с бухты-барахты.
Пожалуйста, заметьте, что IP адреса, используемые в этом докумение (с некоторыми исключениями) принадлежат диапазону 'адресов неподсоединенных сетей', которые зарезервированы для использования в сетях, неподключенных к Internet.
Имеются IP адреса, которые специально выделены LAN, которые не соединяются с Интернетом. Вот эти адреса:
Один адрес сети класса A
10.0.0.0 (сетевая маска 255.0.0.0)
16 адресов сетей класса B
172.16.0.0 - 172.31.0.0 (сетевая маска 255.255.0.0)
256 адресов сетей класса C
192.168.0.0 - 192.168.255.0 (сетевая маска 255.255.255.0)
Если для вашей локальной сети не было выделено пространство IP адресов специальной организацией вашей страны, то вам надо использовать для ваших машин один из приведенных выше сетевых адресов.
Эти адреса никогда не должны использоваться в Internet.
Однако, они могут использоваться для локальной сети ethernet на машине, которая соединяется с Интернетом. Это потому, что IP адреса фактически назначены сетевому интерфейсу, не компьютеру. Так, ваш интерфейс ethernet может использовать 10.0.0.1 (например), а когда вы подключаетесь к Интернет, используя PPP, вашему PPP интерфейсу сервером будет назначен другой (допустимый) IP адрес. Ваш PC будет связан с Интернет, а другие компьютеры вашей LAN - нет.
Однако, при использовании Linux и возможности IP Masquerade (также известный как трансляция сетевых адресов NAT) с помощью Linux и программного обеспечения ipfwadm, вы можете соединить вашу LAN с Интернет (с некоторым ограничением услуг), даже если вы не имеете допустимых IP адресов для машин вашего ethernet.
Для подробной информации как это сделать см. IP Masquerade mini-HOWTO по адресу
Для большинства пользователей, которые подключают одиночную машину к поставщику услуг Интернета через PPP, получение IP адреса (или более точно, сетевого адреса) не нужно.
Если вы желаете соединить маленькую LAN с Интернет, многие поставщики услуг Интернет (ISP) могут обеспечить вас выделенной подсетью (специфической последовательностью IP адресов) из их существующего IP адресного пространства. В качестве альтернативы, используйте IP Masquerading.
Для пользователей, которые соединяют отдельный PC с Интернет через ISP, большинство поставщиков использует динамическое назначение IP адреса. То есть как часть процесса соединения, PPP сервис, с которым вы входите в контакт, сообщит вашей машине, какой IP адрес надо использовать для связи с помощью PPP интерфейса в течение текущего сеанса. Этот номер не обязательно будет таким же при последующем соединении с вашим ISP.
С динамическими IP адресами, вам не назначается один и тот же IP адрес при каждом сеансе соединения. Это имеет значение для серверных приложений на вашей Linux машине вроде sendmail, ftpd, httpd и т.д. Эти услуги основаны на той предпосылке, что компьютер, предлагающий обслуживание, доступен по тому же самому IP адресу все время (или по крайней мере тому же самому полностью квалифицированному имени области - FQDN - и что DNS доступен).
Ограничения обслуживания из-за динамического назначения IP ареса (и способы работать с ними, когда возможно) обсуждены в документе ниже.
Вы можете создать скрипт, который будет выполняться, как только связь будет завершена. Он называется /etc/ppp/ip-down. Он может использоваться, чтобы отменить что-нибудь, чтой вы сделали в соответствующем скрипте /etc/ppp/ip-up.
Windows NT Microsoft RAS может использовать разновидность CHAP. В вашем дистрибутиве исходных текстов PPP, вы найдете файл README.MSCHAP80, который обсуждает этот вопрос.
Вы можете определить, запрашивает ли сервер установление подлинности, используя этот протокол, разрешив отладку для pppd. Если сервер запрашивает установление подлинности по MS CHAP, то вы увидите строки типа
______________________________________________________________________
rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>] ______________________________________________________________________
Критическая информация здесь - auth chap 80.
Для того, чтобы использовать MS CHAP, вы должны будете пересобрать pppd, чтобы вкомпилировать эту поддержку. Пожалуйста, см. инструкции в файле README.MSCHAP80 в исходных текстах PPP, чтобы узнать, как вкомпилировать и использовать этот протокол.
Вы должны обратить внимание, что в настоящее время этот код в Linux поддерживает только клиент PPP, соединяющийся с сервером MS WINDOWS NT. Сервер PPP в Linux не поддерживает этот протокол для установления подлинности клиентов по протоколу MSCHAP80.
Поскольку PPP должен настроить сетевые устройства, измените таблицу маршрутизации ядра и т.д, что требует привилегий root.
Если пользователи (не root) должны устанавливать PPP соединение, то программа pppd должна были setuid root:
-rwsr-xr-x 1 root root 95225 Jul 11 00:27 /usr/sbin/pppd
Если /usr/sbin/pppd не setuid, то зарегитрируйтесь как root и дайте команду:
chmod u+s /usr/sbin/pppd
После этого pppd бкдет запускаться с привилегиями root, даже если запущен обычным пользователем. Это позволяет нормальному пользователю выполнять pppd с необходимыми привилегиями, чтобы настроить сетевые интерфейсы и таблицу маршрутизации ядра.
Программы, которые выполняют 'set uid root', являются потенциальными лазейками в защите системы, и вы должны быть чрезвычайно осторожны при создании программ 'suid root'. Ряд программ (включая pppd) был тщательно написан с точки зрения минимизации опасности выполнения suid root, так что вы должны быть защищены (но все-таки гарантий нет).
В зависимости от того, как вы хотите, чтобы ваша система работала - особенно если вы хотите, чтобы ЛЮБОЙ пользователь вашей системы мог инициализировать PPP связь, то вы должны сделать ваш набор скриптов ppp-on/off читаемым/выполнимым. (Наверное это здорово, когда PC используется ТОЛЬКО Вами).
Однако, если вы НЕ хотите, чтобы любой человек мог запускать PPP соединение (например, ваши дети имеет аккаунты на вашем Linux PC, и вы не хотите, чтобы они выходили в Интернет без вашего разрешения), то вы должны будете настроить группу PPP (как root, отредактировать /etc/group) и:
сделайте для файла pppd - suid root, владелец root и группа PPP, с очищенными правами 'other'. Это должно затем походить
-rwsr-x--- 1 root PPP 95225 Jul 11 00:27 /usr/sbin/pppd
сделайте для скриптов ppp-on\off - владелец root и группа PPP
сделайте скрипты ppp-on/off читаемыми/выполнимыми группой PPP
-rwxr-x--- 1 root PPP 587 Mar 14 1995 /usr/sbin/ppp-on -rwxr-x--- 1 root PPP 631 Mar 14 1995 /usr/sbin/ppp-off
обнулите права other для ppp-on/off.
добавьте пользователей, которые будут запускать PPP в группу PPP в /etc/group
Даже если вы сделали это, обычные пользователи ВСЕ ЕЩЕ не могут завершить связь программно! Выполнение сценария ppp-off требует привилегий root. Однако, любой пользователь может только выключить модем (или выдернуть телефонную линию из внутреннего модема).
Вариант (и лучший метод), чтобы это настроить, состоит в использовании программы sudo. Она предлагает повышенную защиту и позволит вам настроить систему так, чтобы любой (разрешенный) пользователь мог активизировать/дезактивировать связь, используя скрипты. Использование sudo позволит разрешенному пользователю активизировать/дезактивировать связь PPP чисто и надежно.
Это очень просто - модема нет, так что дело значительно упрощается.
Прежде всего выберите одну из машин как 'сервер', установив getty на последовательный порт, так что вы можете проверить, что связь имеется, используя minicom, чтобы обратиться к последовательному порту на 'клиенте'.
Как только связь заработает, вы можете удалять getty если вы НЕ хотите удостовериться, что соединение работает, используя пару имя/пароль пользователя, как для модемного соединения. Поскольку вы имеете 'физическое управление' обеими машинами, я буду предполагать, что вы не хотите делать это.
Теперь, на сервере удалите getty, и удостоверьтесь, что вы имеете последовательные порты на обеих машинах, правильно сконфигурированные, используя 'setserial'.
Все, что вы должны сделать теперь, это запустить pppd на обеих системах. Я буду предполагать, что соединение использует /dev/ttyS34 на обеих машинах. Так, на обеих машинах выполните команду:
______________________________________________________________________
pppd -detach crtscts lock <local IP>:<remote IP> /dev/ttyS3 38400 & ______________________________________________________________________
Это установит связь - но пока еще у вас нет определенной маршрутизации. Вы можете проверить связь, пингуя обе машины. Если это работает, прекратите связь, уничтожив один из процессов pppd.
Какая вам нужна маршрутизация - это конечно зависит от того, что вы пытаетесь сделать. В общем случае, одна из машин будет соединена с ethernet (и внешним миром), и тогда требуется маршрутизация такая же, как для PPP сервера и клиента.
Так на машине оборудованной Ethernet, pppd команда будет
______________________________________________________________________
pppd -detach crtscts lock proxyarp <local IP>:<remote IP> /dev/ttyS3 38400 & ______________________________________________________________________
а на другой машине
______________________________________________________________________
pppd -detach crtscts lock defaultroute <local IP>:<remote IP> /dev/ttyS3 38400 & ______________________________________________________________________
Если вы связываете две сети (используя последовательную связь!) или реализуете более сложные требования маршрутизации, то вы можете использовать /etc/ppp/ip-up точно тем же образом, как упомянуто выше в этом документе.
Robert Hart Port Hedland, Western Australia Melbourne, Victoria, Australia August/October 1996 January/March 1997
Этот документ обеспечивает краткий обзор по использованию PPP для связи двух Linux PC через нулевой(пустой) модемный кабель. Этим способом также возможно связать другие OS с Linux. Чтобы это сделать, вы должны будете проконсультироваться с документацией по операционной системе, которая вас интересует.
Если вы используете динамические IP адреса (и многие поставщики услуг дадут вам только динамический IP адрес, если вы не захотите платить значительно больше для вашего соединения), то вы должны знать об ограничениях, которые при этом налагаются.
Прежде всего, прекрасно будут работать только исходящие запросы на обслуживание. То есть вы можете посылать email используя sendmail (если он у вас правильно установлен), скачивать по ftp файлы из удаленных мест, использовать finger на другие машины, бродить по веб и т.д.
В частности, вы можете отвечать на email, который вы сбросили на вашу машину, хотя вы отключены от линии. Почта будет просто находиться в вашей почтовой очереди, пока вы не позвоните опять вашему ISP.
Однако, ваша машина не соединена с Интернетом 24 часа в день и вдобавок не имеет один и тот же IP адрес при каждом соединении. Так что вы не можете получить email, отправленный вашей машине, и очень трудно установить такой веб или ftp сервер, к которому могут обращаться ваши друзья! Относительно Интернет, ваша машина не существует как уникальная, постоянно доступная машина, поскольку не имеет уникального IP адреса (помните - другие машины будут использовать этот IP адрес, когда они звонят вашему провайдеру).
Если вы устанавливаете WWW (или любой другой сервер), это полностью неизвестно остальным пользователем Интернет, ЕСЛИ они не знают, что ваша машина сейчас соединена с Интернет И каков ваш текущий IP адрес. Имеется ряд способов, которым они могут получать эту информацию, надо им об этом сообщить либо почтой, либо хитрым использованием ".plan" файлов в shell аккаунта вашего поставщика услуг (полагая, что ваш поставщик позволяет доступ к shell и finger).
Теперь, для большинства пользователей, это не проблема - все, что хочет большинство людей - это посылать и получать email (используя учетную запись поставщика услуг) и бродить по WWW, ftp и другим серверам в Интернет. Если вы ДОЛЖНЫ осуществлять входящие соединения с вашим сервером, вы должны получить статический IP адрес. В качестве альтернативы вы можете исследовать методы, упомянутые выше ...
Если вы используете динамические IP адреса, то это совершенно нормально. См. "Настройка услуг" ниже.
Хорошо - ваше PPP соединение установлено, и вы можете пинговать IP адрес PPP сервера (второй или "удаленный" IP адрес показывается командой ifconfig ppp0), но вы не можете выйти дальше этого PPP сервера.
Прежде всего, пробуйте пинговать IP адреса, которые вы определили в /etc/resolv.conf как DNS. Если это работает, то вы можете выйти дальше вашего PPP сервера (если DNS имеет не тот же самый IP адрес, как и "удаленный" IP адрес вашего соединения). Теперь пробуйте пинговать полное Internet имя вашего поставщика услуг, например
ping my.provider.net.au
Если это не работает, то у вас проблему с преобразованием доменных имен.
Вероятно это из-за опечатки в вашем файле /etc/resolv.conf.
Тщательно проверьте всю информацию, касающуюся вашего поставщика услуг. Если все правильно, позвоните вашему поставщику услуг и убедитесь, что вы правильно записали IP адреса.
Если соединение ВСЕ ЕЩЕ не работает (и ваш поставщик услуг подтверждает, что его DNS работают правильно), то у вас проблемы где-то еще, и я предлагаю вам тщательно проверить вашу установку Linux (особенно рекомендую проверить прав доступа к файлам).
Если вы ВСЕ ЕЩЕ не можете пинговать IP DNS вашего поставщика услуг по IP адресам, или они в действительности не работают (сделайте голосовой звонок и проверьте) или это проблема маршрутизации у вашего поставщике услуг. Снова, позвоните им и предложите проверьте это.
Одна из версий заключается в том, что на "удаленном конце" стоит Linux PPP сервер, на котором опция IP форвардинга не была определена в ядре!
Хороший общий тест - это попробовать соединиться с вашим поставщиком услуг, используя программное обеспечение, которым пользуется большинство, для Microsoft Windows. Если все работает на другой операционной системе для этого же аккаунта, то проблема - с вашей Linux системой, а НЕ вашим поставщиком услуг.
Самая общая проблема состоит в том, что люди компилируют поддержку PPP в ядро и тем не менее, когда они пытаются выполнить pppd, ядро жалуется, что оно не поддерживает ppp! Имеется ряд причин, посему это может происходить.
Компилирование программное обеспечение PPP демона. См. документацию, которая приходит с версией pppd, который вы используете.
Соединение и конфигурирование модема в Linux (подробно). См. Serial-HOWTO и специфическую для модема инициализацию, см. Информацию по установке модема для информации, которая может помочь вам сконфигурировать ваш модем.
Использование dip для создания PPP соединений. Взамен этого используется chat
Использование socks или IP Masquerade. Имеются прекрасные документы, уже объясняющие эти два пакета.
Использование diald для установки автоматизированного соединения. См. документацию по diald.
Использование EQL для создания единого канала связи по двум модемным линкам.
Специфические для дистрибутива методы соединения по PPP (типа инструмента конфигурации сети Red Hat 4.x). См. дистрибутив для документации по используемым методам.
Возрастастающее число инструментальных средств, доступных для автоматизации установления PPP. См. соответствующую документацию.
Ну, как и во всех вещах, это зависит от многого (вздох). Опции, определенные здесь должны работать с большинством серверов.
Однако, если они не работает, ЧИТАЙТЕ ФАЙЛ-ШАБЛОН (/etc/ppp/options.tpl) и man pppd, и поговорите со службой поддержки сервера, к которому вы подсоединяетесь.
Вы должны также обратить внимание, что скрипты соединения, представленные здесь также используют некоторые опции командной строки для pppd, что позволяет более просто вносить изменения
______________________________________________________________________ # /etc/ppp/options (NO PAP/CHAP) # # Чтобы pppd не уходил в фоновый режим -detach # # использовать линии управления модемом modem # использовать залочку портов в стиле uucp, чтобы одновременно несколько # последовательных устройств не обращались к одному порту lock # использовать аппаратное управление потоком данных crtscts # сделать это соединение маршрутом по умолчанию в таблице маршрутизации defaultroute # НИЧЕГО не "escape-ить" asyncmap 0 # использовать максмальный размер передаваемого пакета в 552 байт mtu 552 # использовать максмальный размер принимаемого пакета в 552 байт mru 552 # #-------END OF SAMPLE /etc/ppp/options (no PAP/CHAP) ______________________________________________________________________
PPP строго двухточечный протокол; (технически) нет различий между машиной, которая дозвонилась, и машиной, которая приняла звонок. Однако, для наглядности, полезно рассматривать это соединение с точки зрения архитектуры "клиент-сервер".
Когда вы звоните на сайт, чтобы установить соединение PPP, вы - клиент, а машина, к которой вы подключаетесь - сервер.
Когда вы настраиваете вашу машину с Linux для приема и обработки звонков с соединением по PPP, вы устанавливаете PPP сервер.
Любой Linux PC может быть и PPP сервером и клиентом одновременно, Если у вас есть больше одного последовательного порта (и модема, если нужно). Как говорилось выше, реальных различий между клиентами и серверами в отношении соединения PPP нет.
Этот документ машину, которая инициирует звонок (которые дозваниваются), считает клиентом, а машину, которая отвечает на звонок, проверяет личность звонящего (с помощью имени пользователя, пароля и, возможно, других механизмов), считает СЕРВЕРОМ.
Использование PPP в качестве клиента, чтобы подключить одну или более машин к Интернет, вероятно, то, что интересует большинство тех людей, которые используют свои Linux PC как клиенты.
Процедура, описанная в этом документе позволит вам установить и автоматизировать ваше соединение с Интернет.
Этот документ также предоставит вам руководство по установке вашего Linux PC в качестве PPP сервера, и по связыванию двух LAN вместе (с полной маршрутизацией) с использованием PPP (это часто характеризуется как установление WAN-связи).
Примените все ранее высказанные комментарии о компиляции ядра и версиях ядра и соответствующих версий pppd. В этом разделе предполагается, что вы читали предыдущие разделы этого документа!
Для PPP сервера, Вы ДОЛЖНЫ включить IP forwarding в вашем ядре. Вы можете также захотеть включить другие возможности (типа IP fire wall, учета пользователей и т.д и т.д).
Если вы используете многопортовую последовательную плату, то вы очевидно также включили необходимые драйверы в ваше ядро!
Для Linux 1.3x и 2.0.x процесс настройки аналогичен настройке ядра 1.2.13. Снова следуйте инструкциям файла README, чтобы правильно установить исходники. Вы начинаете процесс конфигурации ядра командой
make config
Однако, вы также можете выбрать
make menuconfig
Это команда запускает менюоснованную систему настройки с интерактивной справкой, которая позволяет вам двигаться в обратном направлении и вперед в процессе конфигурации.
Имеется также настойчиво рекомендуемый интерфейс настройки для X Window System
make xconfig
Вы можете вкомпилировать поддержку PPP непосредственно в ваше ядро или как загружаемый модуль.
Если вы используете PPP непостоянно, то рекомендуется компилировать PPP поддержку как загружаемый модуль. При использовании 'kerneld', ваше ядро автоматически загрузит модуль(и), требуемый для обеспечения поддержки PPP, когда вы начинаете ваш процесс связи PPP. Это сохраняет ценное пространство ОЗУ: часть ядра не может быть выгружена из памяти, а загружаемые модули автоматически удаляются, если не используются.
Чтобы сделать это, вы должны разрешить возможность загрузки модулей:
______________________________________________________________________
Enable loadable module support (CONFIG_MODULES) [Y/n/?] y ______________________________________________________________________
Чтобы добавить поддержку PPP в ядро, ответьте на следующий вопрос:
______________________________________________________________________
PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?] ______________________________________________________________________
Для загружаемого модуля PPP, ответьте M, иначе, для компиляции PPP в ядро, ответьте Y.
В отличие от ядра 1.2.13, ядро 2.0.x создает PPP устройства на лету по необходимости и не нужно править источники, чтобы увеличить число доступных PPP устройств.
Для того чтобы использовать PPP, ваше ядро Linux должно быть скомпилировано с включенной поддержкой PPP. Возьмите исходный текст для вашего ядра Linux, если у вас его еще нет - он лежит в /usr/src/linux в стандартной файловой системе Линукса.
Проверьте этот каталог - многие дистрибутивы Linux, устанавливают дерево исходных текстов (файлы и подкаталоги) в процессе инсталляции.
При загрузке, ваше ядро Linux печатает много полезной информации.
В ней можно найти информацию о поддержке PPP, если ядро включает ее. Чтобы просмотреть эту информацию, посмотрите ваш файл syslog или используйте dmesg | less, чтобы отобразить информацию на экране. Если ваше ядро включает поддержку PPP, вы увидите строки типа
______________________________________________________________________
PPP Dynamic channel allocation code copyright 1995 Caldera, Inc. PPP line discipline registered. ______________________________________________________________________
( это для версий ядра Linux 2.0.x).
Исходные тексты ядра Linux могут быть получены по ftp с sunsite.unc.edu или зеркал.
Для PPP вы должны будете сконфигурировать ваш модем правильно - чтобы сделать это ПРОЧТИТЕ РУКОВОДСТВО ПО ВАШЕМУ МОДЕМУ! Большинство модемов приходит с фаюричной настройкой по умолчанию, в которой определены опции, требуемые для PPP. Минимальная конфигурация определяет:
Аппаратное управление потоком данных (RTS/CTS) (&K3 на многих Hayes модемах)
Вы должны проверить другие установки (в стандартных командах Hayes):
E1 Command/usr/src/linux-2.0.27/include/linux/serial.h Эхоотображение ВКЛ (требуемый для работы chat)
Q0 Отчет по кодам результата (требуемый для работы chat)
S0=0 Автоответ ВЫКЛ (если вы не хотите, чтобы модем брал трубку)
&C1 Обнаружение несущей (Carrier Detect) ВКЛ только после соединения
&S0 Готовность данных (DSR) всегда ВКЛ
(в зависимости) Data Terminal Ready
Имеется , который может помочь вам в этом.
Также неплохо бы исследовать, как функционирует последовательный интерфейс между вашим компьютером и модемом. Наиболее современные модемы позволяют фиксировать скорость последовательного интерфейса, позволяя изменять скорость на интерфейсе телефонной линии до наивысшего возможного (для взаимодействия локального и удаленного модема) значения.
Это известно как операция разбиения скорости. Если ваш модем поддерживает ее, то заблокируйте последовательный интерфейс модема на самой высокой доступной скорости (обычно 115,200 бод, но возможно и 38,400 бод для модемов 14,400).
Используйте ваше коммуникацуонное программное обеспечение (например minicom или seyon), чтобы выяснить конфигурацию вашего модема, и установите его для PPP.
Многие модемы сообщают свои текущие установки в ответ на AT$V, но вы должны свериться с вашим руководством по модему.
Если вы полностью сбили установки, то вы (обычно) можете возвратиться к первоначальным, дав команду AT$F - возвращение к установкам. (Для большинства модемов, с которыми я сталкивался, фабричные установки включают все необходимое для PPP - но все-таки вы должны это проверить).
Как только вы составили строку установки модема, требуется вписать ее. Примите решение: вы можете сохранить эти установки в энергонезависимой памяти вашего модема, так что они могут быть задействованы соответствующей командой AT. В качестве альтернативы вы можете передавать правильные установки на ваш модем как часть процесса установки соединения PPP.
Если вы используете ваш модем только чтобы звонить из Linux вашему ISP или на корпоративный сервер, то самым простым для вас будет сохранить настройки вашего модема в энергонезависимом ОЗУ.
Если, с другой стороны, ваш модем используется другими приложениями и операционными системами, то безопаснее передавать эту информацию на модем, поскольку при каждом звонке предполагается, что модем гарантированно находится в правильном состоянии. (Этот подход имеет дополнительное преимущество, выраженное в том, что не будет страшно потерять строку установки модема, записанную в энергонезависимом ОЗУ, что может действительно случиться).
Для того чтобы соединиться с PPP сервером и получать наилучшую возможную скорость передачи данных, ваш модем должен быть правильно сконфигурирован.
Точно так же последовательные порты на вашем модеме и компьютере должны быть установлены правильно.
Как это сделать рассказывается в разделе ``Конфигурирование вашего модема и последовательного порта".
Вы должны удостовериться, что ваш модем правильно установлен и что вы знаете, с каким последовательным портом он соединен.
Помните:
DOS com1: = Linux /dev/cua0 (и /dev/ttyS0) DOS com2: = Linux /dev/cua1 (и /dev/ttyS1)
итд
Также стоит запомнить, что, если вы имеете 4 последовательных порта, то на стандартном PC com1 и com3 совместно используют IRQ4, а com2 и com4 совместно используют IRQ3.
Если вы имеете устройства на стандартных последовательных портах, которые совместно используют IRQ с вашим модемом, то у вас будут проблемы. Вы должны удостовериться, что ваш последовательный порт модема находится на собственном, уникальном IRQ. Многие современных последовательных плат (и последовательные порты на материнской плате лучшего качества) позволяют вам менять IRQ последовательных портов.
Если у вас ядро Linux 2, то вы можете проверить "задействованные" IRQ, используя команду cat /proc/interrupts, которая выведет примерно вот что:
______________________________________________________________________ 0: 6766283 timer 1: 91545 keyboard 2: 0 cascade 4: 156944 + serial 7: 101764 WD8013 10: 134365 + BusLogic BT-958 13: 1 math error 15: 3671702 + serial ______________________________________________________________________
Видно, что последовательные порты занимают IRQ4 (мышь) и IRQ15 (постоянная модемная PPP связь с Интернетом. (Имеется также последовательный порт на com2, IRQ3 и com4 находится на IRQ14, но поскольку они незадействованы, то они не обнаружены).
Предупреждение: Вы должны знать, что вы делаете, если вы собираетесь поиграться с вашими IRQ! Вы должны не только отрыть ваш компьютер, вытащить платы и поиграть с джамперами, но и должны знать какие IRQ используются для каждого кстройства. В моем случае, компьютер оборудован только SCSI внешними устройствами, так что я могу отключить на материнской плате IDE интерфейсы, которые обычно используют IRQ14 и 15!
Также не забудьте, что, если на вашем PC загружаются другие операционные системы, изменение IRQ может привести к тому, что OS не сможет загружаться правильно - или вообще не загрузится!
Если вы назначаете вашему последовательному порту не обычное IRQ, то вы должны сообщить Linux, какое IRQ какой порт использует. Это делается программой setserial и лучше всего выполнять это как часть процесса начальной загрузки в rc.local или rc.serial, который вызывается из rc.local, или как часть инициализации SysV. Для машины, рассмотренной выше, используются команды
______________________________________________________________________
/bin/setserial -b /dev/ttyS2 IRQ 11 /bin/setserial -b /dev/ttyS3 IRQ 15 ______________________________________________________________________
Однако, если вы используете динамически загружаемые по требованию процесса kerneld модули serial, то вы не можете установить один раз и забыть IRQ и т.д во время начальной загрузки. Это потому, что при выгрузке модуля serial Linux забудет про специальные установки.
Итак, если вы загружаете модуль serial по требованию, то вы должны будете переконфигурировать IRQ и т.д при каждой загрузке модуля.
Мы предлагаем аккаунты коммутируемого PPP (и SLIP) и shell, использующие одну и ту же пару имени/пароля пользователя. Это имеет те преимущества (для нас), что для пользователя требуется только один аккаунт и можно использовать это для всех типов связей.
Поскольку мы - образовательная организация, мы не надзираем за доступом нашего персонала и студентов, и также не должны волноваться за учет пользователей и проблемах поддержки.
Мы эксплуатируем firewall между нашим сайтом и Интернетом, и это ограничивает некоторым пользователям доступ к телефонным линиям изнутри нашим (Интернет) firewall'ом (по довольно очевидным причинам, подробности наших других firewall'ов не рассматриваются и несоответствуют в любом случае).
Процесс, который пользователь проходит для установки PPP связи с нашим сайтом (конечно, если только ему разрешен доступ):
Позвонить на наш циклический пулл (это единственный номер телефона, который соединяется с банком модемов - при звонке включается первый свободный модем).
Вход в систему, если имя и пароль пользователя указаны правильно.
В командной строке shell выдать команду ppp, чтобы запустить PPP на сервере.
Запуск PPP на их PC (будь это Windows, DOS, Linux MAC OS или еще что) является проблемой пользователя).
Сервер использует индивидуальные файлы /etc/ppp/options.ttyXX для каждого модемного порта, который устанавливает динамический удаленный IP адрес. Сервер использует proxyarp маршрутизацию для удаленных клиентов (установлено соответствующей опцией pppd). Это устраняет потребность в routed или gated.
Когда пользователь "бросает трубку" на своем конце, pppd обнаруживает это и заставляет модем тоже "положить трубку", одновременно закрывая связь PPP.
Этот документ содержит много информации - и с каждой версией ее объем возрастает!
Как следствие, этот раздел стремится обеспечить краткий обзор действий, которые вы должны будете выполнить, чтобы подключить вашу Linux систему к PPP серверу в качестве клиента.
Если вы соединены с LAN, но также хотите использовать PPP на вашей персональной машине Linux, то вы должны адресовать одни пакеты в LAN (через ваш интерфейс ethernet), а другие на удаленный PPP сервер и дальше него (в Интернет).
Этот раздел не пытается обучить вас маршрутизации - он имеет дело только с простым, специальным случаем (статической) маршрутизации!
Я настойчиво прошу вас прочесть Руководство Сетевого Администратора Linux (NAG), если вы НЕ знакомы с маршрутизацией. Также книга O'Reilly "Сетевая Администрация TCP/IP" раскрывает эту тему в очень понятной форме.
Основное правило статической маршрутизации - ЗАДАННЫЙ ПО УМОЛЧАНИЮ маршрут должен быть тот, который указывает на НАИБОЛЕЕ число сетевых адресов. Для других сетей, введите специфические маршруты в таблицу маршрутизации.
Единственая ситуация, которую я собираюсь раскрыть здесь - это, когда ваш Linux PC находится в LAN, которая не соединена с Интернет - и вы хотите позвонить наружу в Интернет для персонального использования, сохраняя соединение с LAN.
Прежде всего удостоверитесь, что ваш маршрут Ethernet установлен так, чтобы специфические сетевые адреса были доступны в вашей LAN НЕ по маршруту по умолчанию!
Проверьте это, дав команду route. Вы должны увидеть что-то вроде следующего:
[root@hwin /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface loopback * 255.255.255.0 U 1936 0 50 lo 10.0.0.0 * 255.255.255.0 U 1436 0 565 eth0
Если ваш интерфейс ethernet (eth0) указывает на маршрут по умолчанию, (первый столбец будет показывать "default" в строке eth0), то вы должны изменить ваши скрипты инициализации ethernet, чтобы заставить его указать на специфические сетевые адреса раньше, чем на заданный по умолчанию маршрут (проконсультируйтесь с Net2 HOWTO и NAG).
Это позволит pppd устанавливать ваш заданный по умолчанию маршрут как показано ниже:
[root@hwin /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 10.144.153.51 * 255.255.255.255 UH 488 0 0 ppp0 127.0.0.0 * 255.255.255.0 U 1936 0 50 lo 10.1.0.0 * 255.255.255.0 U 1436 0 569 eth0 default 10.144.153.51 * UG 488 0 3 ppp0
Как вы видите, мы имеем главный маршрут к PPP серверу (10.144.153.51) через ppp0 и также заданный по умолчанию сетевой маршрут, который использует PPP сервер как шлюз.
Если ваши установки должны быть более сложными, чем эта - читайте документацию по маршрутизации, упомянутую выше и проконсультируютесь с экспертом на вашем сайте!
Если в вашей LAN уже есть маршрутизатор, то вы уже будете иметь шлюз в глобальные сети, доступные вашему сайту. ТЕМ НЕ МЕНЕЕ вы должны указать ваш заданный по умолчанию маршрут на интерфейс PPP - и сделайте другие маршруты специфическими для сетей, которые они обслуживают.
На это может иметься бесконечное множество причин (см. comp.os.linux...).
САМАЯ основная ошибка - вы имеете опечатки в ваших скриптах. Единственое, что здесь можно сделать - это удостовериться, в правильной работе сценария chat, пролистав ваш syslog (/var/log/messages) строчка за строчкой.
Можно попробовать попытаться соединиться с PPP сервером вручную, чтобы проверить не изменились ли условия регистрации в системе.
Вы должны очень тщательно проверить лог-файл и посмотреть там реально выдаваемые подсказки и имейте в виду, что мы - люди часто заменяем в своем воображении фактически написанный текст на тот, который нам показался написаным на этом месте!
Вы теперь должны зарегистрироваться как root, чтобы создать каталоги и отредактировать файлы, необходимые для установки PPP, даже если вы хотите, чтобы PPP был доступен для всех пользователей.
PPP использует ряд файлов для соединения и установки PPP соединения.
Они отличаются по имени и расположению между версиями PPP 2.1.2 и 2.2.
Для PPP 2.1.2 файлы:
______________________________________________________________________ /usr/sbin/pppd # the PPP binary /usr/sbin/ppp-on # the dialer/connection script /usr/sbin/ppp-off # the disconnection script /etc/ppp/options # the options pppd uses for all connections /etc/ppp/options.ttyXX # the options specific to a connection on this port ______________________________________________________________________
Для PPP 2.2 файлы:
______________________________________________________________________ /usr/sbin/pppd # the PPP binary /etc/ppp/scripts/ppp-on # the dialer/connection script /etc/ppp/scripts/ppp-on-dialer # part 1 of the dialer script /etc/ppp/scripts/ppp-off # the actual chat script itself /etc/ppp/options # the options pppd uses for all connections /etc/ppp/options.ttyXX # the options specific to a connection on this port ______________________________________________________________________
Пользователи Red Hat Linux должны обратить внимание на то, что во время стандартной установки Red Hat 4.X эти скрипты находятся в /usr/doc/ppp-2.2.0f-2/scripts.
В вашем каталоге /etc должен быть каталог ppp:
drwxrwxr-x 2 root root 1024 Oct 9 11:01 ppp
Если он не существует - создайте его с этими правами владения и доступа.
Если каталог уже существовал, он должен содержать шаблон файла options, называемый options.tpl. Этот файл включен ниже на тот случай, если у вас его нет.
Напечатайте его, поскольку он содержит объяснение почти всех PPP опций (их полезно читать вместе с man pppd). Хотя вы можете использовать этот файл как ваш базовый файл /etc/ppp/options, вероятно лучше создать ваш собственный файл options, который не будет включать комментарии из шаблона, тогда он будет намного короче и более легок для чтения/сопровождения.
Если вы имеете несколько последовательных линий/модемов (обычный случай для PPP сервера), создайте общий файл /etc/ppp/options, содержащий опции, которые являются общими для всех последовательных портов, на которых вы осуществляете входящие/исходящие звонки и создайте индивидуальные файлы options для каждой последовательной линии, на которой вы будете устанавливать PPP соединение с индивидуальными установками, требуемыми для каждого порта.
Эти файлы со специфическими для портов опциями именуются options.ttyx1, options.ttyx2 и т.д (где x - соответствующий символ для ваших последовательных портов).
Однако, для одиночного PPP соединения, вы можете вполне спокойно использовать файл /etc/ppp/options. В качестве альтернативы вы можете поместить все опции как параметры непосредственно в команде pppd.
Проще сопровождать настройку, которая использует файлы /etc/ppp/options.ttySx. Если вы используете PPP, чтобы соединяться с рядом различных мест, то вы можете создать файлы options для каждого места в "/etc/ppp/options.место" и затем определять файл опций как параметр для команды PPP при соединении (используя опцию pppd "file option-file" в командной строке).
Так как запуск ppp связи подразумевает конфигурирование устройства ядра (сетевого интерфейса) и управление ядром, таблицы маршрутизации, требуются специальные привилегии - фактически полные привилегии root.
К счастью, pppd был разработан достаточно 'безопасным' для выполнения установки uid в root. Так что вам нужно будет сделать
______________________________________________________________________
chmod u+s /usr/sbin/pppd ______________________________________________________________________
когда вы выведете список файлов, то должно появиться
______________________________________________________________________
-rwsr-xr-x 1 root root 74224 Apr 28 07:17 /usr/sbin/pppd ______________________________________________________________________
Если вы не сделаете это, то пользователи не смогут установить связь по ppp.
В дополнение к файлам, которые запускают PPP и выполняют автоматизированный вход на PPP сервер, есть ряд текстовых конфигурационных файлов, которые должны быть установлены на вашем компьютере для того, чтобы преобразовать имена типа www.interweft.com.au в IP адрес, который используется фактически для установления контакта с этим компьютером. Это файлы:
/etc/resolv.conf /etc/host.conf
Раздел ``Настройка преобразования доменных имен в IP адрес" содержит подробности по их настройке.
В частности вы не должны запускать сервер имен на вашем Linux PC, чтобы соединиться с Интернетом (хотя можете захотеть). Все, что вам нужно знать, это IP адрес как минимум одного сервера имен, который вы можете использовать (предпочтителен сервер имен одного из ваших ISP).
Хотя нам - людям нравится давать названия вещам, компьютеры в действительности больше любят числа. В TCP/IP сетях (которые составляют Интернет), мы называем машину определенным именем - и каждая машина живет в определенной области - "домене". Например, моя рабочая станция Linux называется archenland, и постоянно находится в домене interweft.com.au . Читабельный для человека адрес таким образом - archenland.interweft.com.au (такая запись известна также как FQDN - полностью квалифицированное имя домена).
Однако в Интернет машины, общаясь между собой, вместо имен используют IP адреса.
Трансляция имени машины (и домена) в адрес, фактически используемый в Интернет, - это задача машин, которые предоставляют Domain Name Service (обслуживание доменных имен).
Как это происходит:
ваша машина должна знать IP адрес какого-то компьютере.
Приложение, требующее эту информацию запрашивает 'resolver' на вашем Linux PC, чтобы предоставить эту информацию;
resolver делает запрос к локальному файлу хостов (/etc/hosts и/или серверу доменных имен, которые могут дать такую информацию (точнее поведение resolver'а определено в /etc/host.conf);
если ответ найден в файле хостов, то ответ возвращается;
если определен сервер доменных имен, то ваш PC делает запрос этой машине;
если DNS машина уже знает IP адрес для требуемого имени, то она возвращает его. Если нет, то делает запрос другим серверам доменных имен в Интернет, чтобы найти информацию. Сервер доменных имен затем послыает эту информацию обратно на запрашивающий resolver - который в свою очередь передает информацию запросившему приложению.
Когда вы устанавливаете PPP соединение, вы должны сообщить вашей Linux машине, где она может получить информацию по имени хоста по IP адресу (разрешение адреса) так, чтобы вы могли использовать имена машин, а ваш компьютер мог транслировать их в IP адреса, которые требуются для работы.
Один из способов состоит в том, чтобы прописать каждый хост, с которым вы хотите общаться в файл /etc/hosts (что нереально, если вы соединяетесь с Интернет); другой - использовать машинный IP адрес вместо имени (тоже невозможно, кроме самых маленьких LAN).
Самый лучший способ состоит в том, чтобы установить Linux так, чтобы он мог автоматически получить информацию об адресе по имени. Эту услугу предоставляет система сервера доменных имен (DNS). Все, что необходимо, это ввести IP адрес(а) серверов доменных имен в ваш файл /etc/resolv.conf .
Предыдущий раздел показывает, как обработать исходящую почту - просто, очисткой (flushing) почтовой очереди, если связь установлена.
Если вы делаете WAN связь, то вы можете договориться с сетевым администратором удаленной LAN, чтобы cделать то же самое. Например, настройка нашей стороны WAN связи с Университетским городком Newman в файле /etc/ppp/ip-up выглядит так:
______________________________________________________________________
#!/bin/bash # # Скрипт, который занимается проблемами маршрутизации по мере # необходимости для pppd # Только связь с Hedland требует этой обработки. #
# Когда связь ppp появляется, этот скрипт вызывается со следующими параметрами # $1 имя интерфейса, используемого pppd (например ppp3) # $2 имя устройства tty # $3 скорость устройства tty # $4 локальный IP адрес для интерфейса # $5 удаленный IP адрес # $6 параметр, указанный опцией 'ipparam' в pppd # case "$5" in 203.18.8.4) /usr/sbin/sendmail -q ;; *) esac exit 0 ______________________________________________________________________
Если однако вы имеете с вашим ISP только динамический IP адрес по PPP связи, вы должны получать ваш email с аккаунта на машине вашего ISP. Это обычно делается с использованием POP (Протокол Почтового отделения). Этот процесс может быть выполнен, используя программу 'popclient', - а ip-up скрипт может автоматизировать этот процесс!
Просто создайте сценарий /etc/ppp/ip-up, который содержит соответствующий вызов popclient. Для моей портативной ЭВМ, на которой работает Red Hat Linux (которую я беру в любые путешествия), это
______________________________________________________________________
popclient -3 -c -u hartr -p <password> kepler.hedland.edu.au |formail -s procmail ______________________________________________________________________
Вы могли бы использовать slurp или что-то еще, чтобы сделать это же самое для новостей и т.д. Помните, скрипт - это только стандартный скрипт bash и может использоваться так, чтобы автоматизировать ЛЮБУЮ функцию, которую нужно выполнять каждый раз при установлении соответствующей PPP связи.
Некоторые пользователи работают с больше чем одним сервером, использующих PAP. Если ваше имя пользователя отличается для каждой машины, с которой вы хотите соединяться, это - не проблема.
Однако, многие пользователи имеют одно и то же имя пользователя на двух (или даже всех) системах, с которыми они соединяются. Вот это проблема - правильно выбрать соответствующие строки из файла /etc/ppp/pap-secrets.
Как вы могли ожидать, PPP обеспечивает механизм для решения этой задачи. PPP позволяет вам установить 'вымышленное имя' для удаленного (серверного) конца соединения, используя опцию remotename в pppd.
Позвольте нам предположить, что вы соединяетесь с двумя PPP серверами, используя username fred. Вы настриваете ваш /etc/ppp/pap-secrets примерно так
______________________________________________________________________
fred pppserver1 barney fred pppserver2 wilma ______________________________________________________________________
Теперь, чтобы установить соединение с pppserver1, вы использовали бы name fred remotename pppserver1 в ваших ppp-опциях, а для pppserver2 - name fred remotename pppserver2.
Поскольку вы можете выбирать файл опций для запуска pppd, используя опцию file filename, то вы можете настроить скрипт, чтобы соединяться с каждым из ваших PPP серверов, правильно выбирая файл опций для использования и, следовательно, выбирая правильную опцию remotename.
Когда появляется связь между двумя LAN, вы можете захотеть удостовериться, что почта, которая поставлена в очередь на обоих концах соединения, отправлена адресату. Это выполняется добавлением соответствующего вызова sendmail.
Для этого используется выражения bash 'case' для соответствующего параметра, передаваемого скрипту, запукающему pppd. Например вот скрипт /etc/ppp/ip-up, который я использую, чтобы обработать наши WAN соединения и связь с моей LAN ethernet (также обрабатывемую на том же самом ppp сервере).
Если Вы используете PPP-2.2, вы обнаружите, что побочный эффект создания PPP устройств 'на лету' в том, что никакие устройства не обнаруживаются, если вы посмотрите /proc/net, пока устройство не создано запуском pppd:
______________________________________________________________________ [hartr@archenland hartr]$ cat /proc/net/dev Inter-| Receive | Transmit face |packets errs drop fifo frame|packets errs drop fifo colls carrier lo: 92792 0 0 0 0 92792 0 0 0 0 0 eth0: 621737 13 13 0 23 501621 0 0 0 1309 0 ______________________________________________________________________
Как только вы запустите одну (или больше) услуг ppp, вы увидите записи типа (от сервера ppp):
______________________________________________________________________ [root@kepler /root]# cat /proc/net/dev Inter-| Receive | Transmit face |packets errs drop fifo frame|packets errs drop fifo colls carrier lo: 428021 0 0 0 0 428021 0 0 0 0 0 eth0:4788257 648 648 319 650 1423836 0 0 0 4623 5 ppp0: 2103 3 3 0 0 2017 0 0 0 0 0 ppp1: 10008 0 0 0 0 8782 0 0 0 0 0 ppp2: 305 0 0 0 0 297 0 0 0 0 0 ppp3: 6720 7 7 0 0 7498 0 0 0 0 0 ppp4: 118231 725 725 0 0 117791 0 0 0 0 0 ppp5: 38915 5 5 0 0 28309 0 0 0 0 0 ______________________________________________________________________
Когда данные путешествуют по последовательным линиям связи, может случаться так, что данные прибывают быстрее, чем компьютер может их обработать (компьютер может быть занят выполнением чего-то еще - помните, что Linux - многопользовательская многозадачная операционная система). Чтобы гарантировать, что данные не потерялись (входной буфер может переполниться и следовательно данные теряются), нужен какой-то способ управления потоком данных.
На последовательных линиях есть два главных способа это сделать:
Использование аппаратных сигналов (Clear To Send/Request to Send - CTS/RTS)
Использование программных сигналов (Control-S и Control-Q, также известные как XON/XOFF).
В то время как последний может хорошо подходить для терминальной (текстовой) связи, данные при PPP связи использует все 8 битов - и очень вероятно, что где-нибудь в данных появятся байты, которые могут быть истолкованы как Control-S и Control-Q. Так что, если модем установлен с использованием программного управления потоком данных, то things can rapidly go berserk!
Для высокоскоростных связей, использующих PPP (который использует 8 битов данных) необходимо аппаратное управление потоком данных, и по этой причине вы должны использовать аппаратное управление потоком данных.
Когда вы настриваете компьютер с Linux в существующей LAN, чтобы подключаться к Интернет, то вы потенциально открываете вашу всю LAN Интернет - и взломщикам, которые постоянно находятся там. Прежде, чем вы сделаете это, я настойчиво прошу вас проконсультироваться с вашим сетевым администратором и стратегией защиты сайта. Если ваше PPP соединение с Интернетом будет использовано при успешной атаке на ваш сайт, то на вас по крайней мере обрушится гнев ваших пользователей, сетевых и системных администраторов. Также для вас могут возникнуть более серьезные проблемы!
Прежде, чем вы соедините LAN с Интернет, вы должны рассмотреть вопросы защиты даже для ДИНАМИЧЕСКОГО соединения - следовательно сначала обратитесь к O'Reilly "Построение файерволов Интернет"!
Если вы устанавливаете ваш Linux PC как PPP сервер, вы должны вкомпилировать в IP поддержку форвардинга. Это также необходимо, если вы хотите использовать Linux для связывания LAN вместе или вашей LAN с Интернет.
Если вы связываете LAN с Интернет (или связываете вместе две LAN), вы должны быть подумать о защите. Добавление поддержки IP файервола в ядро - наверняка ДОЛЖНО БЫТЬ!
Также вам это понадобится, если вы захотите использовать IP masquerade, чтобы соединить LAN, которая использует любое из вышеупомянутых 'неподключенных' адресов IP сетей.
Чтобы разрешить IP Masquerade и IP fire walling, вы ДОЛЖНЫ ответить ДА на первый вопрос в процессе конфигурации:
______________________________________________________________________
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)? ______________________________________________________________________
Хотя это может звучать немного пугающе для новых пользователей, многие пользователи активно используют возможности IP Masquerade and IP fire walling в ядре Linux 2.0.XX без проблем.
Как только вы установили и перезагрузили ваше новое ядро, вы можете начать конфигурировать и проверять вашу связь(и) PPP.
Одна проблема, которую вы обнаружите, состоит в том, что многие поставщики услуг будут поддерживатьтолько тот коммуникационный программный пакет, который они распространяют для новых учетных записей. Это - (обычно) Microsoft Windows :-( - и многие службы помощи ISP, кажется, ничего не могут посоветовать относительно UNIX (или Linux). Так, что будьте готовы к тому, что помощи от них вы не получите!
You could of course do the individual a favour and educate then about Linux (any ISP help desk person should be reasonably 'with it' in Internet terms and that means they should have a home Linux box - of course it does)!
Есть множество причин, по которым ваше соединение не будет работать, chat не сумел завершиться правильно, неправильная строчка и т.д. Проверьте записи в вашем syslog.
Как мы уже видели, вы можете включить отладочную информацию опцией -d в pppd. Опция 'debug' эквивалентна ей.
Поскольку мы устанавливаем новое соединение с новым скриптом, сейчас поставьте опцию отладки. (Предупреждение: если у вас мало дискового пространства, то логи pppd могут быстро увеличить ваш файл syslog и создать вам проблему - but to do this you must fail to connect and keep on trying for quite a few minutes).
Как только вы обрадуетесь, что все работает правильно, можете удалить эту опцию.
Если вы назвали ваш ppp файл опций как-нибудь иначе, чем /etc/ppp/options, или /etc/ppp/options.ttySx, определите имя файла опцией file в pppd - например
______________________________________________________________________
exec /usr/sbin/pppd debug file options.myserver /dev/ttyS0 38400 \ ______________________________________________________________________
Снова, если вы используете динамические IP адреса, это совершенно нормально. См. "Настройка Услуг" ниже.
Имеются множество списков почтовой рассылки Linux, которые функционируют как средство связи между пользователями многих уровней знания. Во что бы то ни стало подпишитесь на те, что интересуют вас, и contribute your expertise and views.
Мудрость: некоторые списки специально нацелены на "гуру" и/или специфические темы. Хотя никто не пожалуется, если вы подписались 'lurk' (но не отправляете по почте сообщения), но вам наверняка придется выслушать резкости (если не флейм), если вы отправляете 'чайниковские' вопросы в несоответствующие списки расылки.
Это - не потому, что гуру ненавидят новых пользователей, а потому, что эти списки должны обсуждать специальные проблемы специальных уровней сложности.
Во что бы то ни стало подпишитесь на списки, которые предлагают открытую подписку, но ваши комментарии должны соответствовать теме списка!
Хорошая отправная точка для почтовых списков рассылки Linux -
Имеется почти бесконечное число способов, которыми PPP сервер может быть установлен. Чтобы соединиться с вашим ISP (или корпоративным PPP сервером, чтобы обратиться к вашему intranet), вы должны будете получить информацию о том, как функционирует PPP сервер.
Поскольку вы используете Linux, вы можете испытать затруднения с получением исчерпывающей справки от ISP (и работы сайта, основанного на intranet PPP сервере), которые в большинстве ориентируются на клиентов с MS WINDOWS.
Однако, быстро возрастает число ISP, использующих в своей работе Linux, - и Linux также проникает в корпоративную среду, так что вам может повезти в решении ваших проблем.
Раздел ``Получение нужной информации о PPP сервере" рассказывает, что вы должны узнать о PPP сервере, к которому вы собираетесь подсоединиться - и как выяснить эту информацию.
Прежде, чем вы сможете установить PPP соединение с сервером, вы должны получить следующую информацию (от службы поддержки системных администраторов/пользователей PPP сервера):
номер(а) телефона(ов). Если вы звоните через офисную АТС, то вам также нужен префиксный номер, который позволит вам звонить наружу - часто это цифры (0) или (9).
сервер использует ДИНАМИЧЕСКИЕ или СТАТИЧЕСКИЕ IP адреса?
Если сервер использует СТАТИЧЕСКИЕ IP адреса, то вы должны узнать какой IP адрес использовать на вашем конце PPP соединения. Если ваш ISP обеспечивает вас подсетью допустимых IP адресов, вы должны будете узнать IP адреса, которые вы можете использовать и сетевую маску (netmask).
Большинство поставщиков услуг Интернет использует ДИНАМИЧЕСКИЕ IP адреса. Как упомянуто выше, это имеет некоторое влияние на то, какими услугами вы можете пользоваться.
Однако даже если вы используете СТАТИЧЕСКИЕ IP адрес, большинство PPP серверов никогда (по соображениям безопасности) не позволит клиенту определять IP адрес, поскольку это - риск взлома. Вы должны знать эту информацию!
Каковы IP адреса серверов доменных имен ISP?
Должны иметься по крайней мере два, хотя необходим только один.
Здесь может поджидать проблема. PPP установка в MS WINDOWS 95 позволяет устанавливать адрес DNS как часть процесса установления связи. Так что ваш ISP (или справочная служба корпорации) может сообщить вам, что вам не нужно знать IP адрес DNS сервера(ов).
Для Linux, вы нуждаетесь в адресе по крайней мере одного DNS. Linux реализация PPP не позволяет установку IP адреса DNS динамически во время соединения - и возможно никогда не позволит.
Обратите внимание: хотя Linux (как PPP клиент) не может принимать адрес DNS от сервера, это может, действуя как сервер, передать эту информацию клиентам, используя опцию pppd dns-addr.
Сервер требует использования PAP/CHAP?
Если дело обстоит так, то вы должны знать ваши "id", и "secret" для использования при соединении. (Скорее всего они совпадают с вашими именем пользователя и паролем на вашем ISP).
Сервер автоматически запускает PPP, или вы должны выдать какие-то команды, чтобы запустить PPP на сервере после регистрации?
Если вы должны выдать команду, чтобы запустить PPP, то что это за команда?
Сервер Windows NT Microsoft и, если так, он использует систему MS PAP/CHAP?
Многие корпоративные LAN, кажется, используют этот метод усиления защиты MS WINDOWS NT .
Тщательно обратите внимание на эту информацию - вы собираетесь ее использовать!
Если вы не можете настроить связь PPP, вернитесь в начало документа и проверьте все - в особенности информацию, выводимую "chat -v ..." и "pppd -d" в вашем системном логе.
Также проконсультируйтесь с документацией по PPP и FAQ плюс другими упоминаемыми здесь документами!
Если и это не помогает, попробуйте попросить помощи у людей в группах новостей comp.os.linux.misc и comp.os.linux.networking или в comp.protocols.ppp
Вы можете попробовать пслать мне персональную почту, но я у меня есть своя работа (и личная жизнь), и я не гарантирую, что отвечу быстро (если вообще смогу ответить), поскольку это зависит от моей текущей загрузки и состояния моей личной жизни!
В частности - НЕ НАДО ОТПРАВЛЯТЬ КУЧУ ОТЛАДОЧНОЙ ИНФОРМАЦИИ НИ В ГРУППЫ НОВОСТЕЙ, НИ МНЕ НА EMAIL - все это будет отправлено в /dev/null (если я не просил специально сделать это).
Если ваш дистрибутив Linux не включает программное обеспечение PPP, то возьмите его из Linux .
Это последняя официальная версия на время написания. Однако, вы возьмите в этом месте последнюю доступную версию (ppp-2.3 находится в стадиии бета на время написания и должен быть скоро выпущен).
PPP пакет содержит инструкции по компиляции и установке программного обеспечения, так что это не объясняется в HOWTO!
Как только связь PPP заработает (особенно, как только IP уровень станет работоспособным), Linux PPP может запускать автоматически (как пользователь root) скрипт, чтобы выполнить любую функцию, которую вы можете записать для выполнения в скрипт.
В разделе ``После того, как связь установлена" изложена информация о скрипте /etc/ppp/ip-up, параметрах, которые он получает от PPP, и как его использовать, чтобы делать вещи типа скачивания вашего email от вашего ISP, посылки поставленной в очередь почты и все такое прочее.
Как только связь PPP установлена, pppd ищет /etc/ppp/ip-up. Если этот сценарий существует и может выполняться, PPP демон выполняет скрипт. Он позволяет вам автоматизировать любые специальные команды маршрутизации, которые могут вам понадобиться, и любые другие действия, которые вы хотите выполнить при активизации PPP соединения.
Это только скрипт shell, и он может делать все, что может делать скрипт shell (то есть фактически все что вы хотите).
Например, вы можете заставить sendmail послать исходящую почту, стоящую в очереди.
Точно так же вы можете вставить команды в ip-up для забора почты (используя POP), ждущий вас на вашем ISP.
Имеются ограничения на /etc/ppp/ip-up:
Он выполняется в преднамеренно ограниченном окружении, чтобы усилить защиту. Это означает, что вы должны указыва полный путь к запускаемым файлам и т.д.
Технически /etc/ppp/ip-up - это программа, а не скрипт. Это означает, что он может быть непосредственно выполнен - и следовательно требуется стандартный магический файл (#!/bin/bash) в начале первой строки скрипта и он должен быть читаем и выполним пользователем root.
Так как установление связи PPP между вашим компьютером Linux и другим PPP сервером требует манипуляций с сетевыми устройствами (интерфейс PPP - это сетевой интерфейс) и таблицей маршрутизации ядра, то pppd требует привилегий root.
Для подробностей см. раздел ``Использование PPP и привилегии root".
Если вы используете высокоскоростной (внешний) модем (14,400 кбит или выше), то ваш последовательный порт должен успевать обрабатывать трафик, причем модем особенно производителен при использовании алгоритмов сжатия данных.
Для этого требуется, чтобы ваш последовательный порт использовал современный UART (Универсальный Асинхронный Приемопередатчик) типа 16550(A). Если вы используете старую машину (или старую последовательную плату), то возможно, что ваш последовательный порт имеет только 8250 UART, который может вызвать у вас значительные проблемы при использовании с высокоскоростным модемом.
Используйте команду
setserial -a /dev/ttySx
чтобы Linux вывел вам тип UART, который у вас установлен. Если у вас нет UART типа 16550A, то купите новую последовательную плату (она стоит менее $50). Когда вы приобретаете новую плату, удостоверьтесь, что вы можете на ней менять IRQ!
Обратите внимание: первые версии микросхем 16550 UART имели ошибку. Это было быстро обнаружено, и был выпущен исправленный вариант микросхемы - 16550A UART. Относительно небольшое число дефектных микросхем однако вошло в обращение. Маловероятно, что вы столкнетесь с одной из них, но вы должны посмотреть, точно ли у вас стоит 16550A, особенно на последовательных платах некоторого года изготовления.
Пример ниже обеспечивает ряд примеров использования.
______________________________________________________________________ #!/bin/bash # # Скрипт, выполняющий при необходимости задачи маршрутизации для pppd # Только связь с Newman требует такой обработки. # # Когда ppp связь установлена, этот скрипт вызывается со следующими # параметрами # $1 имя интерфейса, используемое pppd (напр. ppp3) # $2 имя устройства tty # $3 скорость устройства tty # $4 локальный IP адрес для интерфейса # $5 удаленный IP адрес # $6 параметр, указанный опцией 'ipparam' в pppd # case "$5" in # Обработка маршрутизации для сервера Newman Campus 202.12.126.1) /sbin/route add -net 202.12.126.0 gw 202.12.126.1 # and flush the mail queue to get their email there asap! /usr/sbin/sendmail -q & ;; 139.130.177.2) # Наше Internet соединение # когда вязь будет установлена, запустить сервер времни и синхронизировать с # миром. Предполагается, что он еще не запущен if [ ! -f /var/lock/subsys/xntpd ]; then /etc/rc.d/init.d/xntpd.init start & fi # Запуск сервера новостей (если еще не запущен) if [ ! -f /var/lock/subsys/news ]; then /etc/rc.d/init.d/news start & fi ;; 203.18.8.104) # Скачать почту на мою домашнюю машину при установлении связи # Маршрутизция не требуется, так как мой домашний Ethernet обрабатывается IP # masquerade и proxyarp маршрутизацией. /usr/sbin/sendmail -q & ;; *) esac exit 0 ______________________________________________________________________
В результате поднятия ppp линка с нашим университетским городком Newman и выполнения этого сценария, мы получаем таблицы маршрутизации со следующими записями (эта машина явялется также нашим общим PPP сервером, и обрабатывает нашу связь с Интернет). Я разнообразил комментарии в выводе, чтобы помочь объяснить, чем является каждая запись):
______________________________________________________________________ [root@kepler /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface # HOST маршрут на наш удаленный шлюз в Интернет 139.130.177.2 * 255.255.255.255 UH 1500 0 134 ppp4 # HOST маршрут на наш Newman сервер студенческого городка 202.12.126.1 * 255.255.255.255 UH 1500 0 82 ppp5 # HOST маршрут на мой домашний ethernet 203.18.8.104 * 255.255.255.255 UH 1500 0 74 ppp3 # две наши основные коммутируемые PPP линии 203.18.8.64 * 255.255.255.255 UH 552 0 0 ppp2 203.18.8.62 * 255.255.255.255 UH 552 0 1 ppp1 # специальный сетевой маршрут в Newman LAN студенческого городка 202.12.126.0 202.12.126.1 255.255.255.0 UG 1500 0 0 ppp5 # маршрут в наш локальный Ethernet (суперсеть из двух сетей класса C) 203.18.8.0 * 255.255.254.0 U 1500 0 1683 eth0 # маршрут в устройство loop back 127.0.0.0 * 255.0.0.0 U 3584 0 483 lo # маршрут по умолчанию в Internet default 139.130.177.2 * UG 1500 0 3633 ppp4 ______________________________________________________________________
Как отмечено во введении, динамические IP адреса влияют на возможность работы вашего Linux PC в качестве сервера в Интернет.
Раздел ``Проблемы со стандартными IP услугами для PPP связи с динамическим IP адресом" обеспечивает информацию о таком влиянии на (основные) услуги и что вы можете сделать (если что-нибудь можно сделать), чтобы преодолеть это влияние.
Имеется ряд конфигурационных и файлов звонилки, которые должны быть установлены для работы с PPP. В дистрибутиве PPP имеются примеры, и в этом разделе показано, какие файлы вы должны иметь:
______________________________________________________________________ /etc/ppp/options /etc/ppp/scripts/ppp-on /etc/ppp/scripts/ppp-on-dialer /etc/ppp/options.tpl ______________________________________________________________________
Вам возможно понадобиться создать некоторые дополнительные файлы в зависимости от того, что вам нужно от PPP:
______________________________________________________________________ /etc/ppp/options.ttyXX /etc/ppp/ip-up /etc/ppp/pap-secrets /etc/ppp/chap-secrets ______________________________________________________________________
Кроме того, демон PPP может использовать большое количество опций командной строки, и важно использовать правильные; так что этот раздел проведет вас по стандартным опциям PPP и поможет выбрать опции, которые вы должны использовать.
Для подробностей см. ``Настройка файлов PPP соединения".
Имеется много различных дистрибутивов Linux, и все они имеют их собственные характерные особенности и способы выполнения вещей.
В частности в Linux (и Unix) имеются два различных способа запуска компьютера, конфигурации интерфейсов и т.д.
Это стили инциализации BSD и System V. Если вы почитаете некоторые группы новостей Unix, то вы обнаружите религиозную войну между сторонниками этих двух систем. Если вам нравится такой сорт развлечений, то можете позабавиться этой игрой, тратящей ресурсы Сети, присоединяйтесь!
Наиболее распространены следующие дистрибутивы:
Slackware
который использует инициализацию BSD
Red Hat (и вышеупомянутая ассоциация Caldera)
который использует инициализацию SysV (хотя в немного другой форме)
Debian
который использует инициализацию SysV
Инициализация BSD обычно хранит файлы инициализации в /etc/... , это файлы:
______________________________________________________________________ /etc/rc /etc/rc.local /etc/rc.serial (и возможно другие файлы) ______________________________________________________________________
С недавнего времени, некоторые схемы инициализации системы BSD используют каталог /etc/rc.d... для хранения файлов запуска, а не помещают их в /etc.
Инициализация System V хранит файлы инициализации в каталогах под /etc/... или /etc/rc.d/... и в этих подкаталогах:
______________________________________________________________________ drwxr-xr-x 2 root root 1024 Jul 6 15:12 init.d -rwxr-xr-x 1 root root 1776 Feb 9 05:01 rc -rwxr-xr-x 1 root root 820 Jan 2 1996 rc.local -rwxr-xr-x 1 root root 2567 Jul 5 20:30 rc.sysinit drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc0.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc1.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc2.d drwxr-xr-x 2 root root 1024 Jul 18 18:07 rc3.d drwxr-xr-x 2 root root 1024 May 27 1995 rc4.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc5.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc6.d ______________________________________________________________________
Если вы попробуете проследить, где действительно настраиваются ваш ethernet интерфейс и связанные с ним сетевые маршруты, то вам надо будет просмотреть эти файлы, чтобы найти команды, которые делают это.
Поскольку новые скрипты приходят двумя частями, мы в свою очередь отредактируем их.
Если ваш ISP использует PAP/CHAP, то ваш сценарий chat намного более простой.
Весь ваш сценарий chat должен делать вот что - звонить по номеру телефона, ждать соединения и затем позволить pppd обработать регистрацию в системе!
______________________________________________________________________ #!/bin/sh # # This is part 2 of the ppp-on script. It will perform the connection # protocol for the desired connection. # exec /usr/sbin/chat -v \ TIMEOUT 3 \ ABORT '\nBUSY\r' \ ABORT '\nNO ANSWER\r' \ ABORT '\nRINGING\r\n\r\nRINGING\r' \ '' \rAT \ 'OK-+++\c-OK' ATH0 \ TIMEOUT 30 \ OK ATDT$TELEPHONE \ CONNECT '' \ ______________________________________________________________________
Это - второй скрипт, который фактически поднимает нашу ppp связь.
Обратите внимание: chat скрипт обычно однострочный. Наклонные черты влево используются, чтобы разместить строки на нескольких физических строках (для удобочитаемости человеком) и не формировать часть скрипта самому.
Однако, очень полезно рассмотреть это подробно так, чтобы мы поняли, что же фактически (предположительно) происходит!
Если Вы связываете вашу LAN с Интернетом, используя PPP - или даже только к "чужой" LAN, вы должны подумать о проблеме защиты. Я настойчиво прошу вас подумать об установке firewall!
Вы должны также поговорить об этом с администратором LAN вашего сайта ПРЕЖДЕ, ЧЕМ вы начнете связываться с посторонними LAN или Интернет. Неправильная настройка может привести к неизвестно чему - от отсутствия какой-либо реакции до действительно серьезной проблемы!
Это первый из ПАРЫ скриптов, которые фактически запускают соединение.
______________________________________________________________________ #!/bin/sh # # Скрипт для инициации соединения PPP. Это первая часть из пары скриптов. # Это не секретные скрипты, так как коды видны командой ps. # Однако это пример. # # Это параметры. Измените их как нужно. TELEPHONE=555-1212 # Телефонный номер соединения ACCOUNT=george # Имя пользователя для входа ('George Burns') PASSWORD=gracie # Пароль для этого аккаунта (и 'Gracie Allen') LOCAL_IP=0.0.0.0 # Локальный IP адрес, если известен. Динамический = 0.0.0.0 REMOTE_IP=0.0.0.0 # Удаленный IP адрес, если желателен. Обычно 0.0.0.0 NETMASK=255.255.255.0 # Соответствующая сетевая маска, если нужна # # Экспортируем их, чтобы они были доступны в 'ppp-on-dialer' export TELEPHONE ACCOUNT PASSWORD # # Это расположение скрипта, который звонит по телефону и регистрируется в # системе. Пожалуйста, используйте абсолютное имя файла, так как опция connect # не использует переменную $PATH. (Если это сделать, то 'root' аккаунт будет # дырой в защите, так что не просите.) # DIALER_SCRIPT=/etc/ppp/ppp-on-dialer # # Инициация соединения # # exec /usr/sbin/pppd debug /dev/ttySx 38400 \ $LOCAL_IP:$REMOTE_IP \ connect $DIALER_SCRIPT ______________________________________________________________________
Это скрипт ppp-on-dialer:
______________________________________________________________________ #!/bin/sh # # Это вторая часть скрипта ppp-on. Она выполняет установку желаемого # соединения. # /usr/sbin/chat -v \ TIMEOUT 3 \ ABORT '\nBUSY\r' \ ABORT '\nNO ANSWER\r' \ ABORT '\nRINGING\r\n\r\nRINGING\r' \ '' \rAT \ 'OK-+++\c-OK' ATH0 \ TIMEOUT 30 \ OK ATDT$TELEPHONE \ CONNECT '' \ ogin:--ogin: $ACCOUNT \ assword: $PASSWORD ______________________________________________________________________
Для PPP-2.2, сценарий ppp-off примерно такой:
______________________________________________________________________ #!/bin/sh ###################################################################### # # Определить прерываемое устройство. # if [ "$1" = "" ]; then DEVICE=ppp0 else DEVICE=$1 fi
###################################################################### # # Если pid файл ppp0 есть, тогда программа работает. Остановить ее. if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid` # # Если kill не работает, тогда нет процесса, запущенного под этим pid. # Это может также означать, что существует посторонний lock файл. # Возможно, вы захотите удалить его. if [ ! "$?" = "0" ]; then rm -f /var/run/$DEVICE.pid echo "ERROR: Removed stale pid file" exit 1 fi # # Отлично. Пусть pppd поправит свой собственный недочет. echo "PPP link to $DEVICE terminated." exit 0 fi # # для ppp0 не запущен ppp процесс echo "ERROR: PPP link is not active on $DEVICE" exit 1 ______________________________________________________________________
Если ваш ISP не требует использования PAP/CHAP, вам нужны именно эти скрипты!
Если пакет ppp установлен правильно, вы должны иметь два файла примеров. Для PPP 2.1.2 они находятся в /usr/sbin, а для PPP 2.2 они находятся в /etc/ppp/scripts. Они называются
для PPP-2. 1.2
ppp-on ppp-off
а для PPP-2. 2
ppp-off ppp-on ppp-on-dialer
Теперь, если Вы используете PPP 2.1.2, я настойчиво прошу вас удалить файлы примеров. С ними имеются потенциальные проблемы - и не сообщайте мне, что они прекрасно работают - я использовал их очень долго (и даже рекомендовал их в первой версии этого HOWTO)!
Для пользователя PPP 2.1.2 имеется ЛУЧШАя версия шаблона, взятая из дистрибутива PPP 2.2 . Я предлагаю вам скопировать и использовать эти скрипты вместо старого скрипта PPP-2.1.2 .
При установке основных файлов хорошая идея проверить их, соединившись (используя minicom или seyon) и запустив pppd на вашем Linux PC вручную.
См. раздел ``Установка PPP соединения вручную" для деталей по этому вопросу.
Вы нужно будет следующее программное обеспечение:
Linux, правильно скомпилированный, чтобы были включены необходимые опции.
соответствующая версия pppd для вашего ядра.
программа 'getty', которая интеллектуально обрабатывает модемную связь.
Мы используем getty_ps2.0.7, но вроде mgetty лучше. Я понимаю, что mgetty может обнаружить звонок, который использует pap/chap (pap - стандарт для Windows95) и вызвать pppd автоматически, но однако я должен исследовать это.
Функционирующий сервер доменных имен (DNS), который доступне вашим модемным пользователям.
Вы действительно должны запустить собственный DNS, если это возможно ...
Если вы связываете две LAN, вы будете должны установить специфические маршруты к 'посторонним' LAN. Это легко выполняется, используя скрипт /etc/ppp/ip-up. Единственая трудность возникает, если ваша машина работает с несколькими PPP соединениями.
Это потому, что /etc/ppp/ip-up выполняется для КАЖДОГО ppp соединения, которое устанавливается, так что вы должны тщательно выполнить правильные команды маршрутизации для определенного устанавливаемого соединения - и не выполнять их, когда устанавливается любое другое соединение!
Этот документ обеспечивает (основную) информацию о связывании двух LAN или LAN с Интернет, используя PPP.
В основном нет различия между соединением одного Linux PC с PPP сервером и соединением двух LAN, использующих PPP на машине в каждой LAN.
Помните, PPP - это протокол точка-точка.
Однако, вы ОПРЕДЕЛЕННО должны понимать как устанавливается маршрутизация. Читайте NET-2 howto и Руководство Сетевого Администратора Linux (NAG). Вы также найдете неоценимую помощь в книге "Сетевое администрирование TCP/IP" (изданной O'Reilly и Assoc - ISBN 0-937175-82-X).
Если вы собираетесь работать с подсетями на обоих сторонах связи, то вам также надо найти Linux subnetworking mini-howto). Он доступен в .
Для того, чтобы связать две LAN, вы должны использовать различные сетевые IP адреса (или подсети одного и того же сетевого адреса) и должны будете использовать статические IP адреса - или использовать IP masquerade. Если вы хотите использовать IP masquerade, см. IP masquerade mini-howto для инструкций по его установке.
в этом случае также возможны варианты - например последовательная линия looped обратно и т.д., и происходить это может по ряду причин.
Чтобы понять, что происходит, необходимо немного углубиться в процессы, происходящие в pppd непосредственно.
Когда pppd запускается, он посылает LCP (протокол управления связи) пакеты удаленной машине. Если он получает приемлемый ответ, то переходит в следующую стадию (используя IPCP пакеты) и только когда эти переговоры завершаются - начинает действовать IP уровень так, чтобы вы могли использовать связь PPP.
Если на удаленном конце линии нет ppp сервера, то когда ваш PC посылает lcp пакеты, они возвращаются искаженными процессом login на удаленномй конце. Поскольку эти пакеты используют 8 битов, а вернувшиеся пакеты приходят с отрезанным 8-ым битом (вспомните, что ASCII - 7 разрядный код), то PPP видит это и соответственно жалуется.
Имеется несколько причин такого отражения сигналов.
Теперь, когда вы отобрали наружний последовательный порт и установили модем, хорошо бы удостовериться, что эти установки действительно работают, позвонив вашему ISP и таким образом выяснить, можете ли вы с ним соединиться.
При использовании пакета вашего коммуникационного терминала (типа minicom), установите требуемую для PPP инициализацию модема, и позвоните на PPP сервер, с которым вы хотите осуществить сеанс PPP связи.
(Обратите внимание: в этой стадии мы не пробуем создавать PPP соединение - только хотим убедиться, что мы имеем правильный номер телефона и также выяснить что именно сервер посылает нам для регистрации в системе и запуска PPP).
В течение этого процесса, или "захватите" (направьте лог в файл) весь процесс входа в систему в файл или тщательно (очень тщательно) запишите в точности, какие подсказки сервер выдает вам при вводе вашего имени пользователя и пароля (и любые другие команды, необходимые для установления PPP соединения).
Если ваш сервер использует PAP, то вы не должны видеть подсказку входа в систему, но должны взамен видеть на вашем экране (в текстовом представлении) запуск протокола управления связи (который похож на мусор).
Несколько предупреждений:
некоторые серверы очень интеллектуальны: вы можете регистрироваться либо используя текстовые приглашения ко вводу имени/пароля пользователя, либо используя PAP. Так что, если ваш ISP или корпоративный сайт использует PAP, но вы не видите тут же появляющийся мусор, то это не обязательно означает, что вы сделали что-то неправильно.
некоторые серверы требуют, чтобы вы ввели сначала некоторый текст и только потом начинают посялать стандартные PAP последовательности.
Некоторые PPP серверы пассивны - который ничего не делают до тех пор, пока клиент не отправит им допустимый lcp пакет. Если ppp сервер, с которым вы соединяетесь, функционирует в пассивном режиме, то мусор вы не увидите!
Некоторые серверы не запускают PPP, пока вы не нажмете enter - так что, если вы правильно регистрируетесь и не видите мусор, то попробуйте нажать enter!
Откройте новый root Xterm (если вы находитесь в X) или откройте новую виртуальную консоль и войдите в систему как пользователь root.
В этом новом сеансе, выдайте команду
tail -f /var/log/messages
(или какой-то другой файл вашего системного лога ).
В первом окне (или виртуальной консоли) выдайте команду
ppp-on &
(или как вы там назвали вашу отредактированную версию /usr/sbin/ppp-on). Если вы не перевели запущенный скрипт в фоновый режим, поместив в конце команды, &, то вы не получите назад приглашение командной строки до тех пор, пока ppp не закончит работу (пока связь не завершится).
Теперь переключитесь обратно на окно, которое отслеживает ваш системный файл регистрации.
Вы увидите что-то вроде следующего (при условии что вы указали -v для chat и -d для pppd) .... это - сценарий chat и ответы, регистрируемые в системном логе, и следующей далее информацией от pppd:
______________________________________________________________________ Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER) Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY) Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M) Oct 21 16:09:59 hwin chat[19868]: expect (OK) Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M Oct 21 16:10:00 hwin chat[19868]: OK -- got it Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M) Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT) Oct 21 16:10:00 hwin chat[19868]: ^M Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it Oct 21 16:10:22 hwin chat[19868]: send (^M) Oct 21 16:10:22 hwin chat[19868]: expect (ogin:) Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it Oct 21 16:10:23 hwin chat[19868]: send (hartr^M) Oct 21 16:10:23 hwin chat[19868]: expect (ssword:) Oct 21 16:10:23 hwin chat[19868]: hartr^M Oct 21 16:10:23 hwin chat[19868]: Password: -- got it Oct 21 16:10:23 hwin chat[19868]: send (??????^M) Oct 21 16:10:23 hwin chat[19868]: expect (hartr) Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it Oct 21 16:10:24 hwin chat[19868]: send (ppp^M) Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0 Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0 Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1 Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU Oct 21 16:10:27 hwin pppd[19873]: (1500) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP Oct 21 16:10:27 hwin pppd[19873]: (0) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER Oct 21 16:10:27 hwin pppd[19873]: (a098b898) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:27 hwin pppd[19873]: (45) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1. Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255. Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:31 hwin pppd[19873]: (45) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 255. Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1. Oct 21 16:10:31 hwin pppd[19873]: ipcp: up Oct 21 16:10:31 hwin pppd[19873]: local IP address 10.144.153.104 Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51 ______________________________________________________________________
(Примечание - я использую СТАТИЧЕСКИЕ IP адреса - следовательно моя машина, отправила это PPP серверу - вы не увидеть это, если используете ДИНАМИЧЕСКИЕ IP адреса.) Также, этот сервер требует дать команду для запуска ppp.
Как будто все впорядке - протестируем соединение как и прежде, пингуя IP адреса и имена машин.
Запустите ваш веб браузер или еще что-нибудь и скользите по сети - вы подключены!
This one is a bit tricksy!
По умолчанию, ваш Linux pppd скомпилирован для посылки максимум 10 lcp запросов конфигурации. Если сервер медленно отвечает, то все 10 таких запросов могут передаться до того, как удаленный PPP будет готов получить их.
На вашей машине pppd видит, что все 10 запросов отражены обратно (с 8-ым отрезанным битом) и завершается.
Имеются два способа обхода:
Добавьте lcp-max-configure 30 в ваши опции ppp. Таким образом увеличивается максимальное число посылаемых lcp пакетов выбора конфигурации. Для действительно медленных серверов вам может понадобиться указать еще большее количество таких пакетов.
В качестве альтернативы вы можете get a bit tricksy in return. Вы, возможно, заметили, что, когда вы регистрировались вручную на PPP сервере, и PPP там запускался, то первый символ ppp мусора был всегда символ тильды ().
Это наблюдение можно использовать таким образом - мы можем добавить новую пару "ожидаемое-посылаемое" в конец вашего сценария chat, которая будет ожидать тильду и не посылать ничего. Это можно сделать, например, так:
______________________________________________________________________
\~ '' ______________________________________________________________________
Обратите внимание: поскольку символ тильды имеет специальное значение в shell, то нужно его за'escape'ить (и, следовательно, перед ним поставить наклонную черту влево).
Даже для динамических IP чисел, вы, конечно, можете настроить sendmail на вашей машине для отправки любого email, который вы написали локально.
Конфигурация sendmail может быть трудной - так что этот документ не пытается сообщать вам, как это сделать. Однако, вы вероятно должны сконфигурировать sendmail так, чтобы ваш поставщик услуг Интернет был обозначен как ваш "smart host" (sendmail.cf - опция DS). (Для подробностей по настройке sendmail см. документацию sendmail - и посмотрите конфигурации m4, которые поставляются с sendmail. Там имеется почти все, что может вам потребоваться).
Имеются также превосходные книги по Sendmail (особенно 'библия' от O'Reilly и Ассоциации), но эти книги - почти массовое убийство для большинства пользователей!
Как только вы сконфигурировали sendmail, вы вероятно захотите чтобы sendmail посылал любые сообщения, которые стоят в исходящей почтовой очереди, при установлении PPP соединения. Чтобы сделать это, добавьте команду
sendmail -q &
в ваш скрипт /etc/ppp/ip-up (см. ниже).
Входящая почта - это проблема для динамических IP адресов. Способ обрабатывать ее:
настройте вашего почтового агента пользователя так, чтобы вся почта была выпущена с заголовком "reply to", дающим ваш email адрес, выданный вашем поставщиком услуг Интернета.
Если вы можете, вы должны также установить ваш FROM адрес, чтобы ваш адрес email, выданный вашим ISP был правилен.
Используйте программы popclient, fetchmail, чтобы забрать вашу почту с вашего поставщика услуг. В качестве альтернативы, если ваш ISP использует IMAP, используйте почтового агента пользователя, умеющего работать с IMAP (типа pine).
Вы можете автоматизировать этот процесс в случае модемного соединения, помещая необходимые команды в скрипте /etc/ppp/ip-up (см. ниже).
Вам нужно будет установить полный /etc/ppp/options с общими опциями для всех портов, принимающих внешние звонки. Опции, которые мы используем:
______________________________________________________________________ asyncmap 0 netmask 255.255.254.0 proxyarp lock crtscts modem ______________________________________________________________________
Примечание - мы НЕ используем (очевидную) маршрутизацию - и в частности, там нет опции defaultroute. Причина этого в том, что все, что вам (как PPP серверу) требуется сделать, это направить пакеты от внешнего ppp клиента через ваш LAN/INTERNET и маршрутизации пакетов клиента вашей LAN наружу.
Все, что для этого нужно - чтобы хост маршрутизировал клиентскую машину и использование опции pppd 'proxyarp'.
Опция 'proxyarp' устанавливает (сюрприз) прокси ARP запись в ARP таблице PPP сервера, которая в основном говорит 'посылать все пакеты, предназначенные для PPP клиента ко мне'. Это самый простой способ установить маршрутизацию одному PPP клиенту, но вы не сможете использовать его, если вы маршрутизируете две LAN - вы должны добавить соответствующие сетевые маршруты, которые не могут использовать прокси ARP.
Вы наверняка пожелаете обеспечить динамическое распределение IP адресов для ваших модемных пользователей. Вы можете сделать это распределением IP адресов для каждого порта входящего модемного соединения. Теперь, создайте /etc/ppp/options.ttyXX для каждого порта входящего модемного соединения.
В них просто поместите локальный (серверный) IP адрес и IP адрес, который должен использоваться для этого порта. Например
______________________________________________________________________
kepler:slip01 ______________________________________________________________________
В частности, обратите внимание, что вы можете использовать допустимые главные имена машин в этом файле (я нахожу, что напрмер я помню IP адреса только критических машин и устройств в моих сетях - имена легче запомнить)!
Для того, чтобы облегчить работу нашим модемным PPP пользователям, мы создадим глобальный псевдоним (в /etc/bashrc) так, чтобы одна простая команда запускала ppp на сервере, как только они регистрируются в системе.
Это выглядит примерно так
______________________________________________________________________
alias ppp="exec /usr/sbin/pppd -detach" ______________________________________________________________________
Что это значит
exec : это означает заменить запущенную программу (в этом случае shell) программой, которая указана.
pppd -detach : запустить pppd, и НЕ переводить в фоновый режим.
Это гарантирует, что когда pppd завершит работу, то не останется никаких других процессов.
Когда пользователь регистрируется по этому способу, при выполнении команды 'w' он появляется как
______________________________________________________________________ 6:24pm up 3 days, 7:00, 4 users, load average: 0.05, 0.03, 0.00 User tty login@ idle JCPU PCPU what hartr ttyC0 3:05am 9:14 - ______________________________________________________________________
И это - все ... Я рассказал вам о простом, основном PPP сервере!
Договоритесь с сетевым администратором другой LAN о IP адресах, которые будут использоваться на каждом конце интерфейса PPP. Если вы используете статические IP адреса, то также вероятно потребуется, чтобы вы звонили по определенному номеру телефона.
Теперь отредактируйте соответствующий файл /etc/ppp/options[.ttyXX] - это хорошая идея - иметь специальный модем и порт на вашем конце для этого соединения. Может потребоваться изменить ваш файл /etc/ppp/options - и создать соответствующие файлы options.ttyXX для любых других соединений!
Определите IP адреса на вашем конце PPP соединения в соответствующем файле опций точно так, как указано выше для статических IP адресов.
Ниже перечислены краткие инструкции для получения и установки исходных текстов ядра Linux. Полная информация может быть получена .
Для того чтобы установить и скомпилировать ядро Linux, вы должны зарегистрироваться как root.
1. Перейдите в каталог /usr/src : cd /usr/src
2. Проверьте наличие каталога с исходными текстами /usr/src/linux
3. Если у вас нет исходных текстов, то скачайте их с или ближайшего зеркала.
Если Вы ищете более ранние версии ядра (типа 1.2.X), то они хранятся в каталоге .
4. Выберите соответствующее ядро - обычно самое современное доступно для всех. Отыщите его и поместите исходный tar файл в /usr/src.
Обратите внимание: файл 'tar' - архив - возможно сжатый (так как исходные тексты ядра Linux это файлы tar), содержащий множество файлов в ряде каталогов. Это Linux эквивалент DOS'овской утилиты zip, поддерживающая сохранение структуры каталогов в архиве.
5. Если вы уже имеете установленные исходники Linux, но хотите установить новое ядро, то вы должны удалить старые исходники. Используйте команду rm -rf /usr/src/linux
6. Теперь разожмите и извлеките исходники, используя команду tar xzf linux-2.0.XX.tar.gz
7. Теперь, cd /usr/src/linux и прочитайте файл README. Он содержит превосходное объяснение о том как настроить и скомпилировать новое ядро. Прочитайте этот файл (хорошая идея напечатать его и иметь копию под руками, пока вы компилируете, если у вас не было достаточно времени знать все по этому вопросу).
Настройка DNS в качестве кэширующего сервера имен (который использует строку "forwarders' в файле named.boot, указывающем на DNS вашего ISP) относительно проста. Книга O'Reilly (DNS и Bind) объясняет все, что вы хотите знать об этом.
Имеется также DNS-HOWTO.
Если вы работаете с маленькой LAN, которая может обращаться к Интернету через ваш Linux PC (используя IP Masquerade, например), то вероятно хорошая идея запустить локальный сервер имен (с директивой forwarders) пока связь установлена поскольку это минимизирует трафик и задержки, связанные с определением IP адреса по доменному имени.
Тонкость сетевого этикета: спросите разрешение вашего ISP, прежде чем вы начнете использовать вторичный кэширующий сервер имен в домене вашего ISP. Правильно сконфигурированный ваш DNS не будет вызывать никаких проблем для вашего ISP вообще, но если вы настроите что-то неправильно, то это может привести к проблемам.
Вы должны упорядочить прохождение пакетов вашей LAN по интерфейсу, который устанавливает PPP связь. Это - двустадийный процесс.
Прежде всего, вы должны установить маршрут от машины, выполняющей PPP соединение с сетью(ями) на удаленном конце связи. Если связь с Интернет, то она может быть обработана в соответствии с маршрутом заданным по умолчанию, установленным непосредственно pppd на вашем конце соединения, используя опцию 'defaultroute' pppd.
Если однако, связь связывает только две LAN, то специальный сетевой маршрут добавляется для каждой сети, которая доступна через соединение. Это делается с использованием команды 'route' для каждой сети в скрипте /etc/ppp/ip-up (см. После того, как связь установлена... для инструкций о том, как это выполнить).
Вторая вещь, которую вы должны сделать, это сообщить другим компьютерам о вашей LAN, что ваш Linux компьютер является фактически 'шлюзом' для сети(ей) на удаленный конец ppp соединения.
Конечно, сетевой администратор на другой стороне соединения также должен проделать все это! Однако, так как он/она будет направлять пакеты в указанные вами сети, то потребуется специфический сетевой маршрут, не заданный по умолчанию (unless the LANs at the far and of the link are linking into you to access the Internet across your connection).
Этот документ обеспечивает руководство людям, которые желают использовать Linux и PPP, чтобы дозвониться до PPP сервера и установить IP соединение, используя PPP. Предполагается, что PPP уже скомпилирован и установлен на вашей Linux машине (но кратко раскрываются реконфигурирование/перекомпиляцию вашего ядра для включения поддержки PPP).
Хотя для установления PPP соединения можно использовать dip (стандартный способ создания SLIP соединения), сценарии dip вообще-то очень сложны. По этой причине, этот документ не раскрывает использование dip для установки PPP соединения.
Вместо этого, этот документ описывает стандартное программное обеспечение Linux PPP (chat/pppd).
Вы должны обратить внимание, что имеется несметное число способов установки Linux PPP сервером. Этот документ описывает один метод, используемый автором для установки нескольких маленьких PPP серверов (каждый по 16 модемов).
Этот метод, как известно, работает хорошо. Однако необязательно, что он самый лучший.
Как уже упомянуто, имеется много способов это сделать. Как я говорил, имеется способ, которым это делаю я (использование многопортовой платы Cyclades) и циклический пулл телефонных линий.
Если вам не нравится способ, который я представляю здесь, пожалуйста, не стесняйтесь идти собственным путем. Мне бы хотелось включить дополнительные методы в будущие версии HOWTO. Так что, пожалуйста, вышлите мне ваши комментарии и способы!
Пожалуйста, обратите внимание, что этот раздел касается только установки Linux в качестве PPP сервера. Я (даже) не предполагаю включать информацию о установке специальных терминальных серверов итп.
Также я все-таки экспериментирую с теневыми паролями (но сделаю так когда-нибудь).
Информация в настоящее время не представлена, и следовательно никакие звоночки и свистки, которые требуются для shadow suite, не включаются.
Теперь, когда вы создали ваши файлы /etc/ppp/options и /etc/resolv.conf (и, в случае необходимости, файл /etc/ppp/pap|chap-secrets), вы можете проверить установки, устанавливая PPP соединение вручную. (Как только мы настроим соединение вручную, то мы сможем автоматизировать процесс).
Чтобы сделать это, ваша коммуникационная программа должна уметь завершать свою работу БЕЗ сброса модема. Minicom может делать это - ALT Q (или в старых версиях minicom CTRL Q)
Удостоверьтесь, что вы зарегистрировались как root.
Запустите вашу коммуникационную программу (типа minicom), позвоните на PPP сервер и зарегистрируйтесь как обычно. Если вы должны выдать команду, чтобы запустить PPP на сервере, введите ее. Теперь вы увидите мусор, который вы видели прежде.
Если вы используете pap или chap, то вы увидите мусор сразу после содинения с удаленной системой, без приглашений к регистрации (хотя это бывает не на всех серверах, попробуйте нажать enter и посмотрите, не появится ли мусор).
Теперь выйдите из коммуникационной программы без сброса модема (ALT Q или CTL Q в minicom) и в командной строке Linux (от root) напечатайте
______________________________________________________________________
pppd -d -detach /dev/ttySx 38400 & ______________________________________________________________________
-d опция включает отладку - все подробности установки ppp соединения будут записываться в ваш системный лог - что очень пригодится, если у вас появятся проблемы.
Лампочки на вашем модеме должны теперь вспыхивать, поскольку PPP соединение установливается. Это будет продолжаться короткое время, пока PPP соединения не будет установлено.
В этой точке вы можете посмотреть интерфейс PPP, дав команду
______________________________________________________________________
ifconfig
______________________________________________________________________
Кроме устройств ethernet и loopback вы должны увидеть еще кое-что вроде:
______________________________________________________________________ ppp0 Link encap:Point-Point Protocol inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:552 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 ______________________________________________________________________
Прежде, чем вы сможете установить ваш PPP сервер, ваш Linux box должен быть способен обрабатывать стандартный доступ по коммутируемым линиям.
Этот howto не покрывает установку этой системы. Пожалуйста см. документацию по выбранному вами getty и Serial-HOWTO для информации об этом.
В этом HOWTO предполагается, что вы используете ядро Linux 1.2.x с PPP 2.1.2 или Linux 1.3.X/2.0.x и PPP 2.2.
На время написания последняя официальная версия PPP доступного для Linux - ppp-2.2f. Новая версия (ppp-2.3) - все еще в стадии бета-тестирования.
Возможно использовать PPP 2.2.0 с ядром 1.2.13. Это требует патчей для ядер. Рекомендуется для пользователей с ядром версии 1.2.13 поставить на ppp-2.2, поскольку он включает исправления нескольких ошибок и расширения.
Также вы должны обратить особенное внимание на то, что вы не можете использовать PPP 2.1.2 с ядром Linux версий 2.0.X.
Пожалуйста, обратите внимание, что этот документ не покрывает проблемы, являющиеся результатом использования загружаемых модулей для ядра Linux 2.0.x., пожалуйста, см. kerneld mini-HOWTO и документацию по ядру/модулю 2.0.x (в Linux 2.0.x исходное каталог /usr/src/linux/Documentation/...).
Поскольку этот документ разработан для помощи новым пользователям, вам строго рекомендуется использовать соответствующие версию ядра Linux и PPP, про которые известно, что вместе они работают устойчиво.
Linux оперирует PPP двумя частями
PPP демон упомянутый выше
ядерная поддержка для PPP
Многие дистрибутив, кажется, по умолчанию обеспечивают встроенный в ядро PPP в своих ядрах, но другие этого не делают.
Если при начальной загрузке в сообщениях вашего ядра есть что-нибудь вроде
______________________________________________________________________
PPP Dynamic channel allocation code copyright 1995 Caldera, Inc. PPP line discipline registered. ______________________________________________________________________
то ваше ядро имеет встроенную поддержку PPP.
Это говорит о том, что вы вероятно захотите скомпилировать ваше собственное ядро вместо пришедшего с дистрибутивом для обеспечить наиболее эффективное использование ваших аппартных ресурсов системой. Стоит вспомнить, что ядро не может быть выгружено из памяти, и потому уменьшение ядра создает преимущества для машин с ограниченным размером памяти.
Этот документ обеспечивает минимальные инструкции по перестройке ядра в разделе ``Конфигурированием вашего ядра Linux".
Для подробностей, см. Kernel-HOWTO на .
Вы должны использовать ppp-2.2 с ядром версии 2.0.x. Вы можете использовать ppp-2.2 с ядром версии 1.2.x (если вы отпатчилиядро) иначе вы должны использовать ppp-2.1.2.
Некоторые PPP серверы требуют, чтобы вы ввели команду и/или нажали return после завершения процесса регистрации, чтобы на удаленном конце стартовал ppp.
Проверьте ваш сценарий chat (см. выше).
Если вы регистрируетесь вручную и обнаруживаете, что после этого вы должны послать return, чтобы запустить PPP, то просто добавьте пустую пару "ожидаемое- посылаемое" в конец вашего сценария chat (пустая "посылаемая" строка фактически посылает return).
Когда ваш сценарий chat завершается, на вашем PC запускается pppd. Однако, если вы не завершили процесс входа в систему на сервере (включая посылку команды, требуемой для запуска PPP на сервере), то PPP не запустится.
Так lcp пакеты отражаются, и вы получаете эту ошибку.
Вы должны тщательно проверить и исправить (в случае необходимости) ваш сценарий chat (см. выше).
Вы можете получить такую ошибку, если вы вкомпилировали поддержку ppp в ваше ядро как модуль, но сам модуль не построили и не установили. Посмотрите Kernel-HOWTO и файл README в /usr/src/linux!
Другая версия, относящаяся к проблеме с модулем, состоит в том, что вы ожидаете, что требуемые модули будут автоматически загружены, но не запустили демон kerneld (который на лету автоматически загружает и выгружает модули).
Проверьте kerneld mini-HOWTO для информации по настройке kerneld.
Если вы не запускаете pppd от пользователя root (и pppd - не suid для root), то вы может получить это сообщение.
Если pppd отказывается установить маршрут заданный по умолчанию, то, поэтому он (совершенно правильно) отказывается удалять/заменять существующий заданный по умолчанию маршрут.
Обычная причина состоит в том, что некоторые дистрибутивы заданный по умолчанию маршрут устанавливают через ethernet-адаптер, а не через сеть.
См. NAG Linux и Net2/3 HOWTOS для информации о правильной установке вашей платы ethernet и связанных c нею маршрутов.
Также возможно, что ваша LAN уже использует шлюз/маршрутизатор и в вашей таблице маршрутизации на него был установлен маршрут по умолчанию.
Исправление этой последней ситуации может требовать некоторых знаний IP сетей и лежит не охватывается этим HOWTO. Предлагаю вам обратиться к экспертам (в группы новостей).
Для завершения связи PPP используйте стандартную команду ppp-off, чтобы закрыть его (помните - вы должны быть root'ом или членом группы PPP!).
В вашем системном логе вы увидите что-то вроде:
______________________________________________________________________ Oct 21 16:10:45 hwin pppd[19873]: Interrupt received: terminating link Oct 21 16:10:45 hwin pppd[19873]: ipcp: down Oct 21 16:10:45 hwin pppd[19873]: default route ioctl(SIOCDELRT): Bad address Oct 21 16:10:45 hwin pppd[19873]: fsm_sdata(LCP): Sent code 5, id 2. Oct 21 16:10:46 hwin pppd[19873]: fsm_rtermack(LCP). Oct 21 16:10:46 hwin pppd[19873]: Connection terminated. Oct 21 16:10:46 hwin pppd[19873]: Exit. ______________________________________________________________________
Не волнуйтесь о SIOCDELRT - это только замечание pppd о том, что он завершает работу и незачем волноваться.
Хотя скрипт ppp-on-dialer отлично подходит для серверов, которые автоматически запускают pppd на серверной стороне как только вы зарегистрировалися, некоторые серверы требуют, чтобы вы явно дали команду запуска PPP на сервере.
Если вы должны дать команду, чтобы запустить PPP на сервере, вы должны отредактировать скрипт ppp-on-dialer.
В КОНЦЕ сценария (после строки пароля) добавьте дополнительную пару ожидаемой-посылаемой строк - которая искала бы вашу подсказку регистрации в системе (отличая символы, которые имеют специальное значение в оболочке Bourne - типа $ и [ или ] (открытые и закрытые квадратные скобки).
Как только программа chat нашла командную строку оболочки, она должна выдать команду запуска ppp, требуемую для PPP сервера вашего ISP.
В моем случае, мой PPP сервер использует стандартную подсказку bash Linux.
______________________________________________________________________
[hartr@kepler hartr]$ ______________________________________________________________________
и требует, чтобы я напечатал
______________________________________________________________________
ppp ______________________________________________________________________
чтобы запустить PPP на сервере.
Хорошо бы учесть здесь некоторые ошибки, так например в моем случае я использую
______________________________________________________________________
hartr--hartr ppp ______________________________________________________________________
Это значит, что если мы не получили подсказку в течении заданной паузы, то посылаем возврат каретки и ищем подсказку снова.
Как только подсказка получена, посылаем строку ppp.
Обратите внимание: не забудьте добавить \ к концу предыдущей строки, так что бы chat думал, что весь сценарий chat состоит из одной строки!
К сожалению, на некоторых серверах набор подсказок часто меняется!
Возможно вам понадобится несколько раз зарегистрироваться, используя minicom, чтобы понять, что происходит, и найти устойчивую "ожидаемую" строку.
Нужно уметь закрывать работающее соединение.
Это описывается в разделе ``Завершение PPP связи''.
Вы ДОЛЖНЫ знать то, какие платы/устройства имеются внутри вашего PC, если вы собираетесь перекомпилировать ваше ядро!!! Для некоторых устройств (типа звуковых плат) вы должны также узнать различные установки (типа IRQ, адресов ввода-вывода и пр.).