Организация узла Интернет Сервис Провайдера с использованием операционной системы Linux и Интранет

Организация узла Интернет Сервис Провайдера с использованием операционной системы Linux и Интранет

В данной статье описывается, как можно организовать службу Интернет Сервис Провайдера (ISP) и создать локальную сеть Интранет с использованием операционной системы Linux и выделенного канала связи на 28.8 Кбит.Все листинги данной статьи доступны через анонимный FTP по адресу:ftp://ftp.ssc.com/pub/lj/listings/issue41/2025.tgz

Случилось так, что я стал основателем маленькой службы ISP в Балтиморе, в окрестностях Мэриленда. Моя жена и я столкнулись с проблемой поиска дешевого и надежного провайдера для доступа к Интернет. После бесконечных попыток дозвониться по перегруженной телефонной линии мы решили перейти на выделенный канал связи 28.8 Кбит и использовать его для подключения к Интернет. Соединение было постоянным, и мы в любую минуту могли погружаться в море Интернет. Естественным стал следующий шаг предоставлять доступ к Интернет другим людям. Кроме помощи друзьям в доступе к Интернет и приобретения практического опыта работы с Linux, это явилось источником некоторой компенсации наших материальных затрат. Перед тем как Вы примете решение стать Интернет Сервис Провайдером и заработать на этом большие деньги, я хочу предостеречь Вас: впереди ожидает жестокая конкуренция, а в результате дело это оказывается не очень прибыльным.

Мы выбрали простейшую конфигурацию Интернет-сервера: Linux машина с четырьмя входными линиями для доступа по dial-up и один канал для поддержки выделенного внешнего соединения. В настоящее время на нашем сервере около двадцати пользователей. Главная проблема данной конфигурации: если четыре входных канала заняты пользователями, то эффективная скорость работы в сети каждого из них (28.8/4)=7.2 Кбит/сек. Но если один пользователь соединяется с нашим сервером, - он получает весь канал в свое распоряжение. К тому же, когда на связи несколько пользователей одновременно, один может работать с электронной почтой, другой - загружать WWW страницу, а третий может просто принимать ванну.

Один из первых шагов, которые Вам предстоит сделать для построения Интернет-сервера, - это рекомпилировать кернел с включенной поддержкой сети, маршрутизацией IP пакетов и установкой нескольких дополнительных драйверов. Мы используем сетевую плату для нашей локальной сети и Cyclades Cyclom 16YeP мультипортовую плату с 16 портами RS232. Включение маршрутизации IP пакетов на Linux сервере позволяет осуществлять обмен данными между локальной сетью и Интернет.

Следующий важный этап - получение доступа к Интернет у провайдера с поддержкой PPP (poin-to-point) протокола. Можно получить выделенное соединение со скоростью 28.8 Кбит/сек приблизительно за 100$ в месяц, это даст возможность доступа к Интернет Вашей локальной сети. Желательно также получить постоянный IP адрес или адресное IP пространство класса С и доменное имя. Мы получили сеть адресов класса С, так что дальнейшее обсуждение будет касаться сети только этого класса. Сеть класса С - это блок из 255 адресов, которые можно использовать для внутренней сети Интранет. Если у Вас нет адресного пространства класса С, а только один постоянный IP адрес, можно ислользовать IP Masquerading для доступа к Интернет из локальной сети ("IP Masquerading with Linux" by Chris Kostick in the July 1996 issue of Linux Journal).

Мы начали организацию нашего Интернет-сервера со звонка к местному Интернет Сервис Провайдеру и заказа адресного пространства класса С, доменного имени и выделенной линии связи на 28.8 Кбит/сек. После того как мы получили блок адресов (206.156.217.*), я выбрал один адрес для нашего сервера (206.156.217.10) и начал конфигурацию сети, используя утилиту netconfig, поставляемую с Linux.

Ваш ISP должен прописать адрес Вашего сервера в своем DNS (Domain Name Servere) - сервере доменных имен. DNS запись дает возможность другим пользователям Интернет осуществлять доступ к Вашей машине, используя ее доменное имя. Наш IP адрес (206.156.217.10) трудно запомнить, такой формат адреса приемлем для компьютеров, но не для пользователей. DNS запись дает возможность доступа к нашей машине по имени NetBrain.com, не зная точный цифровой адрес.

