Setevaya_rabota_po_protokolu_TCP_linux (1084628), страница 3
Текст из файла (страница 3)
ifconfig может потребовать аргумента "pointopoint", если dip не настроил правильно интерфейс. Например, если адрес вашего SLIP-сервера 128.253.154.2, а ваш IP-адрес 128.253.154.32, вам может потребоваться выполнить команду под root
ifconfig sl0 128.253.154.32 pointopoint 128.253.154.2
после связи по dip.
Обратите внимание, что имена SLIP-устройств, используемые командами ifconfig и route - sl0, sl1 и т.д.
В Разделе 5.3.4 мы объясним, как настраивать dip для связи со SLIP-сервером.
Соединение по slattach при статическом IP адресе
Если у вас выделенная линия или кабель, идущий прямо к SLIP-серверу, то нет необходимости использовать dip для инициализации связи. Вместо этого может быть использована команда slattach. В этом случае ваш файл /etc/rc.inet1 должен выглядеть примерно так:
#!/bin/sh
IPADDR="128.253.154.32" # Replace with your IP address
REMADDR="128.253.154.2" # Replace with your SLIP server address
# Modify the following for the appropriate serial device for
# the SLIP connection:
slattach -p cslip -s 19200 /dev/ttyS0
/etc/ifconfig sl0 $IPADDR pointopoint $REMADDR up
/etc/route add default gw $REMADDR
slattach выделяет первое свободное SLIP-устройство (sl0, sl1, и т.д.) определенной последовательной линии.
Обратите внимание, что первый параметр команды slattach - это используемый SLIP-протокол. В настоящее время возможны только значения slip и cslip. slip - это обычный SLIP, как и следовало ожидать, а cslip - это SLIP с компрессией заголовков дейтаграмм. В большинстве случаев вам следует использовать cslip; однако, если у вас с ним возникают проблемы, попробуйте slip.
Если у вас более одного SLIP-интерфейса, то вы должны принять решения относительно маршрутизации. Вы должны решить, какие маршруты добавить, и эти решения могут быть сделаны только на базе действительного протокола связей вашей сети. Здесь вам могут помочь, как книга по TCP/IP, так и Руководство.
Соединение по dip при динамическом IP адресе
Если ваш SLIP-сервер выдает IP адреса динамически, то вы, разумеется, не знаете заранее свой адрес, поэтому вы не можете включить его в /etc/hosts. (Между тем вы должны включить запись для своего хоста с адресом обратной связи (loopback address) 127.0.0.1.)
Многие SLIP-сервера выдают ваш IP адрес (также как и адрес сервера) во время соединения. Например, один тип SLIP-сервера выдает такое сообщение:
Your IP address is 128.253.154.44.
Server address is 128.253.154.2.
dip может перехватить эти номера с выхода сервера и использовать их для настройки SLIP-устройств.
Использование dip
dip может упростить процесс соединения со SLIP-сервером, войти и настроить SLIP-устройства. Если только у вас не выделенная линия для SLIP-сервера, dip - это то, что вам надо.
Для использования dip вы должны написать "сценарий болтовни" (``chat script''), который содержит перечень команд, используемых для связи со SLIP-сервером при входе в систему. Эти команды могут автоматически посылать ваши имя/пароль серверу, а также получать информацию о вашем IP адресе с сервера.
Вот пример такого сценария для использования с сервером динамических IP адресов. Для статических серверов вам потребуется в начале сценария установить значения переменных $local и $remote. В соответствии с вашими локальным IP адресом и адресом сервера соответственно. Более детальную информацию можно получить в Руководстве на dip.
main:
# Set Maximum Transfer Unit. This is the maximum size of packets
# transmitted on the SLIP device. Many SLIP servers use either
# 1500 or 1006; check with your network admins when in doubt.
get $mtu 1500
# Make the SLIP route the default route on your system.
default
# Set the desired serial port and speed.
port cua03
speed 38400
# Reset the modem and terminal line. If this causes trouble
# for you, comment it out.
reset
# Prepare for dialing. Replace the following with your
# modem initialization string.
send AT&C1&D2\\N3&Q5%M3%C1N1W1L1S48=7\r
wait OK 2
if $errlvl != 0 goto error
# Dial the SLIP server
dial 2546000
if $errlvl != 0 goto error
wait CONNECT 60
if $errlvl != 0 goto error
# We are connected. Login to the system.
login:
sleep 3
send \r\n\r\n
# Wait for the login prompt
wait login: 10
if $errlvl != 0 goto error
# Send your username
send USERNAME\n
# Wait for password prompt
wait ord: 5
if $errlvl != 0 goto error
# Send password.
send PASSWORD\n
# Wait for SLIP server ready prompt
wait annex: 30
if $errlvl != 0 goto error
# Send commands to SLIP server to initate connection.
send slip\n
wait Annex 30
# Get the remote IP address from the SLIP server. The
# `get...remote' command reads text in the form xxx.xxx.xxx.xxx,
# and assigns it to the variable given as the second argument
# (here, $remote).
get $remote remote
if $errlvl != 0 goto error
wait Your 30
# Get local IP address from SLIP server, assign to variable
# $local.
get $local remote
if $errlvl != 0 goto error
# Fire up the SLIP connection
done:
print CONNECTED to $remote at $rmtip
print GATEWAY address $rmtip
print LOCAL address $local
mode SLIP
goto exit
error:
print SLIP to $remote failed.
exit:
dip автоматически выполняет команды ifconfig и route, базирующиеся на значениях переменных $local и $remote. Здесь этим переменным присваиваются значения с использованием удаленных команд get..., которые получают текст со SLIP-сервера и присваивают его названной переменной.
Если команды ifconfig и route, которые выполняет для вас dip не работают, вы можете либо выполнить правильные команды в сценарии shell после выполнения dip, либо модифицировать исходник для самого dip. Выполнение dip с опцией -v будет выдавать отладочную информацию в процессе установления связи, что должно помочь в определении ошибок в работе. Теперь, для того, чтобы выполнить dip и открыть SLIP-соединение вы можете использовать команду, вроде:
/etc/dip/dip -v /etc/dip/mychat 2>&1
Где различные dip-файлы и сценарий болтовни (mychat.dip) помещены в /etc/dip. Вышеприведенное обсуждение должно быть достаточным для вашего хорошего самочувствия на славном пути в сетевое сообщество через Ethernet или SLIP. И вновь мы настоятельно рекомендуем заглянуть в книгу по TCP/IP, особенно, если ваша сеть имеет специфику в маршрутизации, отличающую ее от рассмотренных здесь.
Протокол DHCP
В этой теме изучается работа с протоколом DHCP (Dynamic Host Configuration Protocol, RFC 2131, 2132), предназначенным для автоматической настройки параметров стека TCP/IP рабочей станции в момент ее загрузки.
Эти данные передаются рабочей станции сервером DHCP после того, как станция во время своей загрузки выдаст широковещательный запрос параметров своей конфигурации, на который и откликается сервер. Данные конфигурации включают в себя IP-адрес рабочей станции, а также (опционально) адреса маршрутизатора (шлюза) и сервера DNS, имя домена и т.п.
Процесс взаимодействия сервера и клиента происходит в следующем порядке. Сервер получает запрос и откликается с предложением об аренде (lease), содержащим конфигурационные данные для хоста; ресурс, содержащийся в предложении, временно блокируется для предложения другим хостам до получения ответа от хоста или истечения тайм-аута. Хост может получить предложения от нескольких DHCP-серверов, работающих в его сети. Хост, на основании настроек своего DHCP-клиента, решает принять предложение определенного сервера (или принять первое поступившее предложение, если никаких настроек нет). Хост отвечает выбранному серверу сообщением "выбор". Сервер подтверждает выдачу аренды; после получения подтверждения хост конфигурирует себя в соответствии с полученными данными.
Один DHCP-сервер может работать в нескольких сетях. Для этого в каждой сети должен быть сконфигурирован DHCP-relay - специальный посредник, который будет ретранслировать сообщения между сервером и хостом, запросившим конфигурацию. Без посредника DHCP-сервер не услышит запросов, так как широковещательные IP-дейтаграммы не выходят за пределы IP-сети.
IP-адрес, присваиваемый рабочей станции, может браться сервером из пространства специально для этого выделенных адресов (берется первый свободный адрес). В этом случае у рабочей станции нет постоянного IP-адреса.
IP-адрес, присваиваемый конкретной рабочей станции, может быть и фиксированным, для этого надо знать MAC-адрес (Ethernet-адрес) рабочей станции и соответствующим образом настроить сервер.
В любом случае использование DHCP позволяет избежать конфигурирования стека TCP/IP на каждом хосте сети отдельно и проводить гибкую, централизованную административную политику.
DHCP сервер под Unix
В лабораторных работах используется DHCP сервер от Internet Software Consortium.
Сервер состоит из программы-демона dhcpd, ее конфигурационного файла /etc/dhcpd.conf и файла dhcpd.leases, в который сервер заносит информацию о выделенных адресах. Для работы с сервером необходимо создать конфигурационный файл, после чего запустить программу-демон.
В конфигурационном файле определяются пространства IP-адресов, назначаемых клиентам, дополнительная информация по конфигурации стека TCP/IP, передаваемая клиентам, а также описываются хосты, которым назначаются фиксированные IP-адреса (по MAC-адресу хоста).
В начале файла можно указать глобальные опции, передаваемые всем клиентам, например:
option domain-name "vvsu.ru"
Далее для каждой обслуживаемой сервером IP-сети создается отдельный раздел, где указываются
-
маска сети (netmask);
-
диапазон(ы) выдаваемых IP-адресов (range);
-
время по умолчанию, на которое выдается адрес, в секундах (default-lease-time);
-
максимальное время, на которое может быть выдан адрес, если хост запрашивает конкретное время, в секундах (max-lease-time);
-
дополнительные опции (option), передаваемые клиентам, например:
-
маска сети, передаваемая клиенту (subnet-mask);
-
широковещательный адрес (broadcast-address);
-
адреса шлюзов (для маршрута по умолчанию) (routers);
-
имя домена (domain-name);
-
адреса DNS-серверов (domain-name-servers).
-
Если какая-либо из опций уже определена глобально, то локальная опция заменяет значение глобальной опции для данной сети.
Пример конфигурации для обслуживаемой сети:
subnet 194.84.124.0 netmask 255.255.255.0 {
range 194.84.124.100 194.84.124.127;
range 194.84.124.200 194.84.124.254;
default-lease-time 600 max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 194.84.124.255;
option routers 194.84.124.1;
option domain-name-servers 194.84.124.4, 193.232.88.17;
}
Для каждого из хостов, которым выдается фиксированный адрес, создается отдельный раздел с заголовком "host hostname", где hostname - имя хоста. Внутри раздела указываются MAC-адрес хоста (в случае Ethernet: hardware ethernet address) и IP-адрес, выдаваемый хосту (fixed-address IP-address). Также могут указываться опции такие же, как и для сети. Если опции не указаны, хосту будут переданы опции, определенные в разделе конфигурации сети, в которой находится хост, или глобальные опции, в порядке приоритета.
Пример раздела конфигурации хоста:
host ocean {
hardware ethernet 08:00:26:4c:54:23;
fixed-address 194.84.124.24;
option domain-name-servers 194.84.124.4;
}
Хосты можно объединять в группы, с указанием опций, общих для всех хостов данной группы, перед разделами с описанием хостов:
group {
option domain-name-servers 194.84.124.4;