2004 г
Проект Русской Документации FreeBSD
содержание
Первоначально предоставил Satoshi
Asami. Дополнительный материал
предоставили Guy Helmer, Piero Serini.
Ниже дан один из способов настройки FreeBSD для подключения к SLIP сети со статическим
адресом. Для динамического подключения (адрес изменяется при каждом дозвоне) возможно
потребуется более сложная настройка.
Сначала определите, к какому последовательному порту подключен модем. Многие создают
символическую ссылку, такую как /dev/modem, на настоящий файл
устройства, /dev/cuaaN. Это позволяет абстрагироваться от имени
файла устройства, например если вы переносите модем на другой порт. Довольно сложно
править множество файлов в /etc и .kermrc во всей системе!
Замечание: /dev/cuaa0 это COM1, cuaa1 это COM2, и т.д.
Убедитесь, что в вашем файле настройки ядра присутствует строка:
pseudo-device sl 1
В FreeBSD 5.X, используйте вместо этой строки следующую:
device sl
Эта строка включена в ядро GENERIC, так что если вы ее не
удаляли, проблем быть не должно.
-
Добавьте ваш компьютер, шлюз и сервера имен в файл /etc/hosts. Вот пример такого файла:
127.0.0.1 localhost loghost
136.152.64.181 water.CS.Example.EDU water.CS water
136.152.64.1 inr-3.CS.Example.EDU inr-3 slip-gateway
128.32.136.9 ns1.Example.EDU ns1
128.32.136.12 ns2.Example.EDU ns2
-
Убедитесь, что в файле /etc/host.conf hosts находится перед bind (для FreeBSD
версий до 5.0). Начиная с FreeBSD 5.0, система использует файл /etc/nsswitch.conf, убедитесь, что параметр files находится перед dns в строке hosts этого файла. Без этого параметра могут происходить странные
вещи.
-
Отредактируйте файл /etc/rc.conf.
-
Установите имя хоста, настроив переменную hostname:
hostname="myname.my.domain"
Здесь необходимо использовать полное доменное имя вашего компьютера в интернет.
-
Добавьте sl0 к списку сетевых интерфейсов, изменив
переменную:
network_interfaces="lo0"
на:
network_interfaces="lo0 sl0"
-
Измените параметры sl0, добавив строку:
ifconfig_sl0="inet ${hostname} slip-gateway netmask 0xffffff00 up"
-
Назначьте маршрутизатор по умолчанию, изменив строку:
defaultrouter="NO"
на:
defaultrouter="slip-gateway"
-
Создайте файл /etc/resolv.conf, содержащий:
domain CS.Example.EDU
nameserver 128.32.136.9
nameserver 128.32.136.12
Как вы видите, здесь указаны адреса серверов имен. Конечно, реальные имена доменов и
адреса для вас будут другими.
-
Перегрузите компьютер и убедитесь, что его имя хоста настроено правильно.
-
Дозвонитесь на удаленный сервер, введите slip в приглашение,
имя своего компьютера и пароль. Все, что требуется ввести в вашем случае. Если вы
используете kermit, попробуйте такой скрипт:
# kermit setup
set modem hayes
set line /dev/modem
set speed 115200
set parity none
set flow rts/cts
set terminal bytesize 8
set file type binary
# The next macro will dial up and login
define slip dial 643-9600, input 10 =>, if failure stop, -
output slip\x0d, input 10 Username:, if failure stop, -
output silvia\x0d, input 10 Password:, if failure stop, -
output ***\x0d, echo \x0aCONNECTED\x0a
Конечно, вам потребуется заменить имя хоста и пароль на ваши собственные. После этого,
для подключения просто введите slip из приглашения kermit.
Замечание: Хранение пароля в любом месте файловой системы в незашифрованном
виде это обычно плохая идея. Вы делаете это на свой риск.
-
Выйдите из kermit (вы можете приостановить его, нажав Ctrl-z) и введите под root:
# slattach -h -c -s 115200 /dev/modem
Если вы сможете выполнить ping для хостов по другую сторону
маршрутизатора, вы подключились! Если это не работает, попробуйте параметр slattach -a вместо -c.
Сделайте следующее:
# kill -INT `cat /var/run/slattach.modem.pid`
для остановки slattach. Помните, что вы должны работать под
root для выполнения этой команды. Затем вернитесь в kermit
(запустив fg, если он приостановлен) и выйдите из него (q).
Страница справочника slattach сообщает, что для отключения
интерфейса необходимо использовать ifconfig sl0 down, но это
похоже не играет никакой роли. (ifconfig sl0 сообщает о том
же.)
Иногда модем может не сбросить соединение (это бывает довольно часто). В этом случае
просто запустите kermit и выйдите из него еще раз. При второй попытке соединение обычно
разрывается.
Вот наиболее часто встречающиеся ситуации:
-
Не используются параметры slattach -c или -a (это может быть не фатально, но
иногда вызывает проблемы.)
-
Используется s10 вместо sl0 (с
некоторыми шрифтами сложно увидеть разницу).
-
Попробуйте использовать ifconfig sl0 для просмотра статуса
интерфейса. Например, вы можете получить такую информацию:
# ifconfig sl0
sl0: flags=10<POINTOPOINT>
inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00
-
Если вы получите сообщение ``no route to host'' от команды
ping, возможно это проблема с таблицей маршрутизации. Используйте команду netstat -r для отображения существующих маршрутов:
# netstat -r
Routing tables
Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks:
(root node)
(root node)
Route Tree for Protocol Family inet:
(root node) =>
default inr-3.Example.EDU UG 8 224515 sl0 - -
localhost.Exampl localhost.Example. UH 5 42127 lo0 - 0.438
inr-3.Example.ED water.CS.Example.E UH 1 0 sl0 - -
water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438
(root node)
Предыдущий пример получен на относительно загруженной системе. Числа в вашей системе
будут сильно зависеть от загрузки сети.
Этот документ предоставляет решение для настройки SLIP сервера в системе FreeBSD, что
обычно означает настройку системы для автоматического запуска соединений при удаленном
входе SLIP клиентов.
Информация в этом разделе чисто техническая, поэтому требуются некоторые
предварительные знания. Предполагается, что вы знакомы с сетевым протоколом TCP/IP, и в
частности, с адресацией сетей и хостов, сетевыми масками, делением на подсети,
маршрутизацией и протоколами маршрутизации, такими как RIP. Настройка SLIP сервисов на
сервере удаленного доступа требует знания этих концепций, и если вы не знакомы с ними,
прочтите или книгу TCP/IP Network
Administration от Craig Hunt, опубликованную O'Reilly & Associates, Inc.
(ISBN Number 0-937175-82-X), или книги Douglas Comer по протоколу TCP/IP.
В дальнейшем предполагается, что вы уже настроили ваш модем (модемы) и настроили
соответствующие системные файлы для разрешения входа через них. Если вы еще не
подготовили систему соответствующим образом, обратитесь к руководству по настройке
сервисов удаленного входа; просмотрите список руководств на http://www.FreeBSD.org/ru/docs.html. Вы
можете также обратиться к странице справочника sio(4) за информацией
о драйвере последовательного порта и к страницам gettytab(5), getty(8) и init(8) за информацией
по настройке системы для удаленного входа в систему через модемы, и возможно stty(1) за информацией
о настройке параметров последовательных портов (таких как clocal для подключаемых непосредственно последовательных
интерфейсов).
В типичной конфигурации FreeBSD работает в качестве SLIP сервера так: пользователь
SLIP дозванивается на FreeBSD SLIP сервер и входит в систему со специальным SLIP логином,
использующим /usr/sbin/sliplogin в качестве оболочки. Программа
sliplogin просматривает файл /etc/sliphome/slip.hosts на предмет строки, соответствующей
специальному пользователю, и если находит совпадение, подключает последовательную линию к
доступному SLIP интерфейсу, а затем запускает shell скрипт /etc/sliphome/slip.login для настройки SLIP интерфейса.
Например, идентификатор пользователя на SLIP сервере Shelmerg. Соответствующая запись в /etc/master.passwd будет выглядеть примерно так:
Shelmerg:password:1964:89::0:0:Guy
Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin
Когда Shelmerg входит в систему, sliplogin ищет строку в /etc/sliphome/slip.hosts, в которой находится соответствующий
идентификатор пользователя; например, строка может быть такой:
Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
После обнаружения этой строки sliplogin подключает
последовательную линию к следующему доступному SLIP интерфейсу, а затем выполняет /etc/sliphome/slip.login примерно так:
/etc/sliphome/slip.login 0 19200
Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
Если все проходит нормально, /etc/sliphome/slip.login
вызовет ifconfig для SLIP интерфейса, к которому подключилась
программа sliplogin (slip интерфейс 0 в примере выше, первый
параметр в списке, задаваемом slip.login) для установки
локального IP адреса ((dc-slip), удаленного IP адреса (sl-helmer), сетевой маски для SLIP интерфейса (0xfffffc00), и любых дополнительных флагов (autocomp). Если что-то идет не так, sliplogin обычно протоколирует соответствующие сообщения в через
уровень daemon syslog; эти сообщения как правило попадают в
/var/log/messages (обратитесь к страницам справочника syslogd(8) и syslog.conf(5), а
также проверьте файл /etc/syslog.conf, чтобы выяснить, что
протоколирует syslogd и куда помещается информация).
Достаточно примеров -- давайте начнем настройку системы.
Стандартное ядро FreeBSD обычно поставляется с двумя SLIP интерфейсами ((sl0 и sl1); вы можете использовать
команду netstat -i, чтобы выяснить, определены ли эти интерфейсы
в вашем ядре.
Пример вывода netstat -i:
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
ed0 1500 <Link>0.0.c0.2c.5f.4a 291311 0 174209 0 133
ed0 1500 138.247.224 ivory 291311 0 174209 0 133
lo0 65535 <Link> 79 0 79 0 0
lo0 65535 loop localhost 79 0 79 0 0
sl0* 296 <Link> 0 0 0 0 0
sl1* 296 <Link> 0 0 0 0 0
Наличие в выводе netstat -i интерфейсов sl0 и sl1 означает, что SLIP
интерфейсы встроены в ядро (символ * показывает неактивность
интерфейсов).
Ядро FreeBSD по умолчанию не пересылает пакеты между интерфейсами (компьютер FreeBSD
не работает как маршрутизатор), вследствие требований RFC (см. RFCs 1009 [Requirements
for Internet Gateways], 1122 [Requirements for Internet Hosts -- Communication Layers], и
возможно 1127 [A Perspective on the Host Requirements RFCs]). Если вы хотите, чтобы
FreeBSD SLIP работал в качестве маршрутизатора, отредактируйте файл /etc/rc.conf и присвойте переменной gateway_enable значение YES.
Для вступления изменений в силу потребуется перезагрузка.
В файле настройки стандартного ядра (/sys/i386/conf/GENERIC)
находится строка:
pseudo-device sl 2
Она определяет число доступных устройств SLIP в ядре; Число в конце строки определяет
максимально возможное количество одновременных SLIP соединений.
Обратитесь к Гл. 8 за информацией по настройке ядра
FreeBSD.
Как упоминалось ранее, в каталоге /etc/sliphome находятся
три файла, являющиеся частью настройки для /usr/sbin/sliplogin
(для sliplogin существует страница справочника, sliplogin(8)): slip.hosts, определяющий список пользователей SLIP и связанные с
ними IP адреса; slip.login, который обычно всего лишь
настраивает SLIP интерфейс; slip.logout, который
восстанавливает состояние системы до запуска slip.login после
завершения последовательного соединения.
/etc/sliphome/slip.hosts содержит строки, в которых
находится как минимум четыре параметра, разделенных пробелами:
Локальные и удаленные адреса могут быть именами хостов (разрешаемыми в IP адреса через
файл /etc/hosts или через службу доменных имен, в зависимости
от настроек в файле /etc/nsswitch.conf для FreeBSD 5.X,
или /etc/host.conf для FreeBSD 4.X), а сетевая маска может
быть именем, разрешаемым через файл /etc/networks. В системе,
используемой в качестве примера, файл /etc/sliphome/slip.hosts
выглядит так:
#
# login local-addr remote-addr mask opt1 opt2
# (normal,compress,noicmp)
#
Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp
В конце строки находятся один или более параметров.
-
normal -- нет сжатия заголовков
-
compress -- сжимать заголовки
-
autocomp -- сжимать заголовки, если удаленная сторона это
позволяет
-
noicmp -- запретить ICMP пакеты (любые ``ping'' пакеты будут
отброшены и не станут помехой для другого трафика)
Выбор локального и удаленного адреса для SLIP соединений зависит от того, используете
ли вы выделенную TCP/IP сеть, или используете на SLIP сервере ``ARP прокси''. (это не
``настоящий'' ARP прокси, но данная терминология используется в этом разделе). Если вы не
уверены, какой метод выбрать, или как присвоить IP адреса, обратитесь к книгам по TCP/IP,
упомянутым выше (Разд. 21.7.2.1).
Если вы собираетесь использовать отдельную подсеть для SLIP клиентов, потребуется
выделить адреса за пределом адресов вашей сети и присвоить каждому SLIP клиенту IP адрес
из данной подсети. Затем вам возможно потребуется настроить статический маршрут в
используемую для SLIP подсеть через SLIP сервер на ближайшем IP маршрутизаторе.
Иначе, если вы будете использовать метод ``proxy ARP'', потребуется присвоить SLIP
клиентам IP адреса, не входящие в Ethernet подсеть сервера SLIP, а также настроить
скрипты /etc/sliphome/slip.login и /etc/sliphome/slip.logout, чтобы использовать arp(8) для управления
записями ARP прокси в таблице ARP сервера SLIP.
Типичный файл /etc/sliphome/slip.login выглядит примерно
так:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
Этот файл slip.login всего лишь запускает ifconfig для соответствующего SLIP интерфейса с заданными локальным
и удаленным адресом и сетевой маской.
Если вы решили использовать метод ``ARP прокси'' (вместо использования отдельной
подсети для SLIP клиентов), ваш файл /etc/sliphome/slip.login
должен выглядеть примерно так:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
# Answer ARP requests for the SLIP client with our Ethernet addr
/usr/sbin/arp -s $5 00:11:22:33:44:55 pub
Дополнительная строка в этом slip.login, arp -s $5 00:11:22:33:44:55 pub, создает ARP запись в ARP таблице
SLIP сервера. При соединении другого узла в Ethernet с IP адресом SLIP клиента, SLIP
сервер выдает ответ с собственным Ethernet MAC адресом.
При использовании примера выше убедитесь, что заменили Ethernet MAC адрес (00:11:22:33:44:55) на MAC адрес Ethernet карты вашей системы, или ваш
``ARP прокси'' точно не будет работать! Вы можете определить Ethernet MAC адрес SLIP
сервера, просмотрев вывод команды netstat -i выше; информация об
адресе находится второй строке:
ed0 1500 <Link>0.2.c1.28.5f.4a 191923 0 129457 0 116
Это означает, что в данной системе Ethernet MAC адрес 00:02:c1:28:5f:4a -- точки в MAC адресе, выдаваемые netstat -i, должны быть заменены на двоеточия, необходимо также
добавить нуль в начало каждого односимвольного шестнадцатеричного номера для
преобразования этого адреса в форму, пригодную для arp(8); обратитесь к
странице справочника arp(8) за полной
информацией по использованию.
Замечание: При создании /etc/sliphome/slip.login и
/etc/sliphome/slip.logout, должен быть установлен бит
``выполнения'' (chmod 755 /etc/sliphome/slip.login
/etc/sliphome/slip.logout), или sliplogin не сможет их
выполнить.
/etc/sliphome/slip.logout не является совершенно необходимым
(если только вы не реализуете ``ARP прокси''), но если вы решили создать его,
воспользуйтесь следующим примером:
#!/bin/sh -
#
# slip.logout
#
# logout file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 down
Если вы используете ``ARP прокси'', потребуется удаление записи ARP для SLIP клиента
через /etc/sliphome/slip.logout:
#!/bin/sh -
#
# @(#)slip.logout
#
# logout file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 down
# Quit answering ARP requests for the SLIP client
/usr/sbin/arp -d $5
Команда arp -d $5 удаляет запись ARP, добавленную slip.login при входе SLIP клиента.
Повторяем: убедитесь, что на файл /etc/sliphome/slip.logout
установлен бит выполнения (chmod 755
/etc/sliphome/slip.logout).
Если вы не используете ``ARP прокси'' метод для маршрутизации пакетов между SLIP
клиентами и остальной сетью (и возможно интернет), вам возможно потребуется статический
маршрут (маршруты) до ближайшего шлюза (шлюзов) для маршрутизации подсети SLIP клиентов
через SLIP сервер.
Добавление статических маршрутов может стать для кого-то проблемой (это даже
невозможно, если у вас нет соответствующих прав). Если в вашей организации сеть с
несколькими маршрутизаторами, некоторые маршрутизаторы, например Cisco и Proteon, требуют
не только настройки статического маршрута в подсеть SLIP, но и указания, о каких
статических маршрутах сообщать другим маршрутизаторам, так что для наладки
работоспособности статической маршрутизации может потребоваться некоторое исследование и
отладка.
Замечание: GateD®
это закрытое программно обеспечение, более недоступное в исходных текстах (дополнительная
информация находится на вебсайте GateD). Этот раздел существует лишь в целях обратной
совместимости для тех, кто все еще использует старую версию.
Альтернатива головной боли со статическими маршрутами это установка GateD на FreeBSD SLIP сервере и
настройка его для использования соответствующих протоколов маршрутизации
(RIP/OSPF/BGP/EGP) для сообщения другим маршрутизаторам о вашей SLIP подсети. Вам
потребуется создать /etc/gated.conf для настройки gated. Ниже
дан пример:
#
# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5
# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface
#
#
# tracing options
#
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;
rip yes {
interface sl noripout noripin ;
interface ed ripin ripout version 1 ;
traceoptions route ;
} ;
#
# Turn on a bunch of tracing info for the interface to the kernel:
kernel {
traceoptions remnants request routes info interface ;
} ;
#
# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP
#
export proto rip interface ed {
proto direct {
xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
} ;
} ;
#
# Accept routes from RIP via ed Ethernet interfaces
import proto rip interface ed {
all ;
} ;
В примере выше используется широковещательная рассылка информации о маршрутизации для
подсети SLIP xxx.xxx.yy протоколом RIP на сеть Ethernet;
если вы используете другой драйвер Ethernet вместо ed,
потребуется соответственно изменить запись для ed. В этом
примере отладочная информация переправляется в /var/tmp/gated.output; вы можете выключить отладку, если GateD работает. Вам потребуется
заменить xxx.xxx.yy в сетевом адресе на вашу подсеть SLIP
(убедитесь, что изменение сетевой маски в proto direct
работает нормально).
Как только вы установили и настроили GateD, потребуется сообщить стартовым скриптам FreeBSD
запускать его вместо routed. Простейший способ сделать это --
установить переменные router и router_flags в /etc/rc.conf. Обратитесь к
странице справочника GateD за
информацией о параметрах командной строки.
|
|