О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

26.07.2008

FreeBSD: настраиваем Dial-Up

Настройка модемного подключения к провайдеру (в обиходе именуемая настройкой соединения dial-up или ppp - Point-to-Point Protocol, то есть протокол соединения от точки к точке) - одна из первых задач, которая встает перед большинством домашних пользователей любой ОС. И FreeBSD тут - не исключение. С той только разницей, что в ней эта процедура, как и многие другие, выполняется не просто, а очень просто. Если, конечно, озаботиться этим еще на стадии инсталляции системы. А выбором модема, замечу в скобках, - заранее.

Все сказанное ниже относится к случаю внешнего модема на последовательном порту. Думаю, хотя не было случая проверить, что мои наблюдения имеют силу и для нормального "хардверного" внутреннего модема. Которых, к сожалению, становится все меньше и меньше. Если раньше любой наудачу выбранный внутренний модем для шины ISA, за редким исключением, именно таковым и являлся, то подавляющее большинство PCI-модемов относятся к категории программных и требуют для работы собственных драйверов (каковые, как легко догадаться, гарантированно имеются только под Windows, да и то часто не всякой). Тем не менее попадаются внутренние PCI-Robotics'ы, которые можно с полным правом отнести к категории "честных".

Относительно работы во FreeBSD программных win-модемов ничего сказать не могу. По аналогии с Linux'ом можно предполагать, что путем некоторых ухищрений их можно прикрутить и к этой операционке. Однако никаких гарантий дать не могу.

