Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Настройка маршрутизатора IPX

Из нашего короткого обсуждения протоколов, используемых в окружении IPX следует, что IPX маршрутизуемый протокол, а для того, чтобы передать информацию маршрутизации используется Routing Information Protocol (RIP). IPX-версия RIP подобна IP-версии. Они используют тот же самый путь: одни маршрутизаторы периодически передают содержание своих таблиц маршрутов, а другие обучаются у них, слушая и интегрируя информацию, которую они получают. Хост должен знать только то, что является его локальной сетью, и на какую машину передавать пакеты для других сетей. Маршрутизатор ответственен за перенос этих пакетов.

В IPX-среде нужен еще один класс информации. Service Advertisement Protocol (SAP) несет информацию, какие сервисы являются доступными и на каких машинах. Это протокол SAP, который позволяет пользователям получать, например, списки серверов файлов или печати в сети. Протокол SAP работает при наличии компьютеров, которые обеспечивая сервисы, периодически передают список сервисов, которые они предлагают. Сетевые маршрутизаторы IPX собирают эту информацию и передают ее вместе с информацией о маршрутах. Чтобы быть правильным IPX-маршрутизатором, надо обрабатывать информацию RIP и SAP.

Точно так же, как IP, IPX в Linux обеспечивается демоном ipxd, чтобы выполнить задачи, связанные с управлением маршрутизацией. Снова, точно как с IP, это ядро, которое управляет пересылкой пакетов между сетевыми интерфейсами IPX, но выполняет это согласно набору правил, называемых таблицей маршрутизации IPX (IPX routing table). Демон ipxd поддерживает таблицу, слушая на каждом из активных сетевых интерфейсов и анализируя, когда изменение маршрутизации необходимо. Он также отвечает на запросы компьютеров, которые просят о информации маршрутизации.

Команда ipxd доступна в откомпилированном виде в ряде дистрибутивов и в исходниках с anonymous FTP http://metalab.unc.edu (файл /pub/Linux/system/filesystems/ncpfs/ipxripd-x.xx.tgz ).

Никакая конфигурация не является необходимой для ipxd. При запуске он автоматически управляет маршрутизацией IPX устройств, которые были конфигурированы. Вы должны гарантировать, что Ваши IPX-устройства конфигурированы правильно, используя команду ipx_interface прежде, чем запускаете ipxd. Каждые 30 секунд ipxd проверяет присоединенные локально IPX-сети и автоматически управляют ими. Это обеспечивает средства управления сетями на интерфейсах, которые не могут быть активны все время типа интерфейсов PPP.

Обычно ipxd запускается при старте системы из скрипта rc:
# /usr/sbin/ipxd
Символ & не нужен, потому что ipxd перейдет в фоновый режим по умолчанию. В то время как ipxd наиболее полезен на машинах, действующих как IPX маршрутизаторы, он также может пригодиться на сегментах, где есть несколько маршрутизаторов. Когда Вы определяете параметр -p, ipxd будет действовать пассивно: слушать информацию маршрутизации сегмента и модифицировать таблицы маршрутизации, но не будет передавать информацию маршрутизации. Этим путем компьютер может поддерживать таблицы маршрутизации актуальными, не запрашивая маршруты каждый раз, когда требуется входить в контакт с удаленным компьютером.

Статическая IPX-маршрутизация. Использование ipx_route

Имеются случаи, когда мы могли бы поставить жесткий IPX-маршрут. Точно как с IP, мы можем делать это с IPX. Команда ipx_route пишет маршрут в таблицы IPX-маршрутизации. Синтаксис очень прост (IPX не поддерживает множественные подсети):
# ipx_route add 203a41bc 31a10103 00002a02b102

Показанная команда добавила бы маршрут к удаленной IPX-сети 203a41bc через маршрутизатор на нашей локальной сети 31a10103 с узловым адресом 00002a02b102.

Вы можете находить адрес узла маршрутизатора командой tcpdump с параметром -e, чтобы отобразить уровень связи в заголовках и найти трафик от маршрутизатора. Если маршрутизатор Linux-машина, Вы можете просто использовать команду ifconfig, чтобы отобразить это.

