Статическая маршрутизация в Linux

Преимущества и недостатки статической маршрутизации. Проблема эффективности сетей со статической маршрутизацией

Статическая маршрутизация является одним из способов задания маршрута следования пакетов в сетях. При этом протоколы маршрутизации не используются, а необходимая информация заносится системным администратором вручную в соответствующие таблицы маршрутизации. Использование статической маршрутизации разумно в небольших локальных сетях, где поднятие сервера DHCP для раздачи динамических IP-адресов оказывается более трудоемкой и ресурсозатратной задачей. Статические маршруты обладают преимуществом при передаче данных в каналах с узкой полосой пропускания, например, в аналоговых коммутируемых соединениях (через модем) или соединениях типа «точка-точка», поэтому они могут использоваться для создания резервного канала в случае отказа основного. Степень надежности маршрута определяется значением так называемой административной дистанции. Для статического маршрута оно равно 1, что ставит его на второе место по надежности после прямого соединения источника и получателя. Для того чтобы обеспечить резервный канал, достаточно изменить значение административной дистанции для определенного статического маршрута. Тогда при «падении» основного канала весь трафик заданной сети пойдет через резервный до восстановления основного. Этот вид маршрутизации называется плавающей статической маршрутизацией.

К статическим маршрутам также относится маршрут по умолчанию (default route). Он задается для тех пакетов сети, к которым не подходит ни одно из описанных правил в таблице маршрутизации, и позволяет осуществлять координацию трафика. Зачастую функцию шлюза по умолчанию выполняет центральный маршрутизатор, который связан со всеми остальными узлами и одной-двумя сетями.

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

Встроенные средства создания и настройки маршрутных таблиц в Linux

Для просмотра текущей таблицы маршрутизации на узле с установленной ОС Linux используется команда netstat -r или route$ netstat -r

Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

192.168.10.0 * 255.255.255.0 U 0 0 0 eth0

default 192.168.10.254 0.0.0.0 UG 0 0 0 eth0

В этом примере в таблице маршрутизации присутствуют только две записи. Первая указывает на наличие доступа в подсеть 192.168.10.0. Так как узел принадлежит данной подсети, в использовании шлюза нет необходимости. Согласно второй записи, весь остальной трафик с этого узла перенаправляется на шлюз 192.168.10.254.

Все настройки сетевого интерфейса eth0 (в данном случае единственного) хранятся в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-eth0:

      DEVICE=eth0
      HWADDR=00:1D:60:07:92:28
      IPADDR=192.168.10.14
      NETMASK=255.255.255.0
      BROADCAST=192.168.10.255
      ONBOOT=yes

При добавлении второго сетевого интерфейса eth1 с IP-адресом 192.168.11.4 потребуется изменение конфигурации таблицы маршрутизации при помощи утилиты route2:

      # route add -net 192.168.11.0 netmask 255.255.255.0 dev eth1
      # netstat -r

Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

192.168.10.0 * 255.255.255.0 U 0 0 0 eth0

192.168.11.0 * 255.255.255.0 U 0 0 0 eth1

default 192.168.10.254 0.0.0.0 UG 0 0 0 eth0

Настройки сетевого интерфейса eth1 заносятся в конфигурационный файл /etc/sysconfig/network-scripts/ifcfg-eth1:

      DEVICE=eth1
      HWADDR=00:0A:48:05:7B:DB
      IPADDR=192.168.11.4
      NETMASK=255.255.255.0
      BROADCAST=192.168.11.255
      ONBOOT=yes

Маршрутизатор сети 192.168.11.0 может быть связан с другой подсетью 192.168.12.0. В этом случае при необходимости настраивается так называемый транзитный маршрут, по которому пакеты, приходящие на eth1 с назначением в подсеть 192.168.12.0, будут перенаправлены на шлюз 192.168.11.1:

     # route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.11.1  
     # netstat -r

Kernel IP routing table

Destination Gateway Genmask Flags MSS Window irtt Iface

192.168.10.0 * 255.255.255.0 U 0 0 0 eth0

192.168.11.0 * 255.255.255.0 U 0 0 0 eth1

192.168.12.0 192.168.11.1 255.255.255.0 UG 0 0 0 eth1

default 192.168.10.254 0.0.0.0 UG 0 0 0 eth0

Для того чтобы внесенные изменения сохранились после перезагрузки узла, необходимо создать конфигурационный файл /etc/sysconfig/network-scripts/route-eth1, содержащий запись о транзитном маршруте:

      192.168.12.0/24 via 192.168.11.1

Для корректной работы двух и более сетевых интерфейсов на одном узле также необходимо в файле /etc/sysctl.conf установить значение параметра net.ipv4.ip_forward равным 1. Последним шагом будет перезагрузка сервиса network:

      # /etc/init.d/network restart

Настройка таблицы маршрутизации при помощи пакета iproute. Организация множественных таблиц маршрутизации

Пакет iproute, или iproute2, представляет собой набор утилит для конфигурирования сети и управления трафиком в дистрибутивах GNU/Linux. По сравнению с пакетом net-tools, в состав которого входят утилиты route и ifconfigiproute2 имеет расширенный набор функций. Одной из основных задач, решаемых с его помощью, является конфигурирование таблиц маршрутизации различной степени сложности.

Iproute входит в состав стандартного дистрибутива CentOS, поэтому пакет можно установить в любой момент. Стоит отметить, что для его корректной работы требуется поддержка дополнительных опций маршрутизации (ip_advanced_router) и netfilter_netlink – по умолчанию в ядре 2.6 они включены.