В файле resolv.conf должен быть список Ваших DNS серверов. Он должен выглядеть примерно так:

#resolv.conf

Nameserver 206.156.208.2

nameserver 206.156.208.8

Настройка PPP

Используя ppp-on скрипт (часть пакета pppd), можно настроить параметры ppp соединения.

Listing 1. Ppp-on Script

#ppp-on

# Local IP address if known. Dynamic = 0.0.0.0

LOCAL_IP=206.156.217.10

# Remote IP address if desired. Normally 0.0.0.0

REMOTE_IP=0.0.0.0

# The proper netmask if needed

NETMASK=255.255.255.0

DIALER_SCRIPT=etc/ppp/ppp-on-dialer

exec /usr/sbin/pppd debug lock modem crtscts \

/dev/ttyC2 115200 asyncmap 20A0000 \

escape FF kdebug 0 $LOCAL_IP: \

netmask $NETMASK defaultroute \

connect $DIALER_SCRIPT

Он используется для настройки IP адресов компьютеров локальной сети и сервера, на котором запущен pppd через модем или локальную сеть, и устройств, которые Вы используете для соединения. Скрипт ppp-on вызывает скрипт ppp-on-dialer, который устанавливает через модем соединение с Вашим провайдером; ppp-on-dialer использует chat, который инициализирует модем и вызывает начальную процедуру соединения с ISP (запрос имени пользователя и пароля). Важные параметры в ppp-on script:

- 115200 - скорость передачи данных последовательного порта, но это не означает, что Ваш модем работает так быстро, просто с учетом внутренних протоколов сжатия данных модема, скорость может достигать этого значения;

- /dev/ttyC2 - назначение порта для Вашего модема по умолчанию, описывает этот порт как порт внешнего соединения для пакетов, отправляемых за пределы локальной сети.

Следует отметить, что chat содержит строки ogin my_login и assword: my_password. Таким образом он сообщает: "Если Вы видите ogin:, введите my_login, затем после assword наберите my_password". Можно сделать это вручную, используя любую терминальную программу, чтобы увидеть на экране, как происходит вход в сеть.

Listing2. ppp-on-dialer Script

#ppp-on-dialer exec chat -v\

TIMEOUT3\

ABORT'\nBUSY\r'\

ABORT '\NO ANSWER\r'\

ABORT '\nRINGING\r\n\r\nRINGING\r'\

'' \rAT \

'OK-+++\c-OK' ATH0 \

TIMEOUT30\

OKATDT5551212 \

CONNECT''

ogin:my_login \

assword:my_password

Если Вы запустили ppp-on и услышали, как модем набрал номер и произошло соединение, Вы сделали первый шаг в настройке Интернет сервера. Когда PPP соединение установлено, Вы можете пинговать одну из машин Вашего ISP прямо из командной строки Linux. Лучший вариант для этого - DNS сервер Вашего провайдера.

Если пинг проходит успешно, можно попробовать сеанс TELNET. Просто попробуйте соединиться с одним из MOO серверов (telnet baymoo.org:8888). Если это работает, соединение установлено правильно и маршрутизация работает надлежащим образом. Если вы зарегистрированы как пользователь на каком-либо другом сервере, можете также попробовать Telnet сеанс связи. Это поможет удостовериться в том, что DNS регистрация Вашей машины была проведена корректно. Если появилась ошибка Unknown host error, Ваш провайдер не произвел правильную регистрацию Вашей сети в системе DNS - иногда требуется несколько дней на проведение этой процедуры.

Подключение других компьютеров к Вашему серверу

Когда работу сервера с сетью Интернет можно считать стабильной, натсупает время подключения к сети других компьютеров. Linux - машина, как и все остальные компьютеры, должна иметь сетевую плату, а kernel на ней должен быть скомпилирован с учетом необходимых драйверов.

Предположим, Вам необходимо подключить компьютер с именем Doofus (ПК под управлением Windows 95) к локальной сети и к Интернет. Выберем IP адрес для этой машины 206.156.217.7 (это может быть любой адрес из блока класса С). Для того чтобы настроить Windows95 для доступа к Вашему Интернет-серверу, надо запустить Настройку Сети из Панели Управления. Добавьте протокол TCP/IP для установленной сетевой платы. Настройте Свойства для этого протокола:

