О блоге

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

29.07.2008

Linux: приключения с VPN микрорайонного масштаба

Citkit, 18 апреля 2006 г


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

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

Конечно, в качестве почти универсального (для Москвы) варианта оставался Стримм - но от них я очень долго не мог получить ответа на запрос о пригодности моей телефонной линии (надо сказать, что у соседей по подъезду Стримм работал вполне успешно).

И вот тут я и наткнулся на предложение микрорайонного масштаба, показавшееся мне весьма привлекательным: бесплатное подключение, безлимитный тариф - 600 рублев для скоростей 200/128 Кбит/с (входящей и исходящей, соответственно). То есть примерно то же самое, что было у меня раньше (и за те же примерно деньги, соответствующие среднестатистическим московским реалиям сегодняшнего дня). Поэтому я опрометчиво не задал никаких технических вопросов. Впрочем, если бы и задал - это мало чего изменило бы, ведь ответа от Стримма все еще не было, а других альтернатив на горизонте микрорайона не просматривалось.

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

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

Дальше было еще несколько мелких заморочек, на которых останавливаться не буду. В итоге все кончилось тем, что сеть физически была подключена, и лампочка на моей сетевухе замигала. А после этого началось самое интересное.

Дело в том, что ни на одной моей машине уже в течении многих лет нет никакого намека на Windows. А есть лишь Linux или (иногда - и) какая-либо из BSD-систем. В частности, в тот момент (и по сию пору) стоял на ней Linux Kubuntu Dapper (5-я пре-релизная версия). А вот как подключать его к сети - провайдеры не имели ни малейшего представления. И даже задали вопрос - а почему бы мне не поставить Windows для подключения к Инету? На что я резонно ответил, что, подобно той даме, что в раннеперестроечные времена написала известную статью в журнале "Огонек", принципами не поступаюсь. И скорее готов отказаться от услуг провайдера, не способного обеспечить в своей сети работу машины под свободной операционкой.

Дело осложнялось тем, что никакого DHCP-сервера у провайдера не имелось - внутрисетевые IP выдавались статически. А имелась зато авторизация по VPN, снискавшая уже нежную "любовь" среди линуксоидов. И в адрес которой я на Linux-форумах слышал много слов (все больше нежных и ласковых, исконно русских, от бороны, что называется).

Ну, пока до отказа дело не дошло - отпустив ребят, я решил, что настроить сеть самому будет для меня делом чести, подвига и геройства. Должен признаться, что мой сетевой опыт до сего времени не намного поднимался над нулевым уровнем - вот заодно и решил сузить пробелы в своем образовании.

Итак, уходя, провайдеры оставили мне, кроме мигающей лампочки, также конверт со следующим содержимым:

  • внутрисетевой IP-адрес;
  • маску подсети;
  • IP-адреса шлюза, 1-го и 2-го DNS;
  • имя (не адрес) VPN-сервера - внутреннее, в форме труляля.ok;
  • пароль и логин для авторизации на нем;
  • прочие мелочи, вроде URL интранет-сервера (с характерным именем www.ok), страницы личной статистики, и так далее.

Очевидно, что для начала следовало настроить доступ к внутренней сети провайдера. Сделать это в моих условиях трояко: руками из командной строки, текстовым редактором через конфигурационные файлы и автоматически - средствами администрирования Kubuntu (точнее, средствами, которые Kubuntu заимствовала от своего умолчального десктопа - KDE).

Чисто ручной способ сводится к вводу команды ifconfig с указанием имени сетевого интерфейса (в данном случае - eth0), собственного IP-адреса и маски подсети. На нем я задерживаться не буду - детали можно посмотреть в man ifconfig.

Для ручной настройки достаточно было вписать в файл /etc/network/interfaces (напоминаю - речь идет о Kubuntu, то есть с точки зрения конфигурирования, практически о Debian - в более иных дистрибутивах потребовалось бы править другие конфиги) строки следующего вида:

# Указание на статически внутрисетевой IP
iface eth0 inet static
# Собственно внутрисетевой IP
address
# Полученная от провайдера маска подсети
# В большинстве случаев она именно такова
netmask 255.255.255.0
# IP-адрес шлюза
gateway
# IP-адреса 1-го и 2-го сервера имен, через пробел
dns-nameservers

# Предписание запускать сетевую службу при старте машины
auto eth0

Наконец, автоматизированный метод - это вызов через K-меню KDE пункта System Setting, и выбор в секции Сеть и Интернет иконки Настройка сети. Этот метод применим для всех пользователей KDE - разве что в других дистрибутивах понадобится вызывать KCC (KDE Control Center), а уж в нем отыскивать, где настраивается сеть.