Для создания и редактирования таблиц маршрутизации используется утилита ip route. Она поддерживает все стандартные типы маршрутов – localunicastbroadcastanycast и multicast, а также специальные – nat и throw (последний используется вместе с правилами политики роутинга).

Вывод команды ip route show эквивалентен результату вызова команды netstat -r или route, представленному в несколько другой форме:

      # ip route show
      192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.14
      default via 192.168.10.254 dev eth0

Первая строка описывает маршрут для пакетов узла 192.168.10.14 в пределах локальной сети 192.168.10.0/24. Вторая указывает на шлюз 192.168.10.254, прописанный для интерфейса eth0, по которому перенаправляется весь остальной трафик.

Для добавления, редактирования и удаления маршрута применяются соответствующие команды ip route addip route change/replaceip route delete.

Утилита iproute поддерживает работу с множественными таблицами маршрутизации (в ядре Linux эта возможность существует, начиная с версии 2.2). Их создание обусловлено, в первую очередь, необходимостью реализации политики роутинга для более эффективного распределения трафика, например, при наличии быстрого и медленного каналов связи и различного приоритета узлов в локальной сети. Использование стандартных утилит для решения подобных задач, как правило, оказывается недостаточным в силу ограниченной функциональности.

Таблицы маршрутизации в iproute идентифицируются по номеру (от 1 до 255) или по названию, заданному в /etc/iproute2/rt_tables. Так, по умолчанию при просчитывании маршрутов ядро обращается к таблице main (ID 254), при этом данные о локальных и широковещательных адресах хранятся в отдельной таблице local (ID 255), которая имеет самый высокий приоритет и обновляется автоматически. Помимо организации стандартной маршрутизации есть возможность создавать собственные правила и таблицы для более сложного роутинга в связке с iptables, включающего, например, маршрутизацию маркированных пакетов, туннелирование, балансировку нагрузки и т.д.

Пример 1. Создание таблицы для маршрутизации пакетов с определенного IP-адреса

Локальная сеть 192.168.10.0/24 имеет выход в Интернет с двух разных провайдеров – по выделенной линии (быстрый канал) и модемному соединению (медленный канал). На маршрутизаторе М1 интерфейс eth0 (локальная сеть) имеет IP-адрес 192.168.10.1, интерфейс eth1 (выделенная линия) – IP-адрес 24.19.12.45 и шлюз 24.19.12.1, интерфейс ppp0 (модемное соединение) – IP-адрес 142.154.64.7 и шлюз 142.154.64.1. По умолчанию все пакеты сети 192.168.10.0/24 должны получать доступ в Интернет через выделенную линию, а узел 192.168.10.7 – через медленное модемное соединение. Таблица main для М1, отправляющая все пакеты сети 192.168.10.0/24 на выделенную линию, будет выглядеть следующим образом:

      # ip route list table main
      24.19.12.1 dev eth1  proto kernel  scope link  src 24.19.12.45  
      142.154.64.1 dev ppp0  proto kernel  scope link  src 142.154.64.7 
      192.168.10.0/24 dev eth0 proto kernel  scope link  src 192.168.10.1 
      127.0.0.0/8 dev lo scope link 
      default via 24.19.12.1 dev eth1

Для того чтобы задать перенаправление пакетов с IP-адреса 192.168.10.7 на медленное модемное соединение, необходимо создать новую таблицу modem_connection:

      # echo 210 modem_connection >> /etc/iproute2/rt_tables

После этого задается новое правило: для всех пакетов, приходящих с IP-адреса 192.168.10.7, перенаправление будет осуществляться согласно таблице modem_connection:

      # ip rule add from 192.168.10.7 table modem_connection
      # ip rule ls
      0:          from all lookup local 
      32765:  from 192.168.10.7 lookup modem_connection
      32766:  from all lookup main 
      32767:  from all lookup default

Наконец, последним шагом будет прописывание правила для новой таблицы и очистка кэша маршрутов для вступления в силу сделанных изменений:

     # ip route add default via 142.154.64.7 dev ppp0 table modem_connection
     # ip route flush cache

Пример 2. Добавление правила балансировки нагрузки для двух сетей

Принимая во внимание начальные параметры из предыдущего примера, изменим условие так, что по умолчанию все пакеты сети 192.168.10.0/24 получают доступ в Интернет через выделенную линию либо через ADSL-соединение (оба канала быстрые). Весь трафик, приходящий из этой сети, должен распределяться по двум каналам в пропорции 2:1.

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

      # ip route del default
      # ip route add default scope global
              nexthop via 24.19.12.1 dev eth1 weight 2
              nexthop via 142.154.64.1 dev ppp0 weight 1

Следует учитывать, что реализованная в данном примере балансировка не идеальна, так как маршруты имеют свойство кэшироваться. Для более эффективного распределения трафика следует использовать маркированные пакеты (опция fwmark) в сочетании с соответствующими настройками iptables.

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

Вследствие того, что статические маршруты требуют ручной конфигурации, каждый раз при изменении топологии сети или других факторов важным моментом является наличие средств мониторинга сети для своевременного выявления неработающих узлов или шлюзов. Как правило, возможностей стандартных утилит ping (проверка соединения с узлом), ifconfig, traceroute (трассировка маршрутов следования до узла – по умолчанию в пределах 30 “прыжков”), route и netstat, входящих в состав любого дистрибутива GNU/Linux, оказывается достаточно для диагностики проблемы. Одной из полезных утилит, служащих для анализа сетевого трафика и отладки сетевой конфигурации, также является tcpdump. Для графического отображения трассировки к хостам используется утилита tracemap3, написанная на Perl. С ее помощью можно строить графические карты для нескольких удаленных узлов, например, отдельной филиальной сети.

Заключение

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

 

Источник.