- IP адрес: так как мы располагаем сетью класса С, выбираем адрес 206.156.217.7 и маску сети 255.255.255.0.

- Конфигурация DNS: включить DNS и присвоить компьютеру имя, например, Doofus в качестве имени хоста и NetBrain.com в качестве домена. Теперь этот компьютер имеет имя Doofus.NetBrain.com или Doofus в домене NetBrain.com. Порядок просмотра DNS серверов должен быть таким же, как и в файле /etc/resolv/conf сервера.

- Конфигурация WINS: должна быть отключена.

- Шлюз: добавить адрес Linux сервера. Этот параметр помогает компьютеру найти путь к Интернет из локальной сети. Мы добавили 206.156.217.10.

Тестирование компьютера, работающего под Windows95

После перезагрузки компьютера Вы уже можете пинговать его со своего сервера, используя ping 206.156.217.7. Если это не работает, возможно, проблемы в соединительном кабеле, драйверах Linux, драйверах Win95 или конфигурации Windows95. Теперь с другой стороны€ Если Вы готовы к тестированию Windows95 клиента, откройте окно сеанса MS-DOS и напечатайте ping 206.156.217.10. Эта команда посылает запрос и получает ответ от сервера. Можно запускать Telnet с этой машины (telnet mickeymouse.com) или при помощи любого браузера посещать любой интересующий Вас Web сайт. Это просто.

Мультипортовая плата для dial-up доступа

Большинство персональных компьютеров имеют только два последовательных порта, один из которых, как правило, используется для подключения мыши. Для организации доступа к сети по dial-up необходимо приобрести мультипортовую плату. Мы используем плату Cyclsdes Cyclom 16Yep с 16-ю портами для подключения модемов. Очень важно, что драйвера для этой платы встроены в Linux.

Перед покупкой платы убедитесь в наличии драйверов для нее. Вы можете создать порты для платы, используя MAKEDEV. Наша плата Cyclades использует порты ttyC0 - ttyC15, вместо стандартных последовательных портов ttyS0 и ttyS1. К счастью, плата Cyclades поставляется со скриптом настройки makecyc.

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

Для инициализации последовательных портов необходимо вызвать программу setserial. Для того чтобы правильно настроить последовательные порты сервера, необходимо отредактировать файл /etc/rc.d/rc.serial. Для использования порта com2 для входного модема, нужно добавить следующие строки:

#standard serial port - com2:

setserial /dev/cua1 spd_vhi auto_irq autoconfig

Для платы Cyclades я сконфигурировал порты 3-10 /dev/cub2 - /dev/cub10 (некоторые пока не используются, предусмотрены для расширения в будущем) следующим образом:

#configure Cyclades serial ports

setserial - b /dev/cub2 spd_vhi autoirq skip_test

setserial - b /dev/cub3 spd_vhi autoirq skip_test

setserial - b /dev/cub4 spd_vhi autoirq skip_test

setserial - b /dev/cub5 spd_vhi autoirq skip_test

setserial - b /dev/cub6 spd_vhi autoirq skip_test

setserial - b /dev/cub7 spd_vhi autoirq skip_test

setserial - b /dev/cub8 spd_vhi autoirq skip_test

setserial - b /dev/cub9 spd_vhi autoirq skip_test

Убедитесь, что файл rc.serial вызывается при загрузке операционной системы из файла rc.s Это позволит производить автоматическую настройку последовательных портов при загрузке.

Настройка файла getty

Следующий шаг, который необходимо сделать, - настроить сервер на прослушивание последовательных портов на наличие входящих запросов и для ответа на эти запросы. Файл /etc/gettydefs используется для настройки getty, который осуществляет подключение к серверу. После установки стандартной версии Linux этот файл выглядит так:

c1: 1235:respawn:/sbin/agetty 38400 tty1 linux

c2: 1235:respawn:/sbin/agetty 38400 tty2 linux

c3: 1235:respawn:/sbin/agetty 38400 tty3 linux

c4: 1235:respawn:/sbin/agetty 38400 tty4 linux

c5: 1235:respawn:/sbin/agetty 38400 tty5 linux

