Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
эта страница доступна на следующих языках: English  Castellano  Deutsch  Francais  Nederlands  Russian  Turkce  

[Photo of the Author]
автор Guido Socher

Об авторе:

Guido давний поклонник Linux. Ему нравится эта ОС не только из-за ее высокого технического качества, но и из-за сообщества Linux.


Содержание:

Использование разных провайдеров для доступа в Internet

[Illustration]

Резюме:

Заметка рассказывает о настройке нескольких ISP под Linux и использования их.
Данное решение подходит не только для одного отдельно взятого компьютера подключенного к Internet, но и, например, для использования доступа в Internet всей семьей одновременно. Все, что необходимо сделать - настроить DNS proxy (DNS forwarding) и IP masquerading под Linux.



 

Введение

С недавних пор доступ в Internet стал довольно простым и обычным делом. Большинство ISP больше не требуют абонентской месячной платы и заключения длительных контрактов. Если выбранный вами провайдер испытывает технические проблемы или предоставляет неудовлетворительный сервис - вы просто меняете его. В Германии мы называем это "Internet by Call". Вам не надо регистрироваться или что-то подписывать. Вы просто платите через обычную телефонную квитанцию. Обратите внимание, что это не бесплатный Internet. Бесплатный Internet обычно предоставляют провайдеры находящиеся на грани банкротства и обычно это плохой канал доступа. При использовании "Internet by Call" вы платите, иногда очень хорошую плату, но получаете соответственно хороший доступ. Мы не будем рассматривать детали специфичные для вашей страны, заметка просто рассказывает об использовании разных провайдеров и разных Internet соединений.

Вид доступа, который мы рассмотрим - point-to-point (PPP). Под Linux существует программа pppd, используемая для такого соединения. Это очень хорошее приложение, но к сожалению, в документации к нему рассматриваются примеры, которые уже почти не используются провайдерами для доступа. Большинство ISP в настоящее время используют :

Заметка как раз рассказывает об использовании этих современных возможностей. Все, что вам надо знать о вашем провайдере - телефонный номер, логин и пароль.

Использование IP masquerading под Linux предоставляет возможность использования Internet всей вашей сетью через одно ppp-соединение. Необходимым условием является наличие хотя бы одного компьютера, работающего под ОС Linux.

network with IP
masquerading

Использование IP masquerading и разных провайдеров создает две проблемы:

  1. Смена DNS сервера, вследствие смены провайдера и скорее всего вам не захочется менять настройки каждый раз.
  2. Вам захочется создать список из уже настроенных ISP, из которых пользователь смог бы выбрать. Этот список должен быть универсальным в смысле использования его любой ОС.
Мы решим эту задачу 1) использованием DNS proxy dnrd и 2) cgi скрипта создающего web страницу (screenshot) с которой можно установить соединение.

   

Установка pppd

Все конфигурационные файлы pppd находятся в каталоге /etc/ppp и для запуска этого приложения необходимо обладать привилегией root. Во время инсталляции и первых тестов надо зарегистрироваться root'ом. Позже я расскажу каким образом любой пользователь сможет установить соединение и завершить его. Не рекомендуется работать в системе все время с привилегией root'а, потому что можно по ошибке что-нибудь испортить.

Наиболее значимые файлы для pppd :

Можете скачать файл ppp.tar.gz, распаковать его в каталоге /etc, при этом будет создан подкаталог ppp и все остальные. Если у вас уже есть /etc/ppp переименуйте его перед этим:
cd /etc
mv ppp ppp_old
tar zxvf ppp.tar.gz
Среди распакованных файлов есть дополнительные скрипты помогающие провести установку и настройку. Их назначение мы рассмотрим ниже. (Обратите внимание : кое-где встречаются цены некоторых провайдеров. Они могут быть неправильными. Обращайтесь за точной информацией на их web страницы.)

