В качестве примера займемся настройкой статической маршрутизации гипотетической рабочей станции rodent. На рисунке представлена подсеть 172.16.12.0. В подсети существует два шлюза, crab и horseshoe, crab - это шлюз в тысячи сетей Интернета; horseshoe обеспечивает доступ к другим подсетям books-net.

Используем узел crab в качестве шлюза по умолчанию, поскольку через него пролегают тысячи маршрутов. Число маршрутов через узел horseshoe ограничено, их можно создать вручную. Выбор шлюза по умолчанию диктуется именно числом маршрутов, пролегающих через шлюз, а вовсе не объемом трафика. Даже если большая часть трафика с узла rodent уходит через horseshoe к другим узлам books-net, шлюзом по умолчанию должен быть crab.

111
Маршрутизация в подсети

Чтобы создать маршрут по умолчанию на узле rodent, наберите:

  • route add default gw 172.16.12.1

Конечный адрес представлен ключевым словом default, а в качестве адреса шлюза (172.16.12.1) выступает адрес узла crab. Теперь crab является шлюзом по умолчанию для узла rodent. Обратите внимание, что синтаксис команды отличается от описанного в предшествующем примере по route системы Solaris. Система rodent работает под управлением Linux. В Linux большинству аргументов команды route предшествуют ключевые слова. В данном случае адресу шлюза предшествует ключевое слово gw.

Создав маршрут по умолчанию, изучим таблицу маршрутизации, чтобы убедиться, что все в порядке:

  • route -n
Destination Gateway
Genmask
Flags
Metric
Ref
Use
Iface
172.16.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.12.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 172.16.12.1 0.0.0.0 UG 0 0 0 eth0

Снова воспользуемся командой ping, чтобы выяснить, может ли теперь rodent общаться с удаленными узлами. Если нам повезет, удаленный узел ответит, и мы увидим:

  • ping 207.25.98.2

{xtypo_code} PING 207.25.98.2: 56 data bytes
64 bytes from ruby.ora.com (207.25.98.2): icmp_seq=0. time=110. ms
64 bytes from ruby.ora.com (207.25.98.2): icmp_seq=1. time=100. ms
^C
----207.25.98.2 PING Statistics-—
2 packets transmitted, 2 packets received, 0% packet loss
round-trip (ms) min/avg/max = 100/105/110 {/xtypo_code}


Такой вывод свидетельствует об успешном обмене данными с удаленным узлом, то есть у нас теперь есть действующий маршрут в сеть Интернет.

Однако мы еще не создали маршруты к другим сегментам сети books-net. Если мы выполним прозвонку для узла из другой подсети, нас ожидает нечто интересное:

{xtypo_code}% ping 172.16.1.2
PING 172.16.1.2: 56 data bytes
ICHP Host redirect from gateway crab.wrotethebook.com (172.16.12.1)
to horseshoe.wrotethebook.com (172.16.12.3) for ora.wrotethebook.com (172.16.1.2)
64 bytes from ora.wrotethebook.com (172.16.1.2): icmp_seq=1. time=30. ms
^C
----172.16.1.2 PING Statistics-—
1 packets transmitted, 1 packets received, 0% packet loss round-trip (ms) min/avg/
max = 30/30/30{/xtypo_code}

rodent считает, что все пункты назначения достижимы через маршрут по умолчанию. Следовательно, даже данные, предназначенные другим подсетям, передаются через шлюз crab. Если rodent передает узлу crab данные, которые должны пройти через horseshoe, crab отвечает узлу rodent сообщением ICMP Redirect, которое предписывает обращаться к узлу horseshoe. (Сообщение ICMP Redirect описано в главе 1.) Команда ping показывает сообщение ICMP Redirect в действии. Перенаправление непосредственно влияет
на таблицу маршрутизации:

{xtypo_code}# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 172.16.12.1 0.0.0.0 UG 0 0 0 eth0
172.16.1.2 172.16.12.3 255.255.255.0 UGHD 0 0 514 eth0{/xtypo_code}

Маршрут с установленным флагом D был создан сообщением ICMP Redirect.

Некоторые администраторы при проектировании сетей пользуются сообщениями ICMP Redirect. Все узлы настраиваются на работу с маршрутом по умолчанию, даже в сетях с многочисленными шлюзами. Шлюзы обмениваются информацией маршрутизации посредством соответствующих протоколов и перенаправляют узлы к лучшим шлюзам для каждого конкретного маршрута. Такой вид маршрутизации, зависимой от сообщений ICMP Redirect, получил широкое распространение благодаря персональным компьютерам.


Многие персональные компьютеры неспособны работать с протоколами маршрутизации; отдельные ранние модели не имели команды route и были ограничены маршрутом по умолчанию. Сообщения ICMP Redirect оказались подходящим способом поддержки таких клиентов. Кроме того, этот вид маршрутизации прост в настройке и может эффективно претворяться в жизнь при помощи сервера настройки, поскольку каждый узел использует один-единственный маршрут (по умолчанию). По этим причинам некоторые руководители сетей поощряют многочисленные перенаправления ICMP.

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

{xtypo_code}ft route add -net 172.16.1.0 netmask 255.255.255.0 gw 172.16.12.3ft route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.12.3ft route add -net 172.16.3.0 netmask 255.255.255.0 gw 172.16.12.3ft route add -net 172.16.9.0 netmask 255.255.255.0 gw 172.16.12.3{/xtypo_code}

Узел rodent имеет прямое подключение только к подсети 172.16.12.0, поэтому адреса всех шлюзов в таблице маршрутизации начинаются со значения 172.16.12. Вот так выглядит полученная таблица маршрутизации:

{xtypo_code}# route -n
Kernel IP routing table{/xtypo_code}

Создание статической таблицы маршрутизации

{xtypo_code}Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.6.0 172.16.12.3 255.255.255.0 UG 0 0 0 eth0
172.16.3.0 172.16.12.3 255.255.255.0 UG 0 0 0 eth0
172.16.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.1.0 172.16.12.3 255.255.255.0 UG 0 0 0 eth0
172.16.9.0 172.16.12.3 255.255.255.0 UG 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 172.16.12.1 0.0.0.0 UG 0 0 0 eth0
172.16.1.2 172.16.12.3 255.255.255.0 UGHD 0 0 514 eth0{/xtypo_code}

Маршрут по умолчанию (через узел crab) позволяет работать с внешними сетями, а конкретные маршруты (через узел horseshoe) - достигать прочих подсетей в пределах books-net. Повторное выполнение тестов командой ping дает устойчивые положительные результаты. Однако при добавлении новых подсетей придется вручную добавить и соответствующие маршруты в таблицу маршрутизации. Кроме того, при перезагрузке системы все записи статической таблицы маршрутизации будут утрачены. Таким образом, применение статической маршрутизации требует создания маршрутов в процессе загрузки системы.