c6: 1235:respawn:/sbin/agetty 38400 tty6 linux

Это обеспечивает работу шести виртуальных консолей. Четвертый параметр в строке /sbin/agetty - это программа, вызывающая процедуру подключения к компьютеру. Следующие параметры описывают скорость соединения, номер и тип терминала. Для входных линий по dial-up нужно добавить следующие строки параметров:

#Dial-up lines using /sbin/getty

# (actually getty_ps)

s1:345:respawn:/sbin/getty ttyC2 115200 vt100

s2:345:respawn:/sbin/getty ttyC3 115200 vt100

s3:345:respawn:/sbin/getty ttyC4 115200 vt100

Мы используем другой getty (getty_ps) для наших входных соединений, так как использование agetty для последовательных портов вызывает проблемы. Мы также узнали, что getty_ps более надежно. Вы можете использовать и mgetty для входящих линий, но для нас и getty_ps работает прекрасно. Можно заметить, что параметры для getty_ps немного различаются. Настройки файла /etc/gettydefs приведены в листинге 4:

Listing 4.

# /etc/gettydefs

# Modem locked at 115200: Serial port is at

# 115200, modem is much less, but should be

# able to compress.

# # Last line of this file is described in next

# comment line as fields separated by # signs.

# label # initial-flags # final-flags # login prompt # next label

115200 # B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP CRTSCTS #@S login: #115200

Теперь Вы настроили getty_ps с начальными значениями. В каталог /etc/defaults поместите файлы конфигурации для каждой входящей линии. Для линии /dev/ttyC2 у нас есть соответствующий файл /etc/defaults/getty.ttyC2, приведенный на листинге 3.

Listing 3: Configuration File for Dial-up Line

#LOGIN=/etc/ppp/phonelogin

LOGIN=/bin/login

# line to use to do initialization. All

# INIT, OFF, and WAITFOR functions are

# handled on this line. If this line is

# not specified, any other program that

# wants to share the line (like kermit,

# uucp, seyon) will fail. This line will

# also be checked for lockfiles.

#

# format: (without the /dev/) Map

# incoming line with outgoing line

# /dev/cub6 = /dev/ttyC6

INITLINE=cub6

# timeout to disconnect if idle€

TIMEOUT=60

# modem initialization string€ Sets

# the modem to disableauto-answer

# This is for the CARDINAL modem,

# format: € (chat sequence)

INIT="" \d+++\dAT\r OK\r\n\ ATH0\r OK\r\n

AT\s&F\s&C1\s&D2\sX1\sS0=0\r OK\r

# waitfor string€ if this sequence of

# characters is received over the line,

# a call is detected

WAITFOR=RING

# this line is the connect chat sequence.

# This chat sequence is performed after the

# WAITFOR string is found. The \A character

# automatically sets the baudrate to the

# characters that are found, so if you get

# the message CONNECT 2400, the baud rate

# is set to 2400 baud.

#

# format: € (chat sequence)

CONNECT="" ATA\r CONNECT\s\A

# this line sets the time to delay before

# sending the login banner

DELAY=1

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

Для наблюдения за состоянием внешнего соединения можно установить DEBUG=777 в файле /etc/default/getty.tty?? - буден создан отладочный файл. Это поможет найти причину неисправности при возникновении проблем с установкой соединения или при неправильной конфигурации. Файл syslog помещается, как правило, в каталог /var/adm/syslog.

Доступ удаленных пользователей к сети

Процедура входа в сеть для внешних пользователей может быть видоизменена. Мы модифицировали программу lоgin (из пакета poeigl), так как мы хотели предоставлять доступ к ресурсам Интернет по протоколу PPP и одновременно иметь возможность удаленной работы на нашем сервере (например, когда я хочу изменить какие-либо параметры). Приглашение программы ppplogin выглядит примерно так:

Username:jsmith

Password:

Please select PPP or Shell access:

1) PPP

2) Shell

Please enter your choise: 1

Если пользователь выбирает Shell, Linux вызывает стандартный шелл для работы в операционной системе. После выбора РРР специальный скрипт вызывает pppd и динамически выделяет для него IP адрес. Часть С-кода для вызова ppp выглядит так:

/* -- PPP account login -- */

