Руководство FreeBSD
Пред. | Глава 25. PPP и SLIP | След.

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

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

## 25.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`, так что если вы ее не удаляли, проблем быть не должно.

### 25.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. Перегрузите компьютер и убедитесь, что его имя хоста настроено правильно.

### 25.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`.

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

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

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

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

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

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

### 25.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)

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

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

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

### 25.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` для подключаемых непосредственно последовательных интерфейсов).

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

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

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

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

### 25.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.

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

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

#### 25.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, упомянутым выше (Разд. 25.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.

#### 25.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` не сможет их выполнить.

#### 25.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`).

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

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

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

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

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

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

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

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