Опции настройки IP (IPCP)

IРCP используется для того, чтобы обговорить пару IP-параметров в конфигурационной связи. Обычно каждый может посылать IPCP-запрос конфигурации, указывая которая переменная хочет измениться из значений по умолчанию и к какому значению. После получения удаленный абонент осматривает каждую опцию, подтверждает или отклоняет ее.

pppd дает много возможностей управления, относительно опций IPCP, которые будут пытаться вести переговоры. Вы можете все настроить через различные опции командных строк, которые мы обсудим ниже.

Выбор IP-адресов

Все IP-интерфейсы требуют назначения им IP-адресов. Поэтому устройство PPP тоже должно иметь IP-адрес. Протокол PPP предоставляет механизм, который позволяет автоматически присваивать IP-адреса PPP-интерфейсам.

Некоторые PPP-серверы, которые обрабатывают множество клиентов, приписывают адреса динамически: адреса назначены системам только, когда существует обращение и освобождаются после того, как сеанс связи закончен. Это позволяет ограничить число требуемых адресов числом линий dialup. В то время, как ограничение удобно для администраторов PPP dialup-сервера, оно часто куда менее удобно для пользователей. Мы обсуждали путь, которым имена преобразуются в адреса, в главе 6. Когда происходит соединение с таким сервером, вы должны удостовериться, что pppd не запрашивает какой-либо IP-адрес с него, но когда адрес будет выдан, сервер попросит вас, чтобы вы использовали именно его. Это означает, что если кто-то пытается связаться с вашим компьютером, он должен будет знать его текущий адрес, а обеспечить это не так-то просто.

В примере выше, у нас был pppd, связывающейся с c3po и устанавливающий IP-связь. Никакие условия не принимались для того, чтобы выбрать частный адрес IP на любом конце связи. Взамен мы выбрали адрес vlager как локальный адрес IP и позволили c3po обеспечить себя собственным. Иногда полезно иметь контроль над тем, какой адрес используется на одном или другом конце связи.

Чтобы просить о частных адресах, вы вызываете pppd со следующеми опциями:

local_addr:remote_addr

local_addr и remote_addr могут быть определены в dotted quad notation или как имена машин. Это заставит pppd попытаться использовать первый адрес как собственный адрес IP, а второй как адрес удаленной машины. Если удаленная машина отклоняет любой из них в течение IPCP-переговоров, связь IP не будет установлена.

Если вы звоните на сервер и ожидаете, что он назначит вам IP-адрес, надо гарантировать отсутствие неожиданных инициатив со стороны pppd. Чтобы сделать это, используйте опцию noipdefault и оставьте поле local_addr пустым. Опция noipdefault избавит от попытки pppd использовать адрес IP, связанный с именем машины как локальный адрес.

Если Вы хотите устанавливать только локальный адрес, но удаленный адрес примете любой, просто не указывайте remote_addr . Чтобы vlager использовал IP-адрес 130.83.4.27 вместо своего, укажите 130.83.4.27: в командной строке. Точно так же, чтобы установить только удаленный адрес, оставьте пустым поле local_addr. По умолчанию pppd использует адрес, связанный с вашим именем машины (hostname).

Маршрутизация через PPP-линию

После установки сетевого интерфейса, pppd установит маршрут только к своему серверу. Если удаленный хост находится в локальной сети (LAN), вы обязательно захотите соединяться с хостами в ней, то есть должен быть установлен сетевой маршрут.

Мы уже видели, что pppd можно попросить уствновить заданный по умолчанию маршрут, используя опцию defaultroute. Эта опция очень полезна, если PPP-сервер, с которым вы связались, будет действовать как Internet-шлюз.

Обратный случай является относительно простым: ваша система действует как шлюз для единственного хоста. Например, возьмите некоторых служащих в Virtual Brewery, чья локальная машина называется oneshot. При соединении с vlager через PPP, она использует адрес в подсети Brewery. В vlager мы можем теперь дать pppd опцию proxyarp, которая установит ARP-запись для oneshot. Это автоматически сделает oneshot доступным для всех в Brewery и в Winery.

Однако, вещи далеко не всегда так просты, как иногда кажется, например, когда Вы соединяете две LAN-сети. Это обычно требует добавления специального сетевого маршрута, потому что эти сети могут иметь свой маршрут по умолчанию. Кроме того, если на обоих машинах использование связи PPP задано как маршрут по умолчанию, получится цикл, где блоки к неизвестным адресатам будут перебрасываться между машинами до окончания их времени жизни.

Как пример, предположим, что Virtual Brewery открывает ветвь в каком-нибудь другом городе. Подразделение запускает собственную сеть Ethernet, используя сетевой адрес 172.16.3.0, который является подсетью 3 сети Brewery класса B. Они хотят соединиться с Brewery Ethernet по PPP для того, чтобы модифицировать базы данных заказчиков и т.п. Снова vlager действует как шлюз, другая машина называется vbourbon и имеет IP-адрес 172.16.3.1. Такая сеть показана в приложении A.

Когда vbourbon соединится с vlager, она примет заданный по умолчанию маршрут к vlager как обычно. На vlager мы должны установить сетевой маршрут для подсети 3, который проходит к vbourbon. Для этого мы используем особенность pppd, которая еще не обсуждалась: команду ip-up. Это программа, размещенная в /etc/ppp, которая будет выполнена после того, как PPP интерфейс будет сконфигурирован. Когда он существует, эта программа вызывается со следующими параметрами

ip-up iface device speed local_addr remote_addr

Следующая таблица описывает все параметры этой программы (в первой колонке указаны имена параметров, используемые в скрипте):

Аргумент Имя Описание
$1 iface

Используемый сетевой интерфейс, например ppp0

$2 device

Имя используемого последовательного устройства (если используется stdin/stdout, это будет /dev/tty)

$3 speed

Скорость устройства бит в секунду

$4 local_addr

Локальный адрес IP

$5 remote_addr

Удаленный адрес IP

В нашем случае, скрипт ip-up может содержать следующий фрагмент кода:

#!/bin/sh
case $5 in
172.16.3.1)            # this is vbourbon
        route add -net 172.16.3.0 gw 172.16.3.1;;
...
esac
exit 0

В подобном режиме /etc/ppp/ip-down используется для того, чтобы отменить все действия ip-up после того, как связь PPP была завершена. В нашем скрипте /etc/ppp/ip-down следует иметь команду route, которая отменит маршрут, созданный /etc/ppp/ip-up.

Однако схема матшрутов еще не полна. Мы установили записи таблицы маршрутов на оба PPP-хоста, но пока все другие хосты в обеих сетях не знают ничего относительно связи PPP. Это небольшая проблема, если все хосты в подразделении имеют свои, заданные по умолчанию маршруты в vbourbon, и все хосты в Brewery направляются по умолчанию на vlager. Если это не так, то ваш единственный выход в использованни демона динамической маршрутизации, например,gated. После создания сетевого маршрута на vlager он передаст новый маршрут всем хостам присоединенной подсети.