Но в принципе ничего сложного тут нет. Посредством соответствующей кнопки нужно перейти в режим администратора, введя пароль (обычного пользователя - в Kubuntu, root'а - в большинстве прочих дистрибутивов. Далее из списка на первой вкладке (Network Interfaces) выбирается нужный интерфейс (скорее всего, eth0 - рис. 1), щелчок на нем правой клавишей вызывает контекстное меню, в котором следует указать пункт Configure interface. А затем в появившейся панели остается только вбить полученные от провайдера свой IP'шник, сетевую маску и Gateway (он же шлюз - рис. 2). После чего, перейдя на вкладку Domain Name Systen, последовательно добавить адреса первичного и вторичного DNS-серверов.

Рис. 1. Выбор сетевого интерфейса...

Рис. 2. ...и его конфигурирование

Проверка правильности настройки сети осуществляется в три этапа. Сначала командой

$ ifconfig eth0

смотрим, соответствуют ли сетевые параметры вывода тому, что было нами указано (впрочем, при ручном вводе они и не могут быть иными). Затем командой

$ ping www.ok

пропинговываем интранет-сервер провайдера. И, наконец, заходим на этот самый интранет-сайт через браузер, указав в его адресной строке URL - www.ok.

Я проделал все эти действия успешно, в результате чего получил доступ к внутреннему FTP-серверу (не буду говорить о его содержании). Но ни малейшего Интернета, разумеется, не было. Так что настала пора переходить к снастройке VPN-подключения.

Это дело требует в первую очередь поддержки протокола PPTP (Point-to-Point Tunneling Protocol). Клиентская его часть (а большего в данном случае и не требуется) обеспечивается пакетом, который в deb-клонах носит название pptp-linux. Авторское его имя, кажется, - linux-pptp, во FreeBSD он зовется pptp-client, в других системах и дистрибутивах возможны и иные имена - в каждом конкретном случае это следует уточнить штатными средствами системы пакетного менеджмента.

Впрочем, пакет этот вовсе и не обязан присутствовать в произвольном дистрибутиве. Так, в репозитории Archlinux я его не обнаружил. Так что пользователям этого дистрибутива придется начинать настройку VPN с ручной сборки linux-pptp (или написания build-файла для его построения).

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

Depends: libc6 (>= 2.3.4-1), ppp (>= 2.4.2)

каковые и так имели место быть установленными. Так что, выполнив

$ dpkg -i /media/cdrom/pool/main/p/pptp-linux

я легко получил поддержку искомого протокола. А дальше, как обычно бывает в Linux'е, "средь мира дольного, для сердца вольного", лежали "два пути". Правда, в данном случае их оказалось целых три:

  • загрузить pptp руками из командной строки;
  • использовать скрипт для установки VPN-соединения;
  • прибегнуть к какому-либо front-rnd-конфигуратору.

От "ручного запуска" я отказался - да это и не решение задачи, каждый раз запускать pptp руками. Обратившись по началу к напрашивающемуся варианту - скриптовому запуску. И надо заметить, что скриптов для этого дела в сети можно раскопать немало. Например, решение, претендующее на универсальность, описано на POSIX.ru. Вариант для Gentoo имеет место быть на Линуксфоруме. А при необходимости находится и очень внятное пошаговое описание процедуры не где-нибудь, а в Debian (на сей предмет есть и еще одно руководство - правда, на английском). Да и на форумах нашей тематики тема эта была жевана-пережевана. В общем, казалось бы, недостатка в информации не предвиделось.

Ан не тут-то было. Ни один из найденных мной скриптов "в лоб", после соответствующей коррекции реалий, не заработал. Причем ситуация была самая скверная: нельзя сказать, что они не работали вообще (сообщений об ошибках не поступало), но и назвать это работой язык не поворачивался. А именно: VPN-соединение после отработки, например, специально Debian'овского скрипта устанавливалось. Это можно было видеть и через ps (соответствующие процессы в списке присутствовали), и через ifconfig -a, который показывал появление интерфейса ppp0. Но держалось оно считанные мгновения, не позволявшие даже запустить команду ping. Однако из этого следовал и позитивный вывод - видимо, что-то не так в консерватории, то есть в параметрах, данных провайдером. Как станет ясным из дальнейших событий, так оно и оказалось.

Оставалась последняя надежда - автоматический конфигуратор. Таковой поначалу обнаружился в единственном числе, выступая под именем pptpconfig. В репозитории Ubuntu его не оказалось, но на авторской странице можно, кроме исходников и rpm'ок, найти также и deb-пакеты, причем вместе с основными зависимостями - php-pcntl и php-gtk-pcntl. Правда, последние тянут за собой рекурсивно зависимости собственные. Тем не менее, с помощью модема, dpkg и чьей-то матери задача установки pptpconfig решаема. По крайней мере, мне это сделать удалось.

Обращение с pptpconfig достаточно подробно описано на сайте http://pptpclient.sourceforge.net, а также, как ни странно, на интранет-сайте моего провайдера (на примере Mandrake и Suse).

И так, pptpconfig запускается с правами администратора, то есть в Ubuntu/Kubuntu так:

$ sudo pptpconfig

После чего перед глазами появляется следующее окно (рис. 3).

Рис. 3. Создание туннеля

В соответствующие поля формы вбиваем имя туннеля (то есть соединения - в моем случае оно могло быть произвольным набором символов), IP'адрес VPN-сервера (говорят, что можно и его внутрисетевое имя, но у меня это не сработало), полученные от провайдера логин и пароль (поле Domain остается пустым).

Откуда взялся адрес VPN-сервера? Ведь, как вы помните, провайдер оставил мне в конвертике только его внутрисетевое имя. Определит адрес по URL можно различными путями, я воспользовался командой

$ host труляля.ok

каковая и выдала мне искомый IP'шник.

Заполнив таким образом форму Server, я, в соответствие с инструкциями, перешел на закладку Encryption, где, вместо отмеченного по умолчанию пункта MPPE, включил пункт, говорящий про EAP (рис. 4).

Рис. 4. Настройка Encryption

Теперь остается только кнопкой Add добавить новосозданный туннель в список и, отметив его курсором, нажать кнопку Start для проверки. Нажатие ее приводит к открытию нового окна (рис. 5), в котором проверку можно выполнить посредством кнопки Ping.

Рис. 5. Окно статуса соединения VPN

К моей радости, пинги с новым внутренним сервером прошли успешно. Более того, команда

$ ifconfig -a

показала наличие интерфейса ppp0 (никуда теперь не исчезающего) с новыми параметрами - моим IP-адресом (прежний, для eth0, начинался со 192, этот же - со 172), адресом P-t-P (он, собственно, и пинговался при тесте) и новой маской подсети.

Теперь, в соответствие с инструкцией, оставалось последнее действие: сделать только что созданный канал доступным для программ. Для этого останавливаю соединение (кнопкой Stop в любом из двух окон) и в окне настройки перехожу на вкладку Routing, включаю в ней пункт All to Tunnel вместо умолчального Client to Lan (рис. 6) и кнопкой Start активизирую туннель заново. Теоретически после этого можно, например, выйти в Интернет любым браузером.

Рис. 6. Делаем канал доступным

В этот момент радость моя и закончилась. Попытки открыть какой-либо сайт успехом не увенчались. Пинги не проходили ни на один внешний URL. Более того, и внутрисетевые URL'ы пинговаться перестали.

Так и пребывал бы я в растерянности, если бы не советы знакомых админов - пропинговать внешние сервера не по URL, а по IP-адресам. И - о чудо - пинги пошли. Стало ясно, что дело в настройках DNS. просмотр файла /etc/resolv.conf показал, что вместо прежних их адресов появились новые - совершенно мифического облика. Ничтоже сумняшеся, я вписываю туда IP своего служебного DNS-сервера. После чего наконец обретаю выход в Интернет.

Теперь у меня вроде все нормально - но получать имена со стороны не есть правильно с точки зрения быстродействия. Надо найти способ сделать это внутренними силами сети провайдера. Благо, в окне настройки pptpconfig для этого имеется соответствующая закладка - DNS, в которой по умолчанию сервера имен определяются автоматически (рис. 7). И, как показала практика, неправильно. Однако никто не мешает отключить автоматику и вписать в соответствующую строку адрес DNS-сервера провайдера (с моим служебным сервером имен это прошло нормально). Если бы не одно но: для этого адрес этот хорошо бы знать.

Рис. 7. Указание DNS-сервера

Теоретически узнать IP сервера имен можно было бы, вероятно, спросить у провайдера непосредственно. Однако дело происходит в выходные дни, и попытки дозвониться до их службы техподдержки успехом не увенчались. А ждать до понедельника - терпения не хватало. И тогда я, временно оставив DNS с моей службы, прибег к команде nslookup. Данная с аргументом - доменным именем, она выводит как адрес используемого сервера имен, так и реальный IP, к которому это имя привязано:

$ nslookup name.ru
Server: IP
Address: IP#port

Name: name.ru
Address: IP

Теперь оставалось только перебрать доменные имена моего провайдера (благо, их было немного) и методом ползучего эмпиризма определить IP того из них, которое сошло бы за DNS-сервер, после чего вписать его в строку соответствующей закладки окна VPN-конфигуратора (см. рис. 7). С этого момента я наконец смог наслаждаться полноценным Интернетом...

Правда, пока для этого требуется не только вызвать pptpconfig из командной строки терминала через sudo, но и запустить собственно соединение кнопкой Start. Что не то чтобы обременительно - но создает чувство некоторого дискомфорта, заствляя вспомнить старое, но недоброе модемное время.

Вторая проблема устраняется легко. В окне конфигуратора нужно перейти к закладке Miscellaneous, в которой включить пункт Start tunnel when this programm starts и, на всякий пожарный случай, Reconnect is disconnected (рис. 8, смысл, думаю, понятен без перевода).

Рис. 8. Запуск туннеля одновременно с запуском pptpconfig

Решения первой задачи я пока не нашел. Вследствие особенностей дистрибутивов Kununtu (отсутствия root-аккаунта как такового) со стандартными средствами типа запуска от имени другого пользователя, у меня ничего не вышло. Придется думать дальше. Ну и если кто подскажет - буду весьма признателен.

Какой вывод можно сделать из моей истории? Перефразируя слова Александра Дюма, заключаю: не следует верить ни тому, что говорят провайдеры, ни тому, что говорят их враги. Соединение VPN в Linux наладить вполне можно. Нужно только, если это не получается с первой же попытки, затратить некоторое время на перебор вариантов. Используя прямые IP, не полагаясь на данные, полученные при подключении.

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

Кстати говоря, описанный метод настройки VPN - далеко не единственный. Прошерстив через

$ apt-cache search vpn

репозитории Ubuntu (с чего, собственно, и нужно было бы начать по хорошему, если бы не нетерпеливое вожделение Сети), я обнаружил несколько VPN-клиентов и немало front-end'ов для них, например - kvpnc, предназначенный, как явствует из имени, специально для KDE. И, следовательно, более подходящий для использования в Kubuntu. Возможно, что с какими-то из этих программ результата можно было бы добиться быстрее и проще. Впрочем, этот вопрос я надеюсь исследовать и описать в ближайшее время.

Автор выражает признательность Игорю Борейко, системному администратору Геологического института РАН, и Стену, админу сайта http://posix.ru, за ценные советы и моральную поддержку.

Ками-терминал, или как "бархатно" уползти от "окон"

Citkit, 6 июня 2006 г


Сюжет этой заметки выкристаллизовался спонтанно - занесло меня на днях в фирму Kami, просто так, поговорить на взаимно интересные темы, имеющие отношение к Linux и Open Source. Однако в процессе дружеской беседы я увидел такое, о чем, как профессиональная гиена пера, просто не мог промолчать... Однако начну издалека.

Время от времени на всяческих форумах, имеющих отношение к Linux и Open Source вообще, раздаются пламенные призывы: "Даешь Linux в корпоративе!" и им подобные. Правда, при ближайшем рассмотрении обычно оказывается, что авторы таких призывов подразумевают примерно следующее: "Ребята, бросайте свои дела и сделайте так, чтобы я мог зарабатывать на Linux". Никаких реальных действий за такими призывами, как правило, не стоит.

Тем не менее, корпоративные решения на базе Linux и Open Source на Руси (сиречь в России и Украине) существуют. Просто они а) не очень афишируются их разработчиками, и б) используются в достаточно специфических сферах человеческой деятельности. На первом факторе заострять внимание не буду (sapienti sat, как говаривали древнегреческие римляне). А вот причины второго явления рассмотрения заслуживают.

