24.7. Использование SLIP
Пред. | Глава 24. PPP и SLIP | След.

## 24.7. Использование SLIP

Первоначально предоставил Satoshi Asami.
Дополнительный материал предоставили Guy Helmer Piero Serini.

### 24.7.1. Настройка SLIP клиента

Ниже дан один из способов настройки FreeBSD для подключения к SLIP сети со статическим адресом. Для динамического подключения (адрес изменяется при каждом дозвоне) возможно потребуется более сложная настройка.

Сначала определите, к какому последовательному порту подключен модем. Многие создают символическую ссылку, такую как `/dev/modem`, на настоящий файл устройства, `/dev/cuaaN`. Это позволяет абстрагироваться от имени файла устройства, например если вы переносите модем на другой порт. Довольно сложно править множество файлов в `/etc` и `.kermrc` во всей системе!

### Примечание:

`/dev/cuaa0` это `COM1`, `cuaa1` это `COM2`, и т.д.

Убедитесь, что в вашем файле настройки ядра присутствует строка:

pseudo-device sl 1

В FreeBSD 5.X, используйте вместо этой строки следующую:

device sl

Эта строка включена в ядро `GENERIC`, так что если вы ее не удаляли, проблем быть не должно.

#### 24.7.1.1. То, что необходимо сделать только один раз

1. Добавьте ваш компьютер, шлюз и сервера имен в файл `/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

2. Убедитесь, что в файле `/etc/host.conf` `hosts` находится перед `bind` (для FreeBSD версий до 5.0). Начиная с FreeBSD 5.0, система использует файл `/etc/nsswitch.conf`, убедитесь, что параметр `files` находится перед `dns` в строке `hosts` этого файла. Без этого параметра могут происходить странные вещи.

3. Отредактируйте файл `/etc/rc.conf`.

   1. Установите имя хоста, настроив переменную hostname:

      hostname="myname.my.domain"

      Здесь необходимо использовать полное доменное имя вашего компьютера в интернет.

   2. Добавьте `sl0` к списку сетевых интерфейсов, изменив переменную:

      network_interfaces="lo0"

      на:

      network_interfaces="lo0 sl0"

   3. Измените параметры `sl0`, добавив строку:

      ifconfig_sl0="inet ${hostname} slip-gateway netmask 0xffffff00 up"

   4. Назначьте маршрутизатор по умолчанию, изменив строку:

      defaultrouter="NO"

      на:

      defaultrouter="slip-gateway"

4. Создайте файл `/etc/resolv.conf`, содержащий:

   domain CS.Example.EDU nameserver 128.32.136.9 nameserver 128.32.136.12

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

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

#### 24.7.1.2. Создание SLIP соединения

1. Дозвонитесь на удаленный сервер, введите `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.

   ### Примечание:

   Хранение пароля в любом месте файловой системы в незашифрованном виде это обычно плохая идея. Вы делаете это на свой риск.

2. Выйдите из kermit (вы можете приостановить его, нажав Ctrl+z) и введите под `root`:

   `#` `slattach -h -c -s 115200 /dev/modem`

   Если вы сможете выполнить `ping` для хостов по другую сторону маршрутизатора, вы подключились! Если это не работает, попробуйте параметр `slattach` `-a` вместо `-c`.

#### 24.7.1.3. Как прервать соединение:

Сделайте следующее:

`#` `kill -INT `cat /var/run/slattach.modem.pid``

для остановки `slattach`. Помните, что вы должны работать под `root` для выполнения этой команды. Затем вернитесь в kermit (запустив `fg`, если он приостановлен) и выйдите из него (`q`).

Страница справочника `slattach` сообщает, что для отключения интерфейса необходимо использовать `ifconfig sl0 down`, но это похоже не играет никакой роли. (`ifconfig sl0` сообщает о том же.)

Иногда модем может не сбросить соединение (это бывает довольно часто). В этом случае просто запустите kermit и выйдите из него еще раз. При второй попытке соединение обычно разрывается.

#### 24.7.1.4. Решение проблем

Вот наиболее часто встречающиеся ситуации:

- Не используются параметры `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)

  Предыдущий пример получен на относительно загруженной системе. Числа в вашей системе будут сильно зависеть от загрузки сети.

### 24.7.2. Настройка SLIP сервера

Этот документ предоставляет решение для настройки SLIP сервера в системе FreeBSD, что обычно означает настройку системы для автоматического запуска соединений при удаленном входе SLIP клиентов.

#### 24.7.2.1. Предварительные требования

Информация в этом разделе чисто техническая, поэтому требуются некоторые предварительные знания. Предполагается, что вы знакомы с сетевым протоколом 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` для подключаемых непосредственно последовательных интерфейсов).

#### 24.7.2.2. Краткий обзор

В типичной конфигурации FreeBSD работает в качестве SLIP сервера так: пользователь SLIP дозванивается на FreeBSD SLIP сервер и входит в систему со специальным SLIP логином, использующим `/usr/sbin/sliplogin` в качестве оболочки. Программа `sliplogin` просматривает файл `/etc/sliphome/slip.hosts` на предмет строки, соответствующей специальному пользователю, и если находит совпадение, подключает последовательную линию к доступному SLIP интерфейсу, а затем запускает shell скрипт `/etc/sliphome/slip.login` для настройки SLIP интерфейса.

##### 24.7.2.2.1. Пример входа на 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` и куда помещается информация).

Достаточно примеров — давайте начнем настройку системы.

#### 24.7.2.3. Настройка ядра

Стандартное ядро 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 соединений.

Обратитесь к Глава 9, Настройка ядра FreeBSD за информацией по настройке ядра FreeBSD.

#### 24.7.2.4. Настройка sliplogin

Как упоминалось ранее, в каталоге `/etc/sliphome` находятся три файла, являющиеся частью настройки для `/usr/sbin/sliplogin` (для `sliplogin` существует страница справочника, sliplogin(8)): `slip.hosts`, определяющий список пользователей SLIP и связанные с ними IP адреса; `slip.login`, который обычно всего лишь настраивает SLIP интерфейс; `slip.logout`, который восстанавливает состояние системы до запуска `slip.login` после завершения последовательного соединения.

##### 24.7.2.4.1. Настройка `slip.hosts`

`/etc/sliphome/slip.hosts` содержит строки, в которых находится как минимум четыре параметра, разделенных пробелами:

- ID пользователя SLIP

- Локальный адрес (локальный для SLIP сервера) SLIP соединения

- Удаленный адрес SLIP соединения

- Сетевая маска

Локальные и удаленные адреса могут быть именами хостов (разрешаемыми в 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, упомянутым выше (Раздел 24.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.

##### 24.7.2.4.2. Настройка `slip.login`

Типичный файл `/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` не сможет их выполнить.

##### 24.7.2.4.3. Настройка `slip.logout`

`/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`).

#### 24.7.2.5. Соглашения о маршрутизации

Если вы не используете «ARP прокси» метод для маршрутизации пакетов между SLIP клиентами и остальной сетью (и возможно интернет), вам возможно потребуется статический маршрут (маршруты) до ближайшего шлюза (шлюзов) для маршрутизации подсети SLIP клиентов через SLIP сервер.

##### 24.7.2.5.1. Статические маршруты

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

##### 24.7.2.5.2. Запуск GateD®

### Примечание:

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® за информацией о параметрах командной строки.

Пред. | Наверх | След.
24.6. Использование PPP через ATM (PPPoA) | Начало | Глава 25. Электронная почта

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.