Посмотрим на конфигурационный файл для ISP arcor :
# This is /etc/ppp/peers/arcor
# Home page of the ISP arcor: http://www.arcor-online.de/
#----------
# serial device and modem speed (normally 38400 or 57600):
/dev/modem 57600
# modem dial-out script with phone number:
connect '/etc/ppp/scripts/ppp-on-dialer-pap 0192070'
# specific options, common options are
# read from /etc/ppp/options
noipdefault
# tell pppd to use this users name for PAP authentication:
user arcor
# try dynamic dns:
usepeerdns
#
Строка, начинающаяся с # - комментарий. Первый параметр (/dev/modem) устройство для использования. Это softlink к устройству, где установлен ваш модем (/dev/ttyS0 или /dev/ttyS1):

cd /dev
ln -s ttyS0 modem
57600 - скорость модема, которая зависит от самого устройства. Строка, начинающаяся с "connect" определяет скрипт (/etc/ppp/scripts/ppp-on-dialer-pap) для взаимодействия с модемом через AT команды. Эти команды являются командным языком для модемов. Параметр, передаваемый скрипту (0192070) - номер для набора.
Опция noipdefault необходима для динамического назначения IP адреса, а usepeerdns - для автоматической настройки DNS, которая заключается в следующем - если ISP предоставляет IP адреса 1 и 2 DNS серверов, они будут доступны в скрипте /etc/ppp/ip-up script через переменные окружения DNS1 и DNS2.

Все resolver библиотеки обращаются к файлу /etc/resolv.conf. Этот файл (/etc/resolv.conf) используется такими приложениями как netscape, sendmail... для поиска DNS сервера. С помощью скрипта ip-up создадим необходимые записи в /etc/resolv.conf.

Итак, мы определили телефонный номер (0192070, для этого примера), скорость модема, последовательный порт и некоторые опции pppd. Я не буду рассматривать стандартные опции из файла /etc/ppp/options. Рассмотрите их на примере или в man page pppd. Попробуем позвонить нашему провайдеру (arcor). Для этого нам потребуются еще две вещи (пример для читателей в Германии) :
login name: arcor
password: internet

Эту информацию необходимо внести в /etc/ppp/pap-secrets, а логин также в /etc/ppp/peers/arcor. Добавьте следующую строку в /etc/ppp/pap-secrets:
# This is /etc/ppp/pap-secrets
# client server secret IP-addr
arcor   *   internet   0.0.0.0

Теперь попробуем. Для дозвона выполняем :

pppd call arcor
arcor в этом случае - название конфигурационного файла в /etc/ppp/peers/
Модем должен дозвониться и через несколько секунд вы будете online. В этот момент команда /sbin/ifconfig должна показать интерфейс ppp0. Выполните /sbin/ifconfig несколько раз пока не увидите это. Теперь можно использовать браузер и открыть страницу linuxfocus.org.

Для заваершения соединения выполните следующую команду :
killall pppd
Надеюсь у вас все получилось. Это точно должно работать для читателей из Германии. Для других стран необходимо изменить телефонный номер, логин и пароль ISP. Если все-таки что-то не получилось, посмотрите раздел shooting section в конце заметки.

В настоящий момент мы сделали настройки только для одного провайдера. Чтобы добавить других выполним следующие действия :

  1. копируем /etc/ppp/peers/arcor в файл с новым именем
  2. меняем телефонный номер и имя пользователя в этом файле
  3. добавляем новую строку в /etc/ppp/pap-secrets
Простое копирование и использование текстового редактора оказывается намного быстрее использования графического варианта настройки.