Действительно, любой современный дистрибутив Linux общего назначения (и даже, скажем, такая ОС, как FreeBSD) содержат в своем составе почти все, что необходимо для организации внутрикорпоративного документооборота и коммуникаций с внешним миром. За двумя важными исключениями: средств векторной графики (и, особенно, CAD-систем) и ведения финансовой документации. Если первый фактор играет роль лишь в отдельных случаях (далеко не все фирмы и организации испытавают необходимость в векторных "рисовалках" и, тем более, системах автоматического проектирования), то без бухгалтерского учета и сопряженных с ним материй, как без воды - "ни туды и ни сюды). А когда мы говорим слова "бухгалтерский учет", под ними молчаливо подразумевается продукция фирмы 1C - так уж исторически сложилось в Государстве Российском. А продукция эта, как известно, функционирует исключительно под одной операционной системой - и вы знаете, под какой. Так что получается, что и "без винды, как без воды"...

Решить проблему с запуском жизненно важного Windows-софта под Linux можно - и даже не одним способом. Во-первых, существуют так называемые виртуальные машины - системы, обеспечивающие запуск, например, Windows (и, разумеется, ее приложений) под Linux или какой-либо BSD (как, впрочем, и наоборот). Наиболлшей известностью из средств такого рода пользуется VMWare - она же является и наиболее развитой. Но увы - это совсем не свободная программа (хотя, при некоторых условиях, и может использоваться бесплатно). А ее открытый аналог - Xen - лишь недавно приобрел достаточную устойчивость.