execlp ("/bin/sh", "-sh", "-c",

"/etc/ppp/ppplogin", (char *)0):

fprintf (stderr,

"login: couldn't exec shell script: %s. \n",

strerror (errno));

exit (0);

Программа /etc/ppp/ppplogin приведена на Листинге 5.

Listing 5. Ppplogin Script

mesg n

stty - echo

#retval=$?

tty_now='tty';

if [ "$tty_now" = "/dev/ttyC6" ];

then

/usr/sbin/pppd -detach modem passive crtscts\

206.156.217.10: 206.156.217.31

fi

if ["$tty_now" = "/dev/ttyC8];

then

/usr/sbin/pppd -detach modem passive crtscts\

206.156.217.10: 206.156.217.33

fi

if ["$tty_now" = "/dev/ttyC9];

then

/usr/sbin/pppd -detach modem passive crtscts\

206.156.217.10: 206.156.217.34

fi

if ["$tty_now" = "/dev/ttyC10];

then

/usr/sbin/pppd -detach modem passive crtscts\

206.156.217.10: 206.156.217.35

fi

exit

Если пользователь выбирает РРР, сервер проверяет, через какой порт он соединен, и присваивает этому порту IP адрес. Пользователь, который звонит все время по одной телефонной линии, получает всегда один и тот же адрес. Первой линии назначается порт ttyC6 и адрес 206.156.217.31. Устанавливается РРР соединение между машиной пользователя и сервером. Важными параметрами этого tty/ppp соединения являются:

- Detach - не запускать как фоновый процесс,

- Modem - ожидание сигнала модема CD (Carrier Detect) для установления соединения,

- 206.156.217.10:206.156.217.31 - мой адрес - 206.156.217.10, компьютер на другом конце линии имеет адрес 206.156.217.31.

Забота о постоянном соединении

На начальном этапе работы мы столкнулись с проблемой частых обрывов связи из-за нашей местной телефонной компании. Я решил эту проблему при помощи программы pppupd, которая постоянно пингует сервер нашего провайдера и, в случае обрыва связи, вызывает ppp-on скрипт для восстановления РРР соединения.

Факс-сервис и работа клиентов под Windows95

Большинство наших пользователей работают с Windows95 и не любят набирать свое пользовательское имя и пароль при каждом подключении к серверу. Для того чтобы устранить этот источник раздражения, мы нашли другой пакет getty, названный mgetty, который автоматически определяет клиентов Windows95 и позволяет им использовать Dial-up Networking с автоматическим соединением. Это сэкономило нам уйму времени на поддержку клиентов Windows95. Пакет mgetty (http://sunsite.unc.edu/pub/Linux/ Serial/mgetty+sendfax) нелегко установить, так что следует внимательно ознакомиться с прилагаемой документацией перед установкой. Одно замечательное свойство этого пакета - возможность принимать факсы через внешние телефонные линии без дополнительных устройств и каналов связи. Мы можем использовать одни и те же телефонные линии для dial-up и приема факсов.

Электронная почта

Мы автоматически установили электронную почту вместе с Linux. Вы можете установить программу pine для работы в шелл и POP v3 в качестве сервера для POP протокола. Если Вы не установили РОР сервер, можно скачать пакет pop3d с любого хоста, например sunsite.unc.edu, и прочитать инструкцию по установке.

Web-сервер

Если Вы хотите, чтобы Ваша машина содержала свои WWW страницы, необходимо установить Web-сервер. Мы скачали Apache Web server (www.apache.org), рекомпилировали и сконфигурировали его, используя поставляемую документацию. После компилирования исходных текстов создается выполняемая программа httpd, которую необходимо скопировать в каталог /usr/sbin. Рекомендуется добавить строку /usr/sbin/httpd в конфигурационный файл /etc/rc.d/rc.local, для того чтобы он запускался при загрузке операционной системы.

Эрик Харлоу руководит NetBrain под Linux
E-mail: brain@netbrain.com
(Журнал Linux Journal issue 41,September 1997).
Перевод Игоря Греня
E-mail: GREN@gray.isir.minsk.by
- титульная страница


Компьютерная газета. Статья была опубликована в номере 26 за 1998 год в рубрике soft :: unix

©1997-2024 Компьютерная газета