Так же не располагаю сведениями о деятельности во FreeBSD внешних USB-модемов. Хотя информация такая становится все более актуальной - боюсь, что не за горами время, когда COM-порты исчезнут с материнских плат как класс (первые ласточки из Abit'овых мам уже просвистели).

Пока же беспроигрышным вариантом выбора будет внешний COM-портовый модем, благо цены на них нынче лежат в рамках приличий. Свои упражнения по dial-up'у я производил с агрегатом производства U.S.Robotics, именуемом несколько невнятно - 56K Faxmodem, наследующем традиции внешних Sportster'ов. И, должен заметить, ничего плохого, кроме хорошего, сказать про него не могу.

Итак, предположим, что, выбрав правильный модем, в ходе установки мы благополучно преодолели этапы разбиения диска, установку базовых компонентов, необходимых пакетов, русификацию, настройку мыши и прочее, идущее в верхней части списка меню Configure. Настало время подумать о связи с внешним миром, за которую отвечает пункт Configure -> Networking.

Первое, что мы видим, войдя в Networking, - это подпункт Interfaces. Несмотря на несколько странное название, это - именно то, что нам сейчас нужно. Потому что, не смотря на расшифровку его - additional, именно в нем сконцентрированы коммуникационные интерфейсы по последовательному порту - SLIP и PPP. Первый, скорее всего, не покажется актуальным, так что остановимся только на втором (PPP - Point-to-Point Protocol).

Перво-наперво, нужно определиться с именем файла модемного устройства - /dev/cuaa0 или /dev/cuaa1 (соответствующим BIOS'овским COM1 и COM2). В случае внешнего модема это при необходимости можно сделать органолептически, посмотрев на заднюю стенку корпуса.

Небольшое наблюдение: в последнее время мне все чаще попадаются мамы, у которых напаян только один (разумеется, первый) COM-порт (второй может быть или не быть на планке, иногда разъем для него даже не распаян). Возникает соблазн отключить в BIOS'е второй COM-порт. Так вот, оказывается, делать этого не нужно - после этого модем на первом порту может отказаться функционировать.

Допустим для определенности, что наш модем сидит на первом COM'е, то есть имя файла его устройства - /dev/cuaa0. Ставим курсор на соответствующий пункт и жмем OK. На что следует вопрос - Do you want to try IPv6 configuration of the interface? То есть - хотим ли мы конфигурировать интерфейс IPv6. Скорее всего - не хотим (не знаю, используется ли IPv6 кем-нибудь в настоящее время).

Следующий же вопрос, о DHCP-сервере, с вероятностью более 90% требует положительного ответа - именно через DHCP провайдеры раздают своим клиентам динамические IP-адреса.

После этого перед нами выскакивает большая панель Network Configuration, в которой предлагается заполнить следующие поля: имя хоста (то есть нашей машины), домен, шлюз (IPv4 Gateway), адрес DNS-сервера (Name server), и так далее. Особо озабочиваться этим не нужно: в случае провайдера с DHCP к заполнению предназначены только имя хоста (произвольный набор буковок, например, собственное имя) и IP-адрес DNS-сервера (обратим только внимание, что заполнение любого поля нужно обязательно завершать нажатием Enter'а, а не, скажем, табулятора).

Теперь следует серия вопросов о собственно параметрах соединения. Сначала - скорость оного (оставляем по умолчанию, 115200). Затем предлагается ввести собственный IP-адрес или, при динамическом его присвоении, ноль (внимание - по умолчанию в этом поле стоит NO). Далее - вопрос о том, допускает ли провайдер PAP- или CHAP-авторизацию. Скорее всего - хоть какую-то из них допускает, так что отвечаем положительно. И теперь - мелочи: логин пользователя (у провайдера, не пользователя данной машины), его пароль и, наконец, телефон для дозвона, а также спрашивается, поддерживается ли тональный набор (на что в наших условиях ответ, скорее всего, должен быть отрицательным).

После этого перед глазам появляется панелька, сообщающая о том, что на 3-й виртуальной консоли (в которую можно перейти комбинацией Alt+F3) автоматически запущена программа для установки PPP-соединения, которая так и называется - ppp. В данном случае она работает в интерактивном режиме (при ручном запуске ее в дальнейшем возможны и иные режимы, например, по запросу). Так что вводим в командной строке программы, имеющей вид

ppp ON host_name>

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

Специально для пользователей MTU: той же экономии для возникает искушение ввести в качестве учетных данных логин и пароль для гостевого входа. Можно, только у меня на это всегда следовало сообщение об ошибке авторизации (хотя коннект устанавливается). Ничего страшного в этом нет - указание своих данных проходит нормально. В чем дело - не знаю.

Выше была описана процедура специальной настройки dial-up'а. Но она может быть выполнена и походя - для этого достаточно в качестве источника инсталляции в пункте Media указать не CD/DVD, а FTP- или HTTP-сервер. На столь наглое бесчинство последует предложение сконфигурировать сетевое соединение, что проделывается точно таким же образом, как и в пункте Networking. Только не говорите, что я советовал вам устанавливать FreeBSD со всеми ее пакетами по модему. Хотя для установки системы в минимальной комплектации (пункты Base и Crypto из Distributions этот способ может быть приемлем.

Завершив установку и перезагрузившись, можно с некоторым удивлением обнаружить, что сконнектиться с помощью программы ppp (данная в командной строке без опций, она запустится в том же интерактивном режиме, что и в ходе инсталляции) и команды dial сразу не удастся. Потребуются некоторые дополнительные действия, которые становятся очевидными при рассмотрении конфигурационного ее файла - /etc/ppp/ppp.conf (обратим внимание, что файл этот недоступен обычному пользователю даже для чтения).

А в файле этом после настройки ppp-соединения при инсталляции, можно обнаружить две секции. Первая носит имя default, и в ней построчно перечисляются: условия журналирования действий, имя файла модемного устройства (по умолчанию - /dev/cuaa1), скорость соединения, команды инициализации модема и метод дозвона (по умолчанию - ATDT, то есть тональный набор номера), всякие тайм-ауты и, наконец, после ключевого слова papchap, собственно данные учетной записи у провайдера (логин и пароль) и телефон дозвона. Причем три последние строки не содержат никаких реальных значений.

Их этого следует, что сведения умолчальной секции /etc/ppp/ppp.conf носят мифический характер и никакого отношения к выполненным настройкам не имеют. И действительно, они берутся из "образцового" файла, который находится в /usr/src/etc/ppp. Так что нас интересует вторая секция, которая носит имя install.

В ней содержатся те же данные, что и в секции default, но в соответствующих строках указывается выбранный при настройке COM-порт (устройство /dev/cuaa0 при COM1), команды инициализации и указание на пульсовый набор (ATDP), а также правильные логин, пароль и телефон провайдера.

Так что можно поступить двояко: вызывать из запущенной ppp команду dial с явным указанием секции, например dial install, или просто ликвидировать секцию default, присвоив это имя прежней секции install. Последнее мне кажется проще. К тому же, если у нашего провайдера есть несколько телефонов, то для каждого из них можно создать соответствующую секцию с именем-идентификатором, в которой достаточно будет одной строки

set phone номер_телефона

Ведь все прочее будет идентично новой умолчальной секции. Очевидно, что при наличии аккаунтов у нескольких провайдеров для каждого также можно создать свою секцию, и вызывать команду dial с указанием ее имени.

По умолчанию программу ppp может запустить только суперпользователь: во-первых, потому, что она находится в каталоге /usr/sbin, не определенном в переменной PATH обычного юзера, во-вторых, вследствие атрибутов доступа, имеющих вид

$ ls -l /usr/sbin/ppp                                            20:31 ttyv2
-r-sr-xr-- 1 root network 353048 18 авг 17:47 /usr/sbin/ppp*

То есть право ее исполнения имеют только root и члены группы network, причем процесс, исполняющий ppp, в ходе ее работы получает административные привилегии (что символизируется буковкой s, означающей т.н. бит суидности).

Так что дать себе, любимому пользователю имя_рек, возможность дозваниваться без получения root-привилегий можно, просто включив себя в группу network, например, универсальной командой pw:

$ pw usermod имя_рек -G network

Внимание: если ранее вы уже записали себя членом (Что, Петька, карандаша не нашлось?) каких-либо иных дополнительных групп (например, группы wheel - без членства в ней юзер не может получить права root'а командой su), то все они должны быть явным образом перечислены в виде значений опции -G, например:

$ pw usermod имя_рек -G network,wheel

Столь просто настраивается dial-up только при первичной инсталляции системы. Все мои попытки настроить модемное соединение через sysinstall в дальнейшем успехом не увенчались. В пункте Networking меню Configure запрашивались IPv6 и DHCP, после чего спрашивалось о желании настроить PPP-соединение - и на этом все кончалось (почему - не знаю, может, кто просветит?). Так что тут уж придется обратиться к ручному редактированию файла /etc/ppp/ppp.conf - эталонный образец его к реальному использованию, понятно, не пригоден (если такого файла по каким-либо причинам на законном месте вдруг не окажется, его можно просто скопировать из /usr/src/etc/ppp).

Процесс редактирования достаточно прозрачен: в строке

 set device /dev/cuaa1

подставляем имя нашего COM-порта, в строке

 set dial "ABORT BUSY ABORT NOsCARRIER TIMEOUT 5
"" AT OK-AT-OK ATE1Q0 OK dATDTT TIMEOUT 40 CONNECT"

заменяем ATDT (тональный набор) на ATDP (пульсовый) и при необходимости корректируем тайм-ауты. А далее в строках

 set phone
set authname
set authkey

проставляем реальные номер телефона, логин и пароль, соответственно. К слову сказать, строку

 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0

вполне можно удалить или закомментировать - при обычном модемном подключении она не нужна (требуется, насколько мне известна, при ADSL-модемах и прочей пока не очень актуальной для нас экзотике?).

Единственная сложность может возникнуть при изменении команд инициализации (AT-команд), если указанные в строке

 set dial

почему-либо не подошли. Вообще-то они берутся из документации к модему. Но в последнее время взяли моду в печатной документации их не указывать (в лучшем случае - на прилагаемом компакте, да и то в неочевидных местах). Если AT-команд своего модема вы на память не помните (я, например, не помню), можно попробовать подобрать что-нибудь подходящее из файла /usr/share/examples/ppp/ppp.conf.sample - там есть несколько примеров. Если же на диске завалялся какой-никакой Linux, требуемые команды можно взять из конфиг-файла программы wvdial - она определяет их безошибочно. Для моего Robotics'а строка с параметрами дозвона приобрела в итоге вид

 set dial "ABORT BUSY ABORT NOsCARRIER TIMEOUT 5
"" AT OK-AT-OK ATE1Q0 OK dATDPT TIMEOUT 40 CONNECT"

Да, еще вот что: если отказаться от настройки ppp через sysinstall, необходимо проследить, чтобы в файле /etc/rc.conf фигурировало бы какое-нибудь имя хоста в виде строки

hostname="имя_хоста"

А файл /etc/resolv.conf должен содержать строку (или строки) с IP-адресом DNS-сервера провайдера - для пользователей MTU она дудет иметь вид

nameserver 195.34.32.11 # Первичный
nameserver 195.34.32.10 # Вторичный

Вот и все - прозваниваемся и радуемся роскоши человеческого общения. Конечно, общение с программой ppp можно всячески усовершенствовать (например, настроить ее для автоматического соединения при приеме почты или обращении к коллекции портов), но это - тема отдельного разговора. А пока замечу только, что целям модемного коннекта служит еще и программа pppd, считающаяся более продвинутой. Впрочем, о ней существует подробное описание Игоря Сысоева (http://www.sysoev.ru). Да и, по моему скромному мнению, для использования в домашних условиях ppp обычно более чем достаточно.