Тем не менее, использование любой виртуальной машины наталкивается на два ограничения - а) весьма высокие требования к ресурсам компьютера и б) необходимость в приобретении лицензий не только на прикладной софт, но и на саму ОС Windows - в количестве требуемых рабочих мест.

Другой путь использования Windows-софта в среде Linux - запуск его под эмуляторами, типа WINE. Правда, именно для прдукции 1C, защищаемой аппаратными ключами, это сопряжено с определенными трудностями (эмуляторы реагируют на аппаратные ключи весьма неадекватно), но, насколько мне извсестно, трудности эти преодолимы - примером чему разработки фирмы Этерсофт (http://etersoft.ru/). Однако и WINE не избавляет от необходимости лицензий - теперь уже только на приложения, но все равно в количестве рабочих мест.

Наконец, есть и третий путь решения озвученной проблемы - старая добрая клиент-серверная архитектура. И это - тот путь, которым пошли разработчики программного комплекса Ками-Терминал.

Для начала - на чем все это работает. Очевидно, что клиент-серверная архитектура предполагает наличие "железного" сервера и "железных" клиентов. О первом компоненте говорить особо не придется - это самый обычный сервер на базе Intel-совместимого процессора (процессоров), конфигурация которого определяется потребностями и возможностями организации. Замечу только, что он выступает и как сервер приложений, и как хранилища пользовательских данных (конечно, разделение этих ипостасей на отдельные сервера не возбраняется).

А вот предлагаемые фирмой Kami аппаратные решения с клиентской стороны (то есть собственно терминалы) заслуживают отдельного разговора. Это - классические "тонкие клиенты", то есть машины на базе материнских плат формата ITX с процессорами VIA (в ряде случаев не требующих активного охлаждения). Собственных средств хранения информации они не имеют, но снабжены внутренними винчестероподобными носителями, призванными обеспечить загрузку системы и подключение ее к сети. Впрочем, это можно проделать и с обычного флэш-драйва, подключаемого к USB-разъему.

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

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

Потому что главным составляющим терминального комплекса является, конечно же, не "железо", а софт. Что же представляет из себя он?

В двух словах, это - самый обычный Linux. Хотя нет - обычный, да не совсем... Начать с того, что управляющая система распадается на две части - клиентскую и серверную. Клиентская часть сделана на основе Slackware, только вот ядро и модули пересобраны так, чтобы одинаково успешно запускаться на всем потенциальном "зоопарке" терминального "железа". Однако запуск этого мини-Linux'а - удел только клиентстких машин. А, как уже было сказано, клиентское "железо" весьма разнообразно и специфично. Подчеркну еще раз - клиентская сторона софта обеспечивает только начальную загрузку терминальной станции и ее подключение к сети, все остальные заботы - об интерфейсе пользователя, запуске системных сервисов, обеспечивающих доступ к ресурсам, работе собственно пользовательских приложений, - берет на себя сервер.

А вот в качестве серверной ОС может выступать практически любой дистрибутив Linux (ALT, ASP, RedHat EL, SuSE etc - есть крамольная мысль, а не прикрутить ли туда какую-либо из BSD-систем?), куда спокойно "укладывается" серверная часть предлагаемого решения или в виде RPM-пакетов, или из тарболла. В результате могло бы получиться забавно - зоопарк "железа", наложенный на зоопарк софта, в том числе и системного. И потому разработчиками принято унифицирующее решение - использовать на серверной стороне Red Hat Enterprise Linux, как он нынче официально называется (сокращенно RHEL). Цель чего - оградить пользователей от всех "радостей" разнообразия интерфейсов. Ибо теперь интерфейс их рабочего стола предоставляется серверной стороной (о чем - чуть ниже).

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

Как выглядит в реале функционирование терминального комплекса? Подготовка к работе клиентской станции сводится к подключению ее к сетевому кабелю, обеспечению наличия загрузочного носителя (если он - внешний) и нжатию кнопки Power. После этого за дело последовательно берутся BIOS клиентской машины и ее системный загрузчик, завершая свою работу переходом в режим ожидания действий пользователя, длящийся 7 секунд. Под действиями пользователя подразумевается возможность настройки и обновления системного софта терминала. Однако это - отдельная история, о которой в настоящей заметке речи не будет.

Так что просто отказываемся от каких-либо действий и, по истечении 7 секунд, наблюдаем продолжение загрузки системы - то есть ядра Linux, виртуального диска initrd и необходимых модулей, подключение серверу, а в финале - запуск графического интерфейса пользователя.

В качестве терминального интерфейса пользователя выстпает не что иное, как "легкий" оконный менеджер Fluxbox, несколько модифицированный разработчиками Kami. В частности, его изначально аскетичная инструментальная панель снабжена дополнительной кнопкой, носящей имя (да простят меня читающие это дамы) Старт, выводящей системное меню терминала (оно же вызывается и щелчком правой кнопкой мыши на рабочем столе).

Системное меню позволяет запустить с терминала пользовательские сеансы различных типов доступа к Linux- и Windows-системам (сами они исполняются, разумеется на сервере). Так, работа в среде Linux возможна через клиенты OpenSSH, X11 и VNC. Первый обеспечивает авторизацию пользователя на сервере (разумеется, для этого соответствующий аккаунт должен быть там создан администратором) по одноименному защищенному (шифруемому) протоколу и дальнейшую работу в режиме командной строки - практически также, как на виртуальной консоли обоычной персоналки. Однако основная задача SSH-клиента - запуск на рабочем столе пользователя графических приложений (браузер, почтовый клиент и т.п.), "завернутых" в страхующу SSH-обертку. Причем это делается администратором прозрачно для пользователя (с помощью ключей авторизации), и не требует ради отдельного приложения "тащить" на терминал отдельную сессию Linux.

Кстати говоря, виртуальные консоли имеют место быть и на самом терминале. На одной из них запущен тот самый Fluxbox, который обеспечивает доступ ко всему остальному серверному богачеству, остальные же и служат для его отображения.

При запуске клиента X11 происходит авторизация пользователя на сервере в графическом режиме, после чего следует запуск (опять-таки на сервере) самого обычного сеанса работы в оконной систме X - и снова никаких отличий от работы за локальной машиной обнаружить не удастся. Точно также Иксовый сеанс отображается на отдельной виртуальной консоли терминала.

Ну а сеанс VNC - это запуск cистемы удаленного доступа к компьютеру (сиречь обратно же нашему серверу), использующей специальный протокол RFB (Remote FrameBuffer). Каковой обеспечивае передачу клавиатурных и "мышиных" манипуляций с терминала на сервер и вызванных ими обновлений экрана - в обратном направлении по сети. Подобно Иксовому сеансу, он отображается в графическом режиме, однако может быть запущен не только в полноэкранном режиме, но и в окне приложений.

В общем, пользователь Linux (или любой другой Unix-подобной системы), сев за Ками-терминал, не обнаружит для себя ничего неожиданного или непривычного. Кроме одного: параллельно с любым из перечисленных выше Linux-сеансов он может запустить еще и сеанс работы с Windows - и, более того, свободно переключаться между ними посредством своеобычной комбинации клавиш Alt+Control+F#.

Открыть Windows-сессию можно двумя способами - посредством Citrix-клиента и клиента RDP. К сожалению, разницы между ними объяснить не могу, так как, подобно д'Артаньяну, забыл о Windows даже то, чего не знал... Однако с точки зрения пользователя в любом случае это будет выглядеть также, как пользовательский сеанс в Windows XP на локальной машине. В котором можно открывать любые Windows-приложения, включая сакраментальные программы бухгалтерского учета и прочей бюрократии. Причем для этого достаточно иметь всего одну копию и самой ОС, и требуемых под нее софтин - ибо все это хозяйство все равно исполняется на сервере.

Таким образом, терминальный комплекс Ками и дает ту самую возможность "бархатной" миграции с Windows на Linux, о которой столько говорят на форумах адепты конецепции "Linux в корпоративе". Остается добавить только, что команду разработчиков возглавляет Леонид Уточкин - а до неданего времени он был и единственным ее представителем.

И в заключение: обсудить эту статью (и сам терминальный комплекс) можно в соответствующем трейде на форуме http://posix.ru. Ну и его непосредственный разработчик не откажет в дополнительной информации - с ним можно связаться так: leux@yandex.ru.

28.07.2008

Замена MAC-адреса: зачем и как?

19 июля 2005 г

В большинстве домашних и городских сетей используется доступ через DHCP, с привязкой внутреннего IP-адреса к MAC-адресу сетевой карты. Что само по себе не хорошо и не плохо - ибо в большинстве случаев пользователя никак не касается: при смене машины (и сетевой карты) достаточно позвонить провайдеру для перепривязки. Тем не менее, можно представить себе минимум две ситуации, когда смена MAC-адреса пользователем становится необходимостью - без всякого злого умысла.

  1. потребность выходить в сеть попеременно с двух машин, при отсуствии возможности (или желания) налаживать сеть внутреннюю;
  2. наличие двух операционок и двух сетевых карт, каждая из которых поддерживается только одной операционкой.

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

А во второй ситуации я оказался недавно при покупке новой машины: встроенная сетевая от чипсета nForce250 (не Ultra) прекрасно поддерживалась Linux'ом (при должным образом собранном ядре), но категорически не виделась ни во FreeBSD, ни в DragonFly. С извлеченной же из загашников NE2000-совместимой карточкой неизвестного (подозреваю, очень китайского) генезиса ситуация была почти обратная: она нормально опознавалась в DragonFly, но в Linux'е... не то чтобы совсем не работала, но время от времени куда-то девалась, так что и назвать это работой язык тоже не поворачивался.

Конечно, все эти проблемы были решаемы (и в конечном счете решены), но в тот момент мне требовался доступ в Интернет - и немедленно (дело происходило в выходные дни, что усложняло ситауцию). И я вспомнил о возможности подмены MAC-адреса, предоставляемой волшебной палочкой сетевика-POSIX'ивиста - утилитой ifconfig.

Начнем с Linux'а - проверялось на дистрибутивах CRUX и Archlinux, при как бы настроенной сети. Как бы - потому что все, касающееся старта DHCP, было прописано в конфигах должным образом. Но поскольку MAC-адресы карты не совпадал с зафиксированным у провайдера, старт этот при загрузке системы завершался ошибкой. В чем легко было убедиться, запустив ifconfig без параметров.

Оказалось, что во исправление положения всего то требовалась простая команда (опчерпнуто из man ifcongif):

$ ifcongif eth0 hw ether 00:00:00:00:00:00

где eth0 - имя сетевого интерфейса, hw (от hardware) - опция, предписывающая сменить "железный" идентификатор карты, ether - указание на класс сетевых устройств, а нули заменяются реальным MAC-адресом. После чего оставалось только перезапустить dhcp-демона. Как - зависит от дистрибутива. В Archlinux (как и в CRUX) подходящим способом оказался такой:

$ /etc/rc.d/networks restart

А для того, чтобы не проделывать все эту процедуру после каждой перезагрузки, достаточно прописать приведенную выше команду ifconfig с соответствующими параметрами в какой-либо из подходящих стартовых скриптов, отрабатываемых до запуска dhcp-демона. В моем случае подходящим оказался тот же /etc/rc.d/networks, отвечающий в Archlinux (и в CRUX) за поднятие сети вообще.

В BSD-системах - все чуть-чуть иначе: различия связаны и с именами сетевых интерфейсов, и с форматом команды ifconfig, и с особенностями скриптов инициализации. Для начала - там не стандартного имени интерфейса, eth#, а есть множество интерфейсных устройств, имена которых более-менее коррелируют с используемым в сетевой карте чипом. В моем случае (как я уже говорил, для BSD использовалась карта из семейства NE2000), имя ему было - ed0. Далее, опции hw в BSD'шном варианте ifconfig нет - достаточно указать класс устройств и собственно адрес. В результате команда приобретает такую форму:

$ ifconfig ed0 ether 00:00:00:00:00:00

После чего опять же перезапуск dhcp-службы. Что делается так:

$ /etc/rc.d/dhclient restart

Ну и увековечить переопределение MAC-адреса можно в том же файле - дописав в самое его начало приведенную выше строку с командой ifconfig.

26.07.2008

Настройка dial-up в Linux

2004 г

Не смотря на свою тягу к ручной настройке всего и вся, есть область, в которой я всегда полагался на любого рода автоматику. Это - сетевые соединения, в которых я мало чего понимаю. Однако давеча мои упражнения в Linux-самострое вынудили меня заняться настройкой модемного подключения, что называется, с "нуля". То есть - протокола PPP. Поскольку вопросы такого рода время от времени возникают в народе, я решил изложить свой опыт в виде данной заметки.

Сразу скажу, что речь идет о настройке обычного "железного" внешнего модема (U.S.Robotics 56K Faxmodem - именно так написано на коробке) на последовательном порту, который беспроблемно определяется любым не-Windows. О шаманстве в отношении всякого рода win-модемов и USB-модемов я говорить не буду - могу только выразить свое сочувствие их счастливым обладателям.

Отправная точка для дальнейших упражнений - самостройный Base Linux в объеме, примерно соответствующем LFS, но несколько урезанном за счет отказа от Texinfo и соответствующей документации, с системой инициализации в BSD-стиле, заимствованной из дистрибутива CRUX.

Первое, что требуется для использования модема, - поддержка ядром системы. Для этого при конфигурировании оного (посредством make menuconfig; дело происходило во времена версии 2.4.X, но и в 2.6.X в этом отношении ничего не изменилось) отправляемся в пункт Network device support, где сначала включаем общую поддержку сетевых устройств (Network device support), после чего отмечаем пункты Dummy net driver support и PPP (point-to-point protocol) support. Внутри последнего требуется также включить поддержку PPP через асинхронный последовательный порт (PPP support for async serial ports), сиречь наш обычный COM, и, вероятно, одного из протоколов компрессии (PPP Deflate compression или PPP BSD-Compress compression), в зависимости от того, какой поддерживается провайдером (в сомнительных случаях можно включить оба).

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

Далее требуется собрать сам пакет ppp. Ничего специфичного в этом нет - разворачиваем тарбалл, переходим в образовавшийся каталог, читаем соответствующий README (в нашем случае - README.linux) и выполняем три сакраментальных деяния - ./configure (опции --help при этом не предусмотрено, суть конфигурирования сводится просто к установлению ссылок на Make-файлы, соответствующие данной ОС), make и make install. В результате мы получаем несколько исполнимых файлов /usr/sbin/ppp*, относящихся собственно к ppp-демону, и команду /usr/sbin/chat, используемую для дозвона, а также три пустых конфигурационных файла в каталоге /etc/ppp - chap-secrets, options и pap-secrets.

А теперь, как обычно в мире Unix, средь мира дольного для сердца вольного, - было два пути. Первый - просто отредактировать файлы конфигурации демона pppd в текстовом редакторе (и создать недостающие). Благо, например, на сайте моего провайдера имеются примеры таковых для Unix-систем. Однако это, во-первых, показалось мне ленивым, во-вторых, я не очень понял сути процесса, хотя он и подробно (на мой взгляд - излишне подробно) описан в соответствующем HOW-TO. А главное, за короткий период своей онлайновой жизни я успел привыкнуть к звонилке wvdial, выполняющей к тому же функцию опознавателя модема и ppp-конфигуратора. И потому я избрал другой путь - установку wvdial.

Полноты картины для замечу, что есть и другие средства автоматического (или полуавтоматического) конфигурирования ppp-соединения. Одно из них, заимствованное из Debian, - это pppsetup, используемый, например, в LiveCD Lonix. Она задает несколько вопросов, ответы на которые достаточно очевидны, на основе чего и генерит требуемые файлы конфигурации и сценарии дозвона, устанавливая заодно и команды инициализации модема. Однако для ее сборки наверняка потребовались бы какие-нибудь дополнительные компоненты, разбираться с которыми у меня не было ни малейшего желания. И, повторяю, общение с wvdial'ом не вызывало у меня никакого стремления искать добра от добра - очень уж он прост в настройке и использовании.

Но вот сборка wvdial'а неожиданно оказалась не вполне тривиальной задачей. Для начала он требует библиотеки wvstreams, что само по себе проблемой не было. Однако на соответствующем сайте она оказалась представленной двумя версиями - стабильной (3.70) и разрабатываемой (wvstreams-3.73f0-2003-05-02). Для начала я скачал и развернул первую. Никакого конфигурирования в ней не требовалось (да и скрипта configure не было, внести необходимые изменения, типа префикса каталога для инсталляции, можно было только непосредственно в Makefile) - достаточно, видимо, было выполнить make и make install. Однако попытка свершить первое действо почти мгновенно привела к выпадению с не вполне внятным сообщением об ошибке, причины которой я поначалу не понял.

Пришлось взяться за разрабатываемую версию. В ней сценарий конфигурирования имелся (вернее, автоматически генерировался при первом запуске make), однако его выполнение оборвалось на требовании OpenSSL, которого у меня, естественно, не было. И хотя в ./configure (согласно выводу в ответ на опцию --help) как-будто бы имелась опция --without-openssl, без OpenSSL библиотека конфигурироваться не желала.

Не увенчалась успехом и попытка соблюсти десятую заповедь компьютерщика - если после выполнения предыдущих девяти заповедей ничего не вышло, прочесть, наконец, документацию. Файл README содержал одну строчку, гласящую, что подробная документация имеется в каталоге Docs. Если же он пуст (а он именно пуст и был) - предлагалось сгенерить ее командой make doxyfile. Однако в ответ на нее радостно рапортовалось, что исполнение команды make невозможно без определения переменной окружения по имени WVPACKAGES. И узнать о смысле которой, вероятно, можно было из той самой документации...

В общем, развернул я OpenSSL. Почти обычным образом - ./configure, make, make install, причем обязательно с префиксом /usr, в /usr/local wvstreams находить его отказывался категорически. После чего, наконец, выполнил /configure и стал размышлять о великой сермяжной правде, скрытой в переменной WVPACKAGES. Можно было предполагать, что она должна была содержать список пакетов, подлежащих сборке. А в качестве имен пакетов можно было рассматривать подкаталоги в дереве исходников wvstreams, носивших имена типа ipstreams, linuxstreams, oggvorbis и т.д. Просмотр их содержимого привел меня к мысли, что для моих целей (сборки wvdial) довольно было бы ipstreams, но и linuxstreams для страховки не казался лишним. В итоге я определил переменную

$ export WVPACKAGES="ipstreams,linuxstreams"

после чего, наконец, требуемая мне библиотека благополучно собралась.

Со сборкой wvdial никаких проблем не возникло - прошла комбинацией из двух стандартных действ. Осталось его сконфигурировать - командой

$ wvdialconf /etc/wvdial.conf

Которая определяет модем и записывает строку его инициализации в указанный файл /etc/wcdial.conf. Куда остается только добавить указание на пульсовый набор

Dial Command = ATDP

телефон для дозвона к провайдеру

Phone = 1234567

логин и пароль для авторизации

Username = my_user_name
Password = my_password

Казалось бы, можно запускать звонилку:

$ wvdial

Ан не тут-то было. wvdial дозванивался по указанному номеру вполне справно, устанавливал соединение, отсылал учетные данные, авторизовывался на провайдерском сервере, запускал pppd, присваивая ему номер процесса - и по прошедствии пары-тройки секунд соединение разрывалось с выдачей кода ошибки (code exit) 2. Правда, вежливо рекомендуя посмотреть, что это такое, в man pppd. Из какового следовало, что exit code 2 возникает при обнаружении противоречивых опций (или что-то в этом роде).

О природе этой нехорошей опции оставалось только гадать. Или, как это принято в приличном обществе, почитать в man (5) wvdial.conf. Где и обнаружилось, что для ppp версии 2.3.0 и выше wvdial должен создавать файл /etc/ppp/peers/wvdial, без которого работать не собирается. Каталога /etc/ppp/peers у меня и в помине не было, и никакого такого файла не образовалось и после его создания и перезапуска wvdialconf.

Благо, в той же man-странице нашлось решение этой проблемы: достаточно было внести в файл wvdial.conf строку, запрещающую использование файла /etc/ppp/peers/wvdial:

New PPPD = no

После чего, наконец-то, удалось дозвониться без всяких проблем.

К чему я столь подробно описываю столь частную задачу? Просто для того, чтобы не забывать о подводных камнях Linux-самостроя, во-первых. А во-вторых - дабы еще раз отдать должное труду сборщиков дистрибутивов, благодаря которому большинство пользователей Linux'а об этих подводных камнях просто не подозревает...

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 обычно более чем достаточно.