Теперь вы знаете как работает этот механизм. Далее рассмотрим некоторые скрипты, облегчающие процесс использования его. В частности два Set-UID perl скрипта для установки Internet соединения и завершения его любым пользователем (не обязательно root'ом).

Set-UID - механизм, позволяющий обычному пользователю выполнить специальную команду в качестве ее владельца. Конечно такие действия надо выполнять аккуратно, чтобы они не повлекли проблем с безопасностью системы. Эти скрипты включены в архив ppp.tar.gz, который вы уже распаковали. У них должна быть установлена "s" в битах доступа и в качестве владельца - root :

> cd     /etc/ppp/scripts
> ls -al     ppp-on   ppp-off
-rwsr-sr-x 1 root root 1258 Jan 7 13:24 ppp-off
-rwsr-sr-x 1 root root 2619 Jan 9 20:30 ppp-on

Если эти биты не установлены, поменяйте их командой :
chmod 6755 ppp-off ppp-on.
Эти скрипты выполняют следующие действия - pppd call some-config-file или killall pppd. Преимущество в том, что теперь любой пользователь может использовать их. Скрипт ppp-on имеет дополнительные возможности для работы с ISP не использующими автоматическую настройку DNS. Отредактируйте файл в соответствии с приведенными там примерами. Скрипты запускаются следующим образом :

Установить соединение :
/etc/ppp/scripts/ppp-on arcor
Завершить Internet соединение :
/etc/ppp/scripts/ppp-off
Теперь это должно работать для всех пользователей вашего компьютера. arcor - имя файла в /etc/ppp/peers/. Может вы его назвали по-другому.

Наконец продемонстрируем графический интерфейс для установки соединения и завершения его. Cgi-программа - создает интерактивные веб страницы. Хорошая cgi-программа работает с любым браузером и платформонезависима. Поэтому мы и будем использовать подобную.

pppcontrol
Почти все дистрибутивы Linux в настоящее время поставляются с веб-сервером apache. Для использования нашего скрипта распаковываете pppcontrol.gz и копируете в каталог cgi вашего веб-сервера (возможно это /home/httpd/cgi-bin/), делаете его исполняемым командой chmod 755 pppcontrol и редактируете переменную $url. Это должен быть url самого скрипта. Например, если ваш компьютер не подключен к сети, вы используете его локальный IP адрес :
$url="http://127.0.0.1/cgi-bin/pppcontrol";

Cgi-скрипт pppcontrol анализирует конфигурационный файл /etc/ppp/gpppwrap.conf, имеющий следующий синтаксис :
ppponarg: <agument_to_pass_to_ppp_on> - some additional comment string
Знак минус (-) в начале - комментарий, который будет показан на веб странице pppcontrol, но не будет передан в /etc/ppp/scripts/ppp-on. Вот примеры для "arcor" и "talknet" в /etc/ppp/peers :

# This is /etc/ppp/gpppwrap.conf
ppponarg: arcor -- arcor.net 3pf/min
ppponarg: talknet -- internet by call 3.5pf/min
Обратите внимание : цены 3pf/min и 3.5pf/min могли измениться к моменту чтения вами данной заметки.

Возможно вы получили слишком большой объем информации, но один раз настроив все, вам останется только время от времени добавлять/удалять ISP, что очень просто.
Вы можете выбрать ISP из списка на веб странице и установить соединение щелкнув кнопку.

 

DNS proxy

В предыдущей части мы рассмотрели настройку для одного компьютера. Настройка DNS была выполнена таким образом, что мы меняли /etc/resolv.conf каждый раз при установлении нового соединения.
Если вы используете IP masquerading для предоставления доступа в интернет компьютерам в вашей сети, будет довольно сложно изменить /etc/resolv.conf на каждом. Если вы используете Windows, то подобная задача будет вовсе невыполнима, потому что подобные компьютеры нужно перезагружать каждый раз при смене DNS сервера в сети . Решение - DNS proxy. Этот небольшой DNS сервер выглядит как ваш DNS server для локальной сети, с той лишь разницей, что запросы перенаправляются к DNS серверу вашего ISP. Можно использовать Bind-DNS сервер для этой цели, но он разрабатывался не для этого.
Мы выбираем dnrd. Подробности в разделе ссылок данной заметки.
network with IP
masquerading
Запускаем dnrd на компьютере с Linux и устанавливаем его IP адрес (192.168.0.1) в качестве DNS сервера остальных компьютеров вашей сети.

Инсталляция dnrd из исходников выглядит следующим образом :

unapck it:
tar zxvf dnrd-2.8.tar.gz
cd dnrd-2.8/src/
compile it:
make
strip dnrd
install it:
cp dnrd /usr/local/sbin/
create the empty directory /etc/dnrd/ :
mkdir /etc/dnrd/
Использование DNS proxy dnrd (195.50.149.33 и 195.50.140.6 - DNS серверы вашего ISP) :
when the ppp-link becomes active:
dnrd -s 195.50.149.33 -s 195.50.140.6
when you terminate the connection you run:
dnrd
В нашем случае dnrd запускается из /etc/ppp/ip-up и /etc/ppp/ip-down, которые вы уже скачали и готовы для использования и подразумевают наличие dnrd в каталоге /usr/local/sbin/.

dnrd можно использовать и для других целей. Например в качестве DNS сервера для себя самого. Если вы работаете в Unix - добавьте следующую строку в /etc/host.conf
order hosts, bind
Потом назначьте компьютерам в локальной сети символические имена в /etc/hosts . К сожалению такой возможности нет в ОС Windows. Если dnrd находит /etc/hosts на вашем компьютере - он автоматически начинает выполнять функции DNS сервера для найденных имен. Это решение прооблемы!

Синтаксис /etc/hosts :
# syntax:
# ip-addr hostname alias1 alias2 ...
# example:
192.168.0.1 linuxpc.mynet linuxpc
192.168.0.2 peppermint.mynet pepper mint
dnrd позволяет обращаться к компьютеру как к http://linuxpc.mynet/ или http://linuxpc/ вместо http://192.168.0.1/

Для использования dnrd не только в качестве DNS proxy, но и DNS сервера необходимо запускать его во время загрузки компьютера. Для этого добавляем строку

daemon /usr/local/sbin/dnrd
в конец секции start файла /etc/rc.d/init.d/network (синтаксис для redhat, mandrake... но для вашего может быть другим).

Вот и все. Теперь любой пользователь вашей локальной сети может использовать Internet вместе с другими, устанавливать и завершать соединение или менять ISP. Просто добавьте ссылку на наш cgi-скрипт pppcontrol.

 

Корректировка

Если вы решили использовать dnrd в качестве DNS proxy, необходимо отредактировать /etc/ppp/ip-up и /etc/ppp/ip-down чтобы они больше не модифицировали файл /etc/resolv.conf. Просто раскомментируйте все строки, содержащие
echo .....> /etc/resolv.conf
или
cat > /etc/resolv.conf << ENDOFCAT
...
ENDOFCAT

После этого используйте локальный адрес в качестве адреса DNS сервера
# This is /etc/resolv.conf when dnrd is running
nameserver 127.0.0.1

Протестируем работу DNS proxy с помощью nslookup:
>nslookup
Default Server:  localhost
Address:  127.0.0.1

>pepper
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    peppermint.mynet
Address:  192.168.0.2
Завершим работу nslookup (crtl-d).    

Trouble shooting

В этой части я объясню, как настроить вывод информации от pppd. Это полезно в случае возникновения ошибок в работе. К сожалению я обнаружил, что не всегда причиной их являются мои недочеты.

Первое, с чего начинается работа pppd - открытие последовательного порта (/dev/modem является ссылкой к /dev/ttyS0) для запуска скрипта /etc/ppp/scripts/ppp-on-dialer-pap. Этот скрипт, в свою очередь, посылат команды AT модему, с помощью которых происходит соединение с ISP. Если возникли ошибки - ищите их в /etc/ppp/connect-errors. В большинстве случаев оказывается сразу ясна причина возникшей ошибки. Если причина непонятна - попробуйте вручную набрать команды AT. Для этого нужна программа для работы с последовательным портом - minicom (входит в состав многих дистрибутивов Linux) или cu (входит в состав uucp) или kermit (http://www.columbia.edu/kermit/ck70.html). Используйте любую из этих программ для работы с модемом. При вводе AT модем отвечает "OK". Если нет - проверьте установленную скорость, кабели и т.д. Если модем ответил "OK" - наберите команду ATDT1234. Теперь модем должен позвонить по номеру 1234. Если нет - обратитесь к руководству от модема. Может быть надо набрать ATD1234 (без T)...

После дозвона до ISP начинается процесс обмена информацией между модемами. Для наблюдения его отредактируйте файл /etc/syslog.conf добавив ";daemon.debug " к строке, оканчивающейся на /var/log/messages :

*.info;mail.none;authpriv.none;daemon.debug   /var/log/messages
Перезапустите syslog :
/etc/rc.d/init.d/syslog restart
Теперь можно использовать опцию "debug" из /etc/ppp/options (эта опция уже используется в файлах, которые было предложено загрузить в главе Setting up pppd). Далее выполняем команду :
tail -f /var/log/messages
и наблюдаем процесс соединения с ISP.

Удачное соединение будет выглядеть следующим образом :
Jan 14 17:18:11 bearix pppd[721]: pppd 2.3.10 started by root, uid 0
Jan 14 17:18:34 bearix pppd[721]: Serial connection established.
Jan 14 17:18:34 bearix pppd[721]: Using interface ppp0
Jan 14 17:18:34 bearix pppd[721]: Connect: ppp0 <--> /dev/modem
Jan 14 17:18:35 bearix pppd[721]: sent [LCP ConfReq id=0x1 ]
Jan 14 17:18:37 bearix pppd[721]: rcvd [LCP ConfReq id=0x46 ]
Jan 14 17:18:37 bearix pppd[721]: sent [LCP ConfNak id=0x46 ]
Jan 14 17:18:38 bearix pppd[721]: rcvd [LCP ConfReq id=0x47 ]
Jan 14 17:18:38 bearix pppd[721]: sent [LCP ConfAck id=0x47 ]
Jan 14 17:18:38 bearix pppd[721]: sent [LCP ConfReq id=0x1 ]
Jan 14 17:18:38 bearix pppd[721]: rcvd [LCP ConfAck id=0x1 ]
Jan 14 17:18:38 bearix pppd[721]: sent [PAP AuthReq id=0x1 user="arcor" password="internet"]
Jan 14 17:18:40 bearix pppd[721]: rcvd [LCP ConfReq id=0x49 ]
Jan 14 17:18:40 bearix pppd[721]: sent [LCP ConfReq id=0x2 ]
Jan 14 17:18:40 bearix pppd[721]: sent [LCP ConfAck id=0x49 ]
Jan 14 17:18:41 bearix pppd[721]: rcvd [LCP ConfAck id=0x2 ]
Jan 14 17:18:41 bearix pppd[721]: rcvd [CHAP Challenge id=0x5 <0c7672840494152025f937ac4f5e135e>, name = "klndiinternet"]
Jan 14 17:18:41 bearix pppd[721]: sent [CHAP Response id=0x5 , name = "arcor"]
Jan 14 17:18:41 bearix pppd[721]: rcvd [CHAP Success id=0x5 ""]
Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfReq id=0x1 ]
Jan 14 17:18:41 bearix pppd[721]: sent [CCP ConfReq id=0x1 ]
Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfReq id=0x8e ]
Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfAck id=0x8e ]
Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfRej id=0x1 ]
Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfReq id=0x2 ]
Jan 14 17:18:41 bearix pppd[721]: rcvd [LCP ProtRej id=0xfb 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfNak id=0x2 ]
Jan 14 17:18:41 bearix pppd[721]: sent [IPCP ConfReq id=0x3 ]
Jan 14 17:18:41 bearix pppd[721]: rcvd [IPCP ConfAck id=0x3 ]
Jan 14 17:18:41 bearix pppd[721]: local IP address 145.253.88.6
Jan 14 17:18:41 bearix pppd[721]: remote IP address 145.253.1.150
Jan 14 17:18:41 bearix pppd[721]: primary DNS address 145.253.2.11
Jan 14 17:18:41 bearix pppd[721]: secondary DNS address 145.253.2.75
Jan 14 17:18:41 bearix pppd[721]: Script /etc/ppp/ip-up started (pid 723)
Jan 14 17:18:42 bearix pppd[721]: Script /etc/ppp/ip-up finished (pid 723), status = 0x0
Для понимания этого потока информации необходимо разбираться в протоколе ppp. Я не силен в нем, но пару моментов могу подсказать - "sent ... ConfReq" посылается запрос для настройки и ожидается ответ, "rcvd ... ConfAck" - подтверждение, "rcvd ... ConfRej" - отказ. Если все прошло успешно - вы можете посмотреть назначенный вам IP адрес и IP адрес провайдера.

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

   

Ссылки

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей.
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Guido Socher, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus
Translation information:
en -> -- Guido Socher
en -> ru Kirill Poukhliakov

2001-02-24, generated by lfparser version 2.8