|
Установка PPP-соединения в LinuxВ. Водолазкий ([email protected]) Ох, как же мне надоел навязчивый сервис от Microsoft! Надоели «особенности» операционной системы Windows95, надоели ошибки в Microsoft Word, которые стоили при подготовке диссертации немало бессонных ночей, в общем... плюнул я на красивые форточки и всерьез сел за Linux. Конечно же, многое поначалу было непривычно, а некоторые вещи поражают меня до сих пор. Возьмем, к примеру, проблему русификации. Есть и шрифты, и раскладки клавиатуры, и кодировка КОИ-8 постепенно пробила себе дорогу даже на экраны пользователей Windows... Но вот, чтобы воспользоваться всем этим, надо читать документацию на английском языке, подготовленную и переданную мировым сообществом гражданином Израиля, которому помогали ребята из Голландии, США, Тайваня, Замбии (или Заира - по e-mail адресу разве поймешь!) и только один наш соотечественник - Сергей Вакуленко оказался причастным к решению этой проблемы. Причем, как выяснилось, разработанные им шрифты и раскладки вошли в официальную версию X11 Release 6 и теперь доступны для всего человечества. Грустно, люди со всего мира о нас заботятся, бесплатно делают действительно нужную и важную работу, а нам наплевать! Знаете ли вы, например, о проекте интернационализации программных средств для UNIX, предусматривающим разработку, среди прочего и полностью русскоязычных версий всех утилит и системных программ. Но руководит русской частью проекта не родной наш Госкомитет по Информатике, а Ульрих Дреппер из западногерманского университета в Карлсруэ. Вот так... Но к чему такое затянувшееся введение? А вот к чему! Дело в том, что университетские традиции Европы и Штатов предполагают обучение студентов на многопользовательских UNIX- системах, что предполагает качественно иной уровень «массовой» UNIX-культуры - базовых знаний системы, квалифицированных специалистов в пределах досягаемости неофитов, литературы, доступа к Internet и многих других факторов. У нас, по ряду причин, это не так. И поэтому нередко документация по установке UNIX-программ, особенно связанных с настройкой сетевого подключения оказывается не слишком понятной, или, что еще хуже, применимой. Одной из таких проблем является подключение Linux-машины к сети Internet. Поэтому давайте попробуем сделать эту операцию шаг за шагом. Прежде всего определимся с типом соединения. Отечественные провайдеры, в отличие от большинства администраторов многопользовательских систем на Западе отдают предпочтение не SLIP-соединению, а более современному протоколу PPP, что между прочим, опровергает расхожий тезис об отсталости российских Internet-технологий. Основные преимущества PPP по сравнению со SLIP состоят в следующем:
Прежде чем приступить к непосредственной установке необходимо собрать
некоторый объем исходных данных. Вот что нам потребуется:
Особенность подключения Linux-машины от DOS состоит прежде всего в том,
что ваш компьютер, подключенный с помощью PPP-соединения превращается в
полноправный узел сети Internet, в котором вы можете выступать как клиентом,
так и сервером. Это означает, что прежде всего необходимо решить проблему
маршрутизации - то есть определения путей доступа от вашей машины к другим
компьютерам сети и обратно. Проблема для UNIX не нова и решается одним
из трех способов:
Кстати, а как установить имя машины? Все проблемы решает строка типа: /bin/hostname myname.rinet.ru ,которая помещается в один из инициализационных файлов Что касается самого выбора имени, то надо было договариваться с провайдером раньше - при регистрации. А теперь ваш IP-адрес будет ассоциироваться у всего мира с машиной mynet.rinet.com. Ура, мы становимся сервером Internet и можем сами командовать электронной почтой в пределах машины! Так чтобы послать вам письмо, ваш корреспондент должен теперь использовать что-нибудь типа [email protected]. Согласитесь, что это уже круто! Впрочем надувать щеки пока рано. Это ведь только перспектива, а пока нам предстоит немало потрудиться. Мы используем комбинированный подход: создадим крохотную локальную базу данных хостов и подключим внешний DNS-сервер. Прежде всего необходимо установить значение нескольких конфигурационных файлов. Начнем с файла /etc/host.conf. Вот его содержимое с учетом сделанных ранее допущений: order hosts, bind
Первая строка указывает на способ организации поиска при поиске адресов узлов сети. Ключ hosts говорит о необходимости просматривать прежде всего локальную базу данных, размещаемую обычно в файле /etc/hosts, а второй -- bind требует связаться для этого с внешним сервером DNS, который, между прочим, может быть запущен физически и на этой же физической машине. Вторая строка файла объявляет о поддержке этим сервером «многоженства», то есть использовании сразу нескольких IP-адресов. Хотя на работу служб DNS этот параметр влияния не оказывает, не жадничайте - поставьте и забудьте. Зачем принята такая структура? Исключительно для удобства настройки системы! Так, если вы установили содержимое /etc/host.conf в точности, как это написано в примере, то named вначале будет просматривать файл /etc/hosts и лишь затем обращаться к внешним источникам информации, а если вы введете строку вида: order bind, hosts то наоборот - вначале будет сделан запрос к удаленному серверу, и только в том случае, если вы обращаетесь к локальным адресам будет использована внутренняя база данных. Впрочем, как показала практика, первый вариант в большинстве случаев является оптимальным. Поэтому перейдет к обсуждению содержимого файла /etc/hosts. Вот что подойдет вам в подавляющем большинстве случаев:
Нам необходимо только две записи - локальный хост, используемый для работы ряда программ в пределах машины и IP-адрес вашей машины, который установлен вашим провайдером. Для упрощения доступа определяется также синоним - просто имя myname. Но и это еще не все! Нам необходимо указать системе, какими же серверами DNS необходимо пользоваться для определения IP-адресов. Эта информация хранится в файле /etc/resolv.conf: domain rinet.ru
В этом файле мы резервируем домен и указываем имена серверов (по одному на строку), которые используются нашей системой. По большому счету, для конечного пользователя этой информации вполне достаточно. Теперь, как только вы подключитесь к провайдеру, все запросы к сетевым ресурсам будут обслуживаться внешним сервером DNS, IP-адрес которого мы указали выше. Но что представляет из себя процесс подключения? Реально он состоит из нескольких этапов:
Начнем с программы, которую обычно используют для установки соединения - ppp-on. Несмотря на то, что эта программа помещается при установке системы в каталог /sbin это обычный сценарный файл, в который вы, кстати, должны внести ваши данные: #!/bin/sh # # ppp-on # # Это основные параметры, которые вы должны настроить TELEPHONE=9567800 # По этому номеру будем звонить ACCOUNT=ppmyname # Регистрационное имя PASSWORD=begemot # Пароль LOCAL_IP=194.87.171.101 # А если динамический, то 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 # # Теперь укажем полное имя программы набора номера # DIALER_SCRIPT=/etc/ppp/ppp-on-dialer # # Наиболее типичный запуск демона после соединения с помощью # ppp-on-dialer # exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS2 38400 \ asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \ noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT Ну хорошо, в конце концов ppp-on вызовет программу ppp-on-dialer, а что представляет собой она? Это тоже небольшой сценарий, который приведен ниже: #!/bin/sh # # /etc/ppp-on-dialer # Выполняет всю черную работу по установке соединения # exec 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 ATDP$TELEPHONE \ CONNECT '' \ name:--name: $ACCOUNT \ assword: $PASSWORD Фактически, это последовательность сообщений, получаемых программой
от модема и ее реакции. Нет ничего удивительного, что этот процесс, по
большому счету, вполне стандартен для миллионов компьютеров во всем мире.
Но, как говорится в одной рекламе:
Попросту говоря, вам потребуется указать модему, что вы пользуетесь не тональным набором номера (ATDT) , а импульсным (ATDP), который принят у нас. На этом изменения в этом файле можно считать законченными. Впрочем, это еще не все... Осталось установить еще одну строчку в файле /etc/ppp/options, а именно - указать имя домена (в нашем случае - rinet.ru). lock
Все! Вопреки многочисленным сказкам о неподъемности UNIX для конечного пользователя мы установили клиентскую часть ppp-соединения, затратив на это, максимум полчаса. Теперь нам потребуется только убедиться в работоспособности нашего соединения. Прежде всего, проверим, как работает TCP/IP. Для этого нам достаточно
использовать команду PING. Вначале потренируемся «на кошечках» и
протестируем работу TCP/IP внутри вашего компьютера без выхода в Internet.
Итак, на моей домашней 486DX4/100 получается следующее:
ping localhost PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=1.0 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.8 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.8 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.8 ms --- localhost ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.8/0.8/1.0 msТеперь смело в бой! Соединяемся с сервером (ppp-on соединится с провайдером, запустит демон pppd и вернет вам управление - запускать его в фоновом режиме не нужно), а после этого можно проверить доступность вашего провайдера с помощью команды типа ping www.rinet.ru. Если все в порядке, то вы получите времена задержки до 200-300 миллисекунд, в зависимости от пропускной способности вашего модема. Но это только небольшой, хотя и важный участок сети - между вами и провайдером. А как работает линия дальше? Можно для проверки вновь воспользоваться ping, но на мой взгляд это слишком однообразное и нудное занятие, которое не плохо бы слегка оживить. А для оживления мы используем программу traceroute, которая возвращает список узлов, через который проходит ваш пакет при запросе типа ping. Для придания романтизма рутинной проверке работспособности PPP-соединения мы пойдем «в Пентагон», а вернее в сетевой центр NIC.DDN.MIL, который является одним из старейших и надежных сетевых информационных компьютеров. Вот что я получил для своего соединения (безымянный модем 14400): traceroute nic.ddn.mil 1 cs2511-1.rinet.ru (194.87.171.72) 263.971 ms 278.509 ms 259.626 ms 2 as51.rinet.ru (194.87.171.71) 229.535 ms 1829.28 ms 189.497 ms 3 hq-1-L0.Demos.net (194.87.15.1) 199.546 ms 279.114 ms 260.114 ms 4 m9-1-S5-1-2048K.Demos.net (194.87.15.130) 209.016 ms 299.288 ms 229.57 ms 5 mix-serial3-3.Boston.mci.net (204.189.128.157) 389.54 ms 509.237 ms 469.622 ms 6 core-fddi-0.Boston.mci.net (204.70.2.33) 399.489 ms 499.211 ms 479.66 ms 7 core3-hssi-2.WestOrange.mci.net (204.70.1.1) 459.415 ms 499.229 ms 428.81 ms 8 core3-hssi-2.WestOrange.mci.net (204.70.1.1) 439.498 ms 439.218 ms 469.64 ms 9 sprint-nap.WestOrange.mci.net (204.70.1.210) 509.465 ms 389.307 ms 499.47 ms 10 sprint-nap.disa.mil (192.157.69.45) 479.508 ms 489.183 ms 419.584 ms 11 137.209.200.202 (137.209.200.202) 589.512 ms 409.272 ms 430.3 ms 12 RESTON-HUB.NIPR.MIL (137.209.60.1) 568.761 ms * 540.131 ms 13 198.26.127.26 (198.26.127.26) 489.416 ms 439.21 ms 599.602 ms 14 nic.ddn.mil (192.112.36.5) 539.497 ms 499.047 ms 489.617 msВо-первых, мы проверили доступность и работу сервера DNS (мы ведь обратились к серверу NIC по имени, а не по IP-адресу), а во-вторых убедились, что пакеты бегают как положено по всему Internet. Теперь вы без проблем можете пользоваться ftp, telnet, gopher, archie, www и прочими приятными программами. Не могу удержаться, чтобы лишний раз не пнуть DOS, Windows и проч. Все необходимые клиенты для всех служб Internet входят в стандартную поставку Linux. Кстати, Netscape выпустила версии своего Навигатора для Linux (как 2.0, так и 3.01), и работают эти программы стабильнее и быстрее, чем в Windows. Насчет «быстрее « можно и поконкретнее. Я пытался «пропинговать» nic.ddn.mil и из под Windows 95. На той же машине... И получил среднее время доступа порядка 760 миллисекунд. Факты говорят сами за себя... Но я знаю, знаю, что поклонники «форточек» уже заготовили смертельный удар! И состоит он в простом и каверзном одновременно вопросе: А что делать, если телефон провайдера занят? Неужели потребуется еще и еще раз вручную вводить ppp-on? Вы что же, рассчитываете на ответ настоящего аскета - мол нет в этом
никакой проблемы, и руки у пользователя не отвалятся? Не дождетесь, в UNIX-е
ведь работают такие же люди как и везде, и тоже не любят дурной работы.
А поэтому позвольте предложить вам небольшой сценарий, который организует
дозвон до провайдера в автоматическом режиме. Вот он:
#!/bin/sh # # Установка ppp-соединения с автоматическим # дозвоном до провайдера # # Написано на основе заметочки в # Linux Gazette No.13 ([email protected]) # # # [email protected] В.В.Водолазкий, Москва, 1997 # # Вызов программы: isp [NNN] # где NNN - время дозвона в минутах (мне очень понравилось это в # программе Trumpet Winsock # # По умолчанию дозваниваемся в течение 30 минут # wd=1 # счетчик попыток stopflag=1 # Признак окончания работы сценария SLEEPTIME=45 # Время засыпания между попытками echo echo "Устанавливаю ppp-соединение " echo # # if [ "$1" = "" ]; then # Установка предельного времени дозвона repeattime=30 # Если не указали специально, то будем ждать 30 минут else repeattime=$1 fi # А не запущен ли pppd раньше. # Этой проверкой мы блокируем повторную инициализацию канала... foo=$(ps -ax) # Посмотрим, какие процессы крутятся в системе bar=$(echo $foo | grep "/usr/sbin/pppd") # Есть ли родимый pppd? if [ $bar ]; then # Есть, поэтому заканчиваем работу... stopflag=0 echo echo " pppd уже функционирует!" echo exit 0 fi echo "Время на дозвон к провайдеру: $repeattime" while [ $stopflag ]; do # Основной цикл дозвона echo "Попытка соединения: $wd" ppp-on # Просто вызываем программу установки соединения sleep $SLEEPTIME foo=$(ifconfig); # смотрим, не образовался ли канал ppp0 echo $foo bar=$(echo $foo | grep "ppp0" ) if [ "$bar" = 1 ]; then # Да, все в порядке echo "**********************" echo "*** Соединение с провайдером установлено! ****" echo "**********************" exit 0 else # Не вышло... let wd=$wd+1 # Корректируем счетчик попыток if [ $wd -gt $repeattime ]; then stopflag=0 echo echo "Установить соединение не удалось..." echo exit 1 fi fi done # Завершаем работу сценарияНа этом можно сделать паузу. Паузу, потому что за кадром остались такие немаловажные вопросы, как установка и настройка Linux-машины в качестве узла Internet, обеспечивающего доступ пользователей Сети к его ресурсам. Но об этом в следующий раз.
|
|||||||||||||||||||||||||||||||||||||||||||||||
With any suggestions or questions please feel free to contact us |