Вы можете удалять маршрут, используя команду ipx_route:
# ipx_route del 203a41bc
Вы можете просмотреть список маршрутов, которые являются активными в ядре, просмотром файла /proc/net/ipx_route. Наша таблица маршрутизации пока выглядит следующим образом:
# cat ipx_route
Network    Router_Net   Router_Node
203A41BC   31A10103     00002a02b102
31A10103   Directly     Connected
Маршрут к 31A10103 был автоматически создан, когда мы конфигурировали интерфейс IPX. Каждая из наших локальных сетей будет представляться в /proc/net/ipx_route подобной записью. Естественно, если наша машина должна действовать как маршрутизатор, ей будет нужно по крайней мере два интерфейса.

Внутренние сети IPX и маршрутизация

Компьютеры с несколькими IPX-интерфейсами имеют уникальную комбинацию адресов сеть/узел для каждого из интерфейсов. Чтобы соединяться с таким компьютером, Вы можете использовать любую из этих комбинаций. Когда SAP объявляет сервисы, это обеспечивает адрес сети/узла, связанный с сервисом. На компьютерах с несколькими интерфейсами это означает, что один из интерфейсов должен быть выбран как интерфейс для внесения в таблицы маршрутов, это функция флажка primary интерфейса, о котором мы уже говорили ранее. Но это представляет проблему: маршрут к этому интерфейсу не может всегда быть оптимальным, и если происходит сбой, который изолирует эту сеть от остальной части сети, компьютер станет недостижим даже при том, что имеются другие возможные маршруты к другим интерфейсам. Другие маршруты никогда не будут известны другим компьютерам, потому что они не вносятся в таблицы маршрутов, и ядро не может узнать, что оно должно выбрать другой первичный интерфейс. Чтобы избежать этой проблемы, разработано устройство, которое позволяет IPX-компьютеру быть известным, как независимая от маршрута пара адресов сеть/узел. Это решает нашу проблему потому, что эта новая пара доступна через все интерфейсы.

Рассмотрим сервер, подключенный к двум сетям IPX. Он выбирает один из своих интерфейсов как primary, пусть это будет 0000001a:0800000010aa, и объявляет его точкой доступа для некоего сервиса. Это работает нормально для сети 0000001a, но пользователи сети 0000002c пойдут кружным путем через первую сеть, несмотря на то, что сервер имеет порт и в их сети.

Это решается созданием виртуальной сети, которая является полностью программной конструкцией. Ее лучше рассматривать, как находящуюся внутри IPX-машины. SAP-информация нужна только для распространения адреса этой сети. Такие виртуальные сети известны как внутренние (internal network). Но как другие компьютеры узнают, каким путем достичь этой сети? Удаленные компьютеры направляются к внутренней сети через непосредственно связанные сети главного компьютера. Это означает, что надо смотреть на записи маршрутов, которые обращаются к внутренним сетям машин, имеющих несколько сетевых IPX-интерфейсов. Таким образом, в каждый момент будет выбран оптимальный маршрут. Допустим, мы сконфигурировали внутреннюю IPX-сеть с адресом 0x10000010 и используем адрес хоста 00:00:00:00:00:01. Это тот адрес, который будет нашим первичным интерфейсом. Он будет сообщаться через SAP. Наша маршрутизация отразит эту сеть как доступную через любой из реальных сетевых портов, так что компьютеры будут всегда использовать самый лучший сетевой маршрут, чтобы соединиться с этим сервером.

Для созадния внутренней сети используйте команду ipx_internal_net, входящую в пакет IPX tools (автор Greg Page). Простой пример:
# ipx_internal_net add 10000010 000000000001

Эта команда создаст внутреннюю IPX-сеть с адресом 10000010 и адресом узла 000000000001. Сетевой адрес, точно так же как любой другой сетевой адрес IPX, должен быть уникален в Вашей сети. Адрес узла произвольный, так как будет иметься только один узел в этой сети. Каждый компьютер может иметь только одну внутреннюю сеть IPX (IPX Internal Network), и если она сконфигурирована, то всегда будет первичной (primary) сетью.
Для удаления внутренней сети IPX используйте:
# ipx_internal_net del