Ip route: Роутинг и policy-routing в Linux при помощи iproute2 / Хабр

Содержание

Роутинг и policy-routing в Linux при помощи iproute2 / Хабр

Речь в статье пойдет о роутинге сетевых пакетов в Linux. А конкретно – о типе роутинга под названием policy-routing (роутинг на основании политик). Этот тип роутинга позволяет маршрутизировать пакеты на основании ряда достаточно гибких правил, в отличие от классического механизма маршрутизации destination-routing (роутинг на основании адреса назначения). Policy-routing применяется в случае наличия нескольких сетевых интерфейсов и необходимости отправлять определенные пакеты на определенный интерфейс, причем пакеты определяются не по адресу назначения или не только по адресу назначения. Например, policy-routing может использоваться для: балансировки трафика между несколькими внешними каналами (аплинками), обеспечения доступа к серверу в случае нескольких аплинков, при необходимости отправлять пакеты с разных внутренних адресов через разные внешние интерфейсы, даже для отправки пакетов на разные TCP-порты через разные интерфейсы и т.д.
Для управления сетевыми интерфейсами, маршрутизацией и шейпированием в Linux служит пакет утилит iproute2.

Этот набор утилит лишь задает настройки, реально вся работа выполняется ядром Linux. Для поддержки ядром policy-routing оно должно быть собрано с включенными опциями
IP: advanced router
(CONFIG_IP_ADVANCED_ROUTER) и IP: policy routing (CONFIG_IP_MULTIPLE_TABLES), находящимися в разделе Networking support -> Networking options -> TCP/IP networking.
ip route

Для настройки роутинга служит команда ip route. Выполненная без параметров, она покажет список текущих правил маршрутизации (не все правила, об этом чуть позже):
# ip route
192.168.12.0/24 dev eth0  proto kernel  scope link  src 192.168.12.101
default via 192.168.12.1 dev eth0

Так будет выглядеть роутинг при использовании на интерфейсе eth0 IP-адреса 192.168.12.101 с маской подсети 255.255.255.0 и шлюзом по умолчанию 192.168.12.1.
Мы видим, что трафик на подсеть 192.168.12.0/24 уходит через интерфейс eth0.
proto kernel
означает, что роутинг был задан ядром автоматически при задании IP интерфейса. scope link означает, что эта запись является действительной только для этого интерфейса (eth0). src 192.168.12.101 задает IP-адрес отправителя для пакетов, попадающих под это правило роутинга.
Трафик на любые другие хосты, не попадающие в подсеть 192.168.12.0/24 будет уходить на шлюз 192.168.12.1 через интерфейс eth0 (default via 192.168.12.1 dev eth0). Кстати, при отправке пакетов на шлюз, IP-адрес назначения не изменяется, просто в Ethernet-фрейме в качестве MAC-адреса получателя будет указан MAC-адрес шлюза (часто даже специалисты со стажем путаются в этом моменте). Шлюз в свою очередь меняет IP-адрес отправителя, если используется NAT, либо просто отправляет пакет дальше. В данном случае используются приватный адрес (192.168.12.101), так что шлюз скорее всего делает NAT.
А теперь залезем в роутинг поглубже. На самом деле, таблиц маршрутизации несколько, а также можно создавать свои таблицы маршрутизации. Изначально предопределены таблицы local, main и default. В таблицу local ядро заносит записи для локальных IP адресов (чтобы трафик на эти IP-адреса оставался локальным и не пытался уходить во внешнюю сеть), а также для бродкастов. Таблица main является основной и именно она используется, если в команде не указано какую таблицу использовать (т.е. выше мы видели именно таблицу main). Таблица default изначально пуста. Давайте бегло взглянем на содержимое таблицы local:
# ip route show table local
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.12.255 dev eth0  proto kernel  scope link  src 192.168.12.101
broadcast 192.168.12.0 dev eth0  proto kernel  scope link  src 192.168.12.101
local 192.168.12.101 dev eth0  proto kernel  scope host  src 192.168.12.101
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1

broadcast и local определяют типы записей (выше мы рассматривали тип default). Тип broadcast означает, что пакеты соответствующие этой записи будут отправлены как broadcast-пакеты, в соответствии с настройками интерфейса. local – пакеты будут отправлены локально. scope host указывает, что эта запись действительная только для этого хоста.
Для просмотра содержимого конкретной таблицы используется команда ip route show table TABLE_NAME. Для просмотра содержимого всех таблиц в качестве
TABLE_NAME
следует указывать all, unspec или 0. Все таблицы на самом деле имеют цифровые идентификаторы, их символьные имена задаются в файле /etc/iproute2/rt_tables и используются лишь для удобства.
ip rule

Как же ядро выбирает, в какую таблицу отправлять пакеты? Все логично – для этого есть правила. В нашем случае:
# ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Число в начале строки – идентификатор правила, from all – условие, означает пакеты с любых адресов, lookup указывает в какую таблицу направлять пакет. Если пакет подпадает под несколько правил, то он проходит их все по порядку возрастания идентификатора. Конечно, если пакет подпадет под какую-либо запись маршрутизации, то последующие записи маршрутизации и последующие правила он уже проходить не будет.
Возможные условия:
  • from – мы уже рассматривали выше, это проверка отправителя пакета.
  • to – получатель пакета.
  • iif – имя интерфейса, на который пришел пакет.
  • oif – имя интерфейса, с которого уходит пакет. Это условие действует только для пакетов, исходящих из локальных сокетов, привязанных к конкретному интерфейсу.
  • tos – значение поля TOS IP-пакета.
  • fwmark – проверка значения FWMARK пакета. Это условие дает потрясающую гибкость правил. При помощи правил iptables можно отфильтровать пакеты по огромному количеству признаков и установить определенные значения FWMARK. А затем эти значения учитывать при роутинге.

Условия можно комбинировать, например from 192.168.1.0/24 to 10.0.0.0/8, а также можно использовать префикc
not
, который указывает, что пакет не должен соответствовать условию, чтобы подпадать под это правило.
Итак, мы разобрались что такое таблицы маршрутизации и правила маршрутизации. А создание собственных таблиц и правил маршрутизации это и есть policy-routing, он же PBR (policy based routing). Кстати SBR (source based routing) или source-routing в Linux является частным случаем policy-routing, это использование условия from в правиле маршрутизации.
Простой пример

Теперь рассмотрим простой пример. У нас есть некий шлюз, на него приходят пакеты с IP 192.168.1.20. Пакеты с этого IP нужно отправлять на шлюз 10.1.0.1. Чтобы это реализовать делаем следующее:
Создаем таблицу с единственным правилом:
# ip route add default via 10.1.0.1 table 120

Создаем правило, отправляющее нужные пакеты в нужную таблицу:
# ip rule add from 192.168.1.20 table 120

Как видите, все просто.
Доступность сервера через несколько аплинков

Теперь более реалистичный пример. Имеется два аплинка до двух провайдеров, необходимо обеспечить доступность сервера с обоих каналов:

В качестве маршрута по умолчанию используется один из провайдеров, не важно какой. При этом веб-сервер будет доступен только через сеть этого провайдера. Запросы через сеть другого провайдера приходить будут, но ответные пакеты будут уходить на шлюз по умолчанию и ничего из этого не выйдет.
Решается это весьма просто:
Определяем таблицы:
# ip route add default via 11.22.33.1 table 101
# ip route add default via 55.66.77.1 table 102

Определяем правила:
# ip rule add from 11.22.33.44 table 101
# ip rule add from 55.66.77.88 table 102

Думаю теперь уже объяснять смысл этих строк не надо. Аналогичным образом можно сделать доступность сервера по более чем двум аплинкам.
Балансировка трафика между аплинками

Делается одной элегантной командой:
# ip route replace default scope global \
  nexthop via 11.22.33.1 dev eth0 weight 1 \
  nexthop via 55.66.77.1 dev eth2 weight 1

Эта запись заменит существующий default-роутинг в таблице main. При этом маршрут будет выбираться в зависимости от веса шлюза (weight). Например, при указании весов 7 и 3, через первый шлюз будет уходить 70% соединений, а через второй – 30%. Есть один момент, который при этом надо учитывать: ядро кэширует маршруты, и маршрут для какого-либо хоста через определенный шлюз будет висеть в таблице еще некоторое время после последнего обращения к этой записи. А маршрут до часто используемых хостов может не успевать сбрасываться и будет все время обновляться в кэше, оставаясь на одном и том же шлюзе. Если это проблема, то можно иногда очищать кэш вручную командой 
ip route flush cache
.
Использование маркировки пакетов при помощи iptables

Допустим нам нужно, чтобы пакеты на 80 порт уходили только через 11.22.33.1. Для этого делаем следующее:
# iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 80 -j MARK --set-mark 0x2

# ip route add default via 11.22.33.1 dev eth0 table 102

# ip rule add fwmark 0x2/0x2 lookup 102

Первой командой маркируем все пакеты, идущие на 80 порт. Второй командой создаем таблицу маршрутизации. Третьей командой заворачиваем все пакеты с указанной маркировкой в нужную таблицу.
Опять же все просто. Рассмотрим также использование модуля iptables CONNMARK. Он позволяет отслеживать и маркировать все пакеты, относящиеся к определенному соединению. Например, можно маркировать пакеты по определенному признаку еще в цепочке
INPUT
, а затем автоматически маркировать пакеты, относящиеся к этим соединениям и в цепочке OUTPUT. Используется он так:
# iptables -t mangle -A INPUT -i eth0 -j CONNMARK --set-mark 0x2
# iptables -t mangle -A INPUT -i eth2 -j CONNMARK --set-mark 0x4
# iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark

Пакеты, приходящие с eth0 маркируются 2, а с eth2 – 4 (строки 1 и 2). Правило на третьей строке проверяет принадлежность пакета к тому или иному соединению и восстанавливает маркировки (которые были заданы для входящих) для исходящих пакетов.
Надеюсь изложенный материал поможет вам оценить всю гибкость роутинга в Linux. Спасибо за внимание 🙂

Утилита ip Linux | Losst

Сегодня я хочу поговорить о настройке сети в Linux и, в частности, об универсальной консольной утилите — ip. В давних инструкциях, да что там в давних, в новых тоже мы очень часто встречаем утилиты ifconfig, arp, route. Но они уже в прошлом, они устарели еще начиная с версии ядра 2.2. Утилита ip объединяет в себе возможности всех этих и нескольких других команд для управления сетью в Linux.

Утилита ip поставляется во всех дистрибутивах по умолчанию, и хотя ее предшественники тоже пока что доступны, будущее за ip, а поэтому давайте разберемся как ею пользоваться и что с помощью нее можно настроить.

Как вы поняли, в этой инструкции мы рассмотрим как использовать утилиту ip для настройки сети в Linux. Эта утилита позволит делать вам даже больше чем все те, функциональность которых она поглотила. Например, здесь вы сможете не только смотреть свойства подключения, установить ip адрес и смотреть arp таблицу, но и настроить политики маршрутизации, управлять arp таблицами, а также настраивать специфичные параметры стека TCP/IP, например, ширину окна. Конечно, учитывая такое количество функций, она сложна в освоении, но оно того стоит.

Содержание статьи:

Синтаксис

Сначала рассмотрим синтаксис команды:

ip [опции] объект команда [параметры]

опции — это глобальные настройки, которые сказываются на работе всей утилиты независимо от других аргументов, их указывать необязательно.

  • объект — объект или устройство, с которым будем работать или о котором будем узнавать информацию.
  • команды — какое-либо действие с объектом.
  • параметры — само собой, командам иногда нужно передавать параметры, они передаются в этом пункте.

Дальше рассмотрим все еще более подробно.

Опции

Поддерживаются такие опции для настройки сети в lInux:

  • -v — только вывод информации об утилите и ее версии
  • -s — включает вывод статистической информации
  • -f — позволяет указать протокол, с которым нужно работать, если протокол не указан, то берется на основе параметров команды. Опция f должна принимать одно из значений: bridge, dnet, inet, inet6, ipx или link. По умолчанию используется inet, link — означает отсутствие протокола.
  • -o — выводить каждую запись с новой строки
  • -r — выполнять резолвинг и выводить символические имена хостов
  • Все остальные опции — ярлыки опции -f:
  • -4 — ярлык для -f inet
  • -6 — -f inet6
  • -B — -f bridge
  • -0 — -f link

Объекты

Теперь давайте рассмотрим самые важные объекты.

  • address — сетевой адрес на устройстве
  • link— физическое сетевое устройство
  • monitor — мониторинг состояния устройств
  • neigh — ARP
  • route — управление маршрутизацией
  • rule — правила маршрутизации
  • tunnel — настройка туннелирования

Конечно, это не все объекты которые поддерживает команда ip linux, но на первое время вам хватит. Во время ввода имя объекта может быть сокращено до одной буквы. При неоднозначности используется алфавитный порядок. Например, ip a show, расшифровывается как ip address show. Тогда как в ip r show, r — означает route.

Команды

Теперь рассмотрим доступные команды, с помощью которых может быть выполнена настройка сети linux. Вот они: add, change, del или delete, flush, get, list или show, monitor, replace, restore, save, set, и update.

Если команда не задана, по умолчанию используется show (показать).

Здесь тоже поддерживается сокращение и в большинстве случаев для выполнения нужного действия достаточно нескольких символов. Но алфавитный порядок соблюдается не всегда. Например, ip a s, означает ip address show, а не ip address set, к сожалению.

Параметры

Параметры зависят от объекта и указанной команды. Рассмотрим самые основные:

  • dev имя_устройства — сетевое устройство;
  • up — включить;
  • down — выключить;
  • lladdr — MAC — адрес;
  • initcwnd — размер окна перегрузки TCP при инициализации;
  • window — размер окна TCP;
  • cwnd — размер окна перегрузки TCP;
  • type — тип;
  • via — подключиться к роутеру;
  • default — маршрут по умолчанию;
  • blackhole — маршрут «черная дыра» — отбрасывать пакеты и не посылать ICMP сообщения о недоступности;
  • prohibit — маршрут «запрета» — отбрасывать пакеты и возвращать ICMP сообщения о запрете доступа;
  • unreachable — маршрут «недостижимый» — отбрасывать пакеты и посылать ICMP пакеты о недостижимости узла.

Примеры использования

Вот теперь мы дошли к самому интересному — примерам использования утилиты ip Linux. То что я здесь опишу на самом деле лишь маленькая капля из всего того что может утилита ip. Для удобства все команды отсортированы по объектам, к которым они применяются.

ip link

Утилита ip в Linux с параметром linux позволяет управлять состоянием сетевых интерфейсов и просматривать информацию о них.

  • ip link show — отобразить состояние всех сетевых интерфейсов
  • ip l sh — то же самое
  • ip ll — то же самое
  • ip l — то же самое
  • ip link show eth0 — отобразить состояние eth0
  • ip link list up — отобразить статус всех включенных интерфейсов
  • ip link set eth2 up — включить eth2
  • ip link set eth2 down выключить eth2

ip neigbour

Объект neigbour используется для управления ARP таблицами.

  • ip neigh show — показать все записи ARP
  • ip n sh — то же самое
  • ip n l — то же самое
  • ip n — то же самое
  • ip neigh show dev eth0 — посмотреть все ARP записи для eth0
  • ip neigh flush — удалить все ARP записи
  • ip ne fl dev eth0 — удалить все ARP записи для eth0
  • ip nei add 1.1.1.13 lladdr AA:BB:CC:DD:EE:FF dev eth0 — добавить ARP запись для определенного IP адреса.
  • ip n del 1.1.1.13 dev eth0 — удалить все записи для указанного адреса

ip address

Важно заметить, что вторичные ip адреса не используются в качестве исходящих адресов для отправки пакетов.

  • ip address show — показать все ip адреса и их интерфейсы
  • ip a sh — то же самое
  • ip a list — то же самое
  • ip a — то же самое
  • ip a l permanent — отобразить только статические ip адреса
  • ip a l dynamic — отобразить только динамические ip адреса
  • ip addr add 1.1.1.13/24 dev eth0 — установить ip адрес для интерфейса eth0
  • ip addr del 1.1.1.13/24 dev eth0 — удалить ip адрес интерфейса eth0
  • ip add flush dev eth0 — удалить все ip адреса интерфейса eth0

ip route

Утилита ip в Linux позволяет не только устанавливать ip адреса, но и настраивать маршруты. По умолчанию в Linux используется таблица маршрутизации 254, вы также можете иметь дело с таблицей 255, которую не следует изменять, а также 253, в которой хранятся маршруты по умолчанию.

  • ip r sh показать все маршруты в таблице маршрутизации
  • ip route show table nnn — отобразить все маршруты из таблицы 255
  • ip route get 10.10.20.0/24 — отобразить маршрут к этой сети
  • ip route get 10.10.20.0/24 from 192.168.12.9 — отобразить маршрут к этой сети от указного интерфейса.
  • ip route add 10.10.20.0/24 via 192.168.50.100 — создать маршрут
  • ip route delete 10.10.20.0/24 — удалить маршрут.
  • ip route del 10.10.20.0/24 via 192.168.50.100 — удалить маршрут.
  • ip route add default via 192.168.50.100 — создать маршрут по умолчанию.
  • ip route add 10.10.20.0/24 dev eth0 — создать маршрут к указной сети.
  • ip route add table nnn 10.10.20.0/24 dev eth0 — создать маршрут в специальной таблице роутинга.
  • ip route add blackhole 10.10.20.0/24 dev eth0 — создать blackhole маршрут.
  • ip route add unreachable 10.10.20.0/24 dev eth0 — создать unreachable маршрут.

Вот и все, возможно, в будущем этот список будет пополняться. Надеюсь, утилита ip Linux уже не кажется такой непонятной. Если у вас есть вопросы или хотите предложить еще несколько команд, пишите комментарии!

Перевод: http://packetpushers.net/linux-ip-command-ostensive-definition/

Оцените статью:

Загрузка…

Настройка нескольких таблиц маршрутизации на одном сервере

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

Общий принцип настройки для всех систем один, мы рассматриваем настройку на примере Ubuntu.

Предположим, у нас есть сервер с двумя физическими интерфейсами — eth0 и eth2. На каждый из них добавлено по ip-адресу. Это могут быть как адреса из одного broadcast домена (к примеру, 10.10.10.2/30 и 10.10.10.3/30), так и из разных. В данном примере рассматривается второй случай, но принципиальной разницы нет:

 

Вывод команды ip address (просмотр сетевых параметров, сконфигурированных на интерфейсах сервера) для каждого из интерфейсов:


# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:30:48:f9:c8:02 brd ff:ff:ff:ff:ff:ff
inet 10.10.1.2/24 brd 10.10.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::230:48ff:fef9:c802/64 scope link
valid_lft forever preferred_lft forever

# ip address show eth2
3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:30:48:f9:c8:03 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.2/24 brd 172.16.1.255 scope global eth2
valid_lft forever preferred_lft forever
inet6 fe80::230:48ff:fef9:c803/64 scope link
valid_lft forever preferred_lft forever

Маршруты на сервере:


# ip route ls
default via 10.10.1.1 dev eth0
10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.2
172.16.1.0/24 dev eth2 proto kernel scope link src 172.16.1.2

Default маршрут настроен через интерфейс eth0 шлюз 10.10.1.1: 


default via 10.10.1.1 dev eth0

Это значит, что все ответные пакеты с данными будут отправляться через этот интерфейс eth0 и с source адресом 10.10.1.2. К примеру, если с такой конфигурацией сделать попытку подключиться по ssh к серверу по адресу 172.16.1.2, назначенному на eth2, сервер попытается ответить через eth0, и соединение не будет установлено, т.к. даже если разрешен проброс пакетов между интерфейсами, ответ будет отправлен не с тем source адресом:

 

Чтобы заставить сервер отвечать с того же интерфейса, куда прилетел пакет, несмотря на default route, можно настроить несколько таблиц маршрутизации. Мы рассматриваем пример с настройкой двух дополнительных таблиц, но их количество может быть больше.

По умолчанию на сервере всегда присутствуют три стандартные таблицы:


# ip rule ls
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

Это таблицы local, main и default. Таблицы создаются в файле /etc/iproute2/rt_tables. Просмотреть содержимое конфигурационного файла можно командой:


# cat /etc/iproute2/rt_tables

Результат выполнения команды:


#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep

Т.е. для создания новых таблиц (назовем их table1 и table2), “привязанных” к eth0 и eth2 соответственно, добавляем в этот файл следующее:


# echo 100  table1 >> /etc/iproute2/rt_tables
# echo 101 table2 >> /etc/iproute2/rt_tables

Номер таблицы (100 и 101) нужно брать в диапазоне [2; 252]. В таком случае приоритет таблиц будет меньше, чем у таблиц main и default, и поиск маршрутов будет производиться сначала в таблицах table1 и table2. Итак, проверим, что таблицы созданы:


# cat /etc/iproute2/rt_tables

Результат выполнения команды:


#
# reserved values
#
255    local
254    main
253    default
0    unspec
#
# local
#
#1    inr.ruhep
100 table1
101 table2

Но в правилах они пока не отображены:


# ip rule ls
0:    from all lookup local
32766:    from all lookup main
32767:    from all lookup default

Добавляем правила и default маршруты для каждой из таблиц:


# ip rule add from 10.10.1.2 table table1
# ip route add default via 10.10.1.1 dev eth0 table table1
# ip rule add from 172.16.1.2 table table2
# ip route add default via 172.16.1.1 dev eth2 table table2

Проверяем:


# ip rule ls
0:    from all lookup local
32764:    from 10.10.1.2 lookup table1
32765:    from 172.16.1.2 lookup table2
32766:    from all lookup main
32767:    from all lookup default

При создании правила используем интересующий нас адрес, добавленный на интерфейс сервера, например, для интерфейса eth0 используется адрес 10.10.1.2, при добавлении default маршрута прописываем адрес шлюза сети (в примере выше для 10.10.1.2/24 это 10.10.1.1) и интерфейс, через который отправлять пакет.

Теперь при обращении к адресу 10.10.1.2 сервер будет отвечать через интерфейс eth0 с source адресом 10.10.1.2, а при обращении к 172.16.1.2, соответственно, через интерфейс eth2 с source адресом 172.16.1.2:

При этом для исходящих соединений с сервера ничего не изменится, они будут идти по общему default маршруту, взятому из основной таблицы main.

Для просмотра маршрутов, содержащихся в определенной таблице,к команде ip route show добавляется table table_name:


# ip route show table table1
default via 10.10.1.1 dev eth0
# ip route show table table2
default via 172.16.1.1 dev eth2

Аналогичные настройки двух таблиц могут быть выполнены и если адреса назначены на одном интерфейсе. Например, если на сервере только один интерфейс eth0:


# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:30:48:f9:c8:02 brd ff:ff:ff:ff:ff:ff
inet 10.10.1.2/24 brd 10.10.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.16.1.2/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::230:48ff:fef9:c802/64 scope link
valid_lft forever preferred_lft forever

Это будет выглядеть следующим образом:


# ip rule add from 10.10.1.2 table table1
# ip route add default via 10.10.1.1 dev eth0 table table1

# ip rule add from 172.16.1.2 table table2
# ip route add default via 172.16.1.1 dev eth0 table table2

В завершение необходимо внести правки в файл /etc/network/interfaces, чтобы новая конфигурация была доступна в случае, если сервер перезагрузится, либо будет перечитана сетевая конфигурация. Ниже приведен пример содержания данного конфигурационного файла с добавлением правил и default маршрутов в созданные таблицы, в примере общий default маршрут прописан через интерфейс eth0  с указанием шлюза 10.10.1.1:


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static

address 10.10.1.2
netmask 255.255.255.0
gateway 10.10.1.1
post-up ip rule add from 10.10.1.2 table table1
post-up ip route add default via 10.10.1.1 dev eth0 table table1
post-up ip route add default via 10.10.1.1 dev eth2

auto eth2
iface eth2 inet static
address 172.16.1.2
netmask 255.255.255.0
gateway 172.16.1.1
post-up ip rule add from 172.16.1.2 table table2
post-up ip route add default via 172.16.1.1 dev eth2 table table2

Если на сервере один интерфейс, то правила для таблиц будут прописаны в секции конфигурации eth0.

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

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

Принципы работы протокола BGP / Хабр

Сегодня мы рассмотрим протокол BGP. Не будем долго говорить зачем он и почему он используется как единственный протокол. Довольно много информации есть на этот счет, например тут.

Итак, что такое BGP? BGP — это протокол динамической маршрутизации, являющийся единственным EGP( External Gateway Protocol) протоколом. Данный протокол используется для построения маршрутизации в интернете. Рассмотрим как строится соседство между двумя маршрутизаторами BGP.


Рассмотрим соседство между Router1 и Router3. Настроим их при помощи следующих команд:

router bgp 10
  network 192.168.12.0
  network 192.168.13.0
  neighbor 192.168.13.3 remote-as 10

router bgp 10
  network 192.168.13.0
  network 192.168.24.0
  neighbor 192.168.13.1 remote-as 10

Соседство внутри одной автономной системы — AS 10. После ввода данных на маршрутизаторе, например на Router1, данный маршрутизатор пытается настроить отношения соседства с маршрутизатором Router3. Начальное состояние, когда ничего не происходит называется Idle. Как только будет настроен bgp на Router1, он начнет слушать TCP порт 179 — перейдет в состояние Connect, а когда пытается открыть сессию с Router3, то перейдет в состояние Active.

После того, как сессия установится между Router1 и Router3, то происходит обмен Open сообщениями. Когда данное сообщение отправит Router1, то данное состояние будет называться Open Sent. А когда получит Open сообщение от Router3, то перейдет в состояние Open Confirm. Рассмотрим более подробно сообщение Open:


В данном сообщение передается информация о самом протоколе BGP, который использует маршрутизатор. Обмениваясь Open сообщениями, Router1 и Router3 сообщают друг другу информацию о своих настройках. Передаются следующие параметры:

  • Version: this includes the BGP version that the router is using. The current version of BGP is version 4 which is described in RFC 4271. Two BGP routers will try to negotiate a compatible version, when there is a mismatch then there will be no BGP session.
  • My AS: this includes the AS number of the BGP router, the routers will have to agree on the AS number(s) and it also defines if they will be running iBGP or eBGP.
  • Hold Time: if BGP doesn’t receive any keepalive or update messages from the other side for the duration of the hold time then it will declare the other side ‘dead’ and it will tear down the BGP session. By default the hold time is set to 180 seconds on Cisco IOS routers, the keepalive message is sent every 60 seconds. Both routers have to agree on the hold time or there won’t be a BGP session.
  • BGP Identifier: this is the local BGP router ID which is elected just like OSPF does:
    • Use the router-ID that was configured manually with the bgp router-id command.
    • Use the highest IP address on a loopback interface.
    • Use the highest IP address on a physical interface.
  • Optional Parameters: here you will find some optional capabilities of the BGP router. This field has been added so that new features could be added to BGP without having to create a new version.Things you might find here are:
    • support for MP-BGP (Multi Protocol BGP).
    • support for Route Refresh.
    • support for 4-octet AS numbers.
Для установления соседства необходимо выполнения следующих условий:
  • Номер версии. Нынешняя версия 4.
  • Номер AS должен совпадать с тем, что вы настроили neighbor 192.168.13.3 remote-as 10.
  • Router ID должен быть отличным от соседа.

Если какой-то из параметров не удовлетворяет этим условиям, то маршрутизатор отправит Notification сообщение, где укажет ошибку. После отправки и получения Open сообщений, отношения соседства переходит в состояние ESTABLISHED. После этого уже маршрутизаторы могут обмениваться информацией о маршрутах и делают это при помощи Update сообщений. Вот такое Update сообщение отправляет Router1 к Router3:

Здесь указывают сети, о которых сообщает Router1 и Path attributes, которые являются аналогом метрик. О Path attributes мы поговорим более подробно. Также внутри TCP сессии передаются Keepalive сообщения. Они передаются, по умолчанию, каждые 60 секунд. Это Keepalive Timer. Если в течении Hold Timer-а не будет получено Keepalive сообщение, то это будет означать потерю связи с соседом. По умолчанию, он равен — 180 секундам.

Полезная табличка:

Вроде бы разобрались как маршрутизаторы передают друг другу информацию, теперь попытаемся разобраться с логикой работы протокола BGP.

Чтобы анонсировать какой-нибудь маршрут в таблицу BGP, как и в протоколах IGP, используется команда network, но логика работы отличается. Если в IGP, после указание маршрута в команде network, IGP смотрит — какие интерфейсы принадлежат данной подсети и включает их в свою таблицу, то команда network в BGP смотрит в таблицу маршрутизации и ищет точное совпадение с маршрутом в команде network. При нахождении таких, данные маршруты попадут в таблицу BGP.

Look for a route in the router’s current IP routing table that exactly matches the parameters of the network command; if the IP route exists, put the equivalent NLRI into the local BGP table.
Теперь поднимем BGP на всех оставшихся и посмотрим как происходит выбор маршрута внутри одной AS. После того, как BGP маршрутизатор получит маршруты от соседа, то начинается выбор оптимального маршрута. Здесь надо понять какого вида соседи могут быть — внутренние и внешние. Маршрутизатор по конфигурации понимает является ли сконфигурированный сосед внутренним или внешним. Если в команде:
neighbor 192.168.13.3 remote-as 10 

в качестве параметра remote-as указан AS, который сконфигурирован на самом маршрутизаторе в команде router bgp 10. Маршруты, пришедшие из внутренней AS считаются внутренними, а маршруты из внешней соответственно внешними. И по отношению к каждому работает разная логика получения и отправки. Рассмотрим такую топологию:

На каждом маршрутизаторы настроен loopback интрефейс с ip: x.x.x.x 255.255.255.0 — где x номер маршрутизатора. На Router9 у нас есть loopback интерфейс с адресом — 9.9.9.9 255.255.255.0. Его мы будем анонсировать по BGP и посмотрим как он распространяется. Данный маршрут будет передан на Router8 и Router12. С Router8 данный маршрут попадет на Router6, но на Router5 в таблице маршрутизации его не будет. Также и на Router12 данный маршрут попадет в таблицу, но на Router11 его также не будет. Попытаемся разобраться с этим. Рассмотрим какие данные и параметры передается Router9 своим соседям, сообщая об этом маршруте. Пакет внизу будет отправлен с Router9 на Router8.


Информация о маршруте состоит из аттрибутов пути (Path attributes).

Атрибуты пути разделены на 4 категории:

  1. Well-known mandatory — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).
  2. Well-known discretionary — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.
  3. Optional transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.
  4. Optional non-transitive — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.

Примеры атрибутов BGP:
  • Well-known mandatory:
    • Autonomous system path
    • Next-hop
    • Origin

  • Well-known discretionary:
    • Local preference
    • Atomic aggregate
  • Optional transitive:
  • Optional non-transitive:
    • Multi-exit discriminator (MED)
    • Originator ID
    • Cluster list

В данном случае нас пока будут интересовать Origin, Next-hop, AS Path. Так как маршрут передает между Router8 и Router9, то есть внутри одной AS, то он считается внутренним и обратим внимание на Origin.

Атрибут Origin — указывает на то, каким образом был получен маршрут в обновлении. Возможные значения атрибута:

  • 0 — IGP: NLRI получена внутри исходной автономной системы;
  • 1 — EGP: NLRI выучена по протоколу Exterior Gateway Protocol (EGP). Предшественник BGP, не используется
  • 2 — Incomplete: NLRI была выучена каким-то другим образом

В нашем случае, как видно из пакета равен 0. Когда данный маршрут будет передаваться к Router12, то данный код будет иметь код — 1.

Далее, Next-hop. Атрибут Next-hop

  • Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.
  • Атрибут меняется при передаче префикса в другую AS.

В случае же iBGP, то есть внутри одной AS, Next-hop будет указан тот, который узнал или рассказал об этом маршруте. В нашем случае, это будет 192.168.89.9. Но когда будет передавать данный маршрут от Router8 к Router6, Router8 его изменит и заменит на свой. Next-hop будет — 192.168.68.8. Это нас приводит к двум правилам:
  1. Если маршрутизатор передает маршрут своему внутреннему соседу, то он не меняет параметр Next-hop.
  2. Если маршрутизатор передает маршрут своему внешнему соседу, то меняет Next-hop на ip интерфейса, с которого передает данный маршрутизатор.

Это приводит нас к пониманию первой проблемы — Почему не будет маршрута в таблице маршрутизации на Router5 и Router11. Рассмотрим более детально. Итак, Router6 получил информацию о маршруте 9.9.9.0/24 и благополучно добавил ее в таблицу маршрутизации:
Router6#show ip route bgp
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      9.0.0.0/24 is subnetted, 1 subnets
B        9.9.9.0 [20/0] via 192.168.68.8, 00:38:25

Теперь Router6 передал маршрут Router5 и первому правилу Next-hop не изменил. То есть, Router5 должен добавить 9.9.9.0 [20/0] via 192.168.68.8, но у него нет маршрута до 192.168.68.8 и поэтому данный маршрут добавлен не будет, хотя информация о данном маршруте будет храниться в таблице BGP:
<b>Router5#show ip bgp
BGP table version is 1, local router ID is 5.5.5.5
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 * i 9.9.9.0/24       192.168.68.8             0    100      0 45 i</b>

Та же самая ситуация произойдет и между Router11-Router12. Чтоб избежать такой ситуации необходимо настроить, чтоб Router6 или Router12, передавая маршрут своим внутренним соседям, подставляли в качестве Next-hop свой ip адрес. Делается при помощи команды:
neighbor 192.168.56.5 next-hop-self

После данной команды, Router6 отправит Update сообщение, где для маршрутов в качества Next-hop будет указан ip интерфейса Gi0/0 Router6 — 192.168.56.6, после чего данный маршрут уже попадет в таблицу маршрутизации.

Пойдем дальше и посмотрим появиться ли этот маршрут на Router7 и Router10. В таблице маршрутизации его не окажется и мы могли бы подумать, что проблема как в первом с параметром Next-hop, но если мы посмотрим вывод команды show ip bgp, то увидим, что там маршрут не был получен даже с неправильным Next-hop, что означает, что маршрут даже не передавался. И это нас приведет к существованию еще одного правила:

Маршруты, полученные от внутренних соседей не передаются другим внутренним соседям.
Так как, Router5 получил маршрут от Router6, то другому своему внутреннему соседу он передаваться не будет. Для того, чтобы передача произошла необходимо настроить функцию Route Reflector, либо настроить полносвязные отношения соседства ( Full Mesh), то есть Router5-7 каждый будет соседом с каждым. Мы будем в данном случае использовать Route Reflector. На Router5 необходимо использовать данную команду:
neighbor 192.168.57.7 route-reflector-client

Route-Reflector меняет поведение BGP при передаче маршрута внутреннему соседу. Если внутренний сосед указан как route-reflector-client, то данным клиентам будут анонсироваться внутренние маршруты.

Маршрут не появился на Router7? Не забываем также и про Next-hop. После данных манипуляций маршрут должен и на Router7, но этого не происходит. Это нас подводит к еще одному правилу:

Правило next-hop работает только для External маршрутов. Для внутренних маршрутов замена атрибута next-hop не происходит.

И мы получаем ситуацию, в которой необходимо создать среду при помощи статичной маршрутизации или протоколов IGP сообщить маршрутизаторам о всех маршрутах внутри AS. Пропишем статические маршруты на Router6 и Router7 и после этого получим нужный маршрут в таблице маршрутизаторе. В AS 678 же мы поступим немного иначе — пропишем статические маршруты для 192.168.112.0/24 на Router10 и 192.168.110.0/24 на Router12. Далее, установим отношения соседства между Router10 и Router12. Также настроим на Router12 отправку своего next-hop для Router10:
neighbor 192.168.110.10 next-hop-self

Итогом будет то, что Router10 будет получать маршрут 9.9.9.0/24, он будет получен и от Router7 и от Router12. Посмотрим какой выбор сделает Router10:
Router10#show ip bgp
BGP table version is 3, local router ID is 6.6.6.6
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network              Next Hop            Metric LocPrf Weight Path
 *>i 9.9.9.0/24       192.168.112.12           0    100       0      45 i

                               192.168.107.7                                0     123 45 i  

Как мы видим, два маршрута и стрелка ( > ) означает, что выбран маршрут через 192.168.112.12.
Посмотрим как происходит процесс выбора маршрута:
  1. Первым делом при получении маршрута, проверяется доступность его Next-hop. Именно поэтому, когда мы получали маршрут на Router5 без настройки Next-hop-self, данный маршрут далее не отдавался на обработку.
  2. Далее идет параметр Weight. Данный параметр не является Атрибутом пути ( PA ) и не передается в сообщениях BGP. Он настраивается локально на каждом маршрутизаторе и используется только для манипуляции выбора маршрута на самом маршрутизаторе. Рассмотрим пример. Чуть выше показано, что Router10 выбрал маршрут для 9.9.9.0/24 через Router12 ( 192.168.112.12 ). Чтоб изменить параметр Wieght, можно использовать route-map, чтоб задать для определенных маршрутов, либо присвоить его соседу вес при помощи команды:
     neighbor 192.168.107.7 weight 200       

    Теперь все маршруты от данного соседа будут иметь такой вес. Посмотрим как изменится выбор маршрута после данной манипуляции:
    Router10#show bgp
    *Mar  2 11:58:13.956: %SYS-5-CONFIG_I: Configured from console by console
    BGP table version is 2, local router ID is 6.6.6.6
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
         Network          Next Hop            Metric LocPrf Weight      Path
     *>  9.9.9.0/24       192.168.107.7                        200      123 45 i
     * i                          192.168.112.12           0          100      0 45 i

    Как видите теперь выбран маршрут через Router7, но никакого эффекта на остальные маршрутизаторы это иметь не будет.
  3. На третьей позиции у нас идет — Local Preference. Данный параметр является Well-known discretionary атрибутом, а это означает, что его присутствие необязательно. Данный параметр имеет силу только внутри одной AS и влияет на выбор пути только для внутренних соседей. Именно поэтому, он передается только в Update сообщениях предназначенных для внутреннего соседа. В Update сообщениях для внешних соседей он отсутствует. Поэтому он и был отнесен к Well-known discretionary. Попытаемся применить его на Router5. На Router5 у нас должно быть два маршрута для 9.9.9.0/24 — один через Router6 и второй через Router7.

    Смотрим:

    Router5#show bgp
    BGP table version is 2, local router ID is 5.5.5.5
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
         Network          Next Hop            Metric LocPrf Weight Path
     *>i 9.9.9.0/24       192.168.56.6             0    100      0 45 i

    Но как видим один маршрут через Router6. А где же маршрут через Router7? Может и на Router7 его нет? Смотрим:
    Router#show bgp
    BGP table version is 10, local router ID is 7.7.7.7
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
         Network                Next Hop            Metric LocPrf  Weight    Path
     *>i 9.9.9.0/24       192.168.56.6             0     100           0      45 i
    
                                  192.168.107.10                                  0     678 45 i 

    Странно, вроде все в порядке. Почему же он не передается на Router5? Все дело в том, что у BGP есть правило:
    Маршрутизатор передает только те маршруты, которые использует сам.

    Router7 используется маршрут через Router5, поэтому маршрут через Router10 передаваться не будет. Вернемся к Local Preference. Давайте зададим Local Preference на Router7 и посмотрим как отреагирует на это Router5:
    route-map BGP permit 10
     match ip address 10
     set local-preference 250
    access-list 10 permit any
    router bgp 123
     neighbor 192.168.107.10 route-map BGP in</b>

    Итак, мы создали route-map, в который попадаются все маршруты и сказали Router7, чтоб при получение он менял параметр Local Preference на 250, по умолчанию равен 100. Смотрим, что произошло на Router5:
    Router5#show bgp
    BGP table version is 8, local router ID is 5.5.5.5
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
         Network          Next Hop            Metric LocPrf Weight        Path
     *>i 9.9.9.0/24       192.168.57.7             0          250      0 678 45 i

    Как мы видим теперь Router5 предпочитает маршрут через Router7. Такая же картина будет и на Router6, хотя ему выгодней выбрать маршрут через Router8. Добавим также, что изменения данного параметра требует рестарт соседства, чтобы изменение вошло в силу. Читать тут. С Local Preference разобрались. Переходим к следующему параметру.
  4. Предпочтение маршрута с параметром Next-hop 0.0.0.0, то есть локальные или агрегированные маршруты. Данным маршрутам автоматически после ввода команды network присуждается параметр Weight равный максимуму — 32678:
    Router#show bgp
    BGP table version is 2, local router ID is 9.9.9.9
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
         Network          Next Hop            Metric LocPrf Weight    Path
     *>  9.9.9.0/24       0.0.0.0                  0            32768    i
  5. Кратчайший путь через AS. Выбирается самый короткий параметр AS_Path. Чем через меньшее количество количество AS проходит маршрут, тем он и лучше. Рассмотри маршрут к 9.9.9.0/24 на Router10:
    Router10#show bgp
    BGP table version is 2, local router ID is 6.6.6.6
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
                  x best-external, a additional-path, c RIB-compressed,
    Origin codes: i - IGP, e - EGP, ? - incomplete
    RPKI validation codes: V valid, I invalid, N Not found
    
         Network          Next Hop            Metric LocPrf Weight Path
     *   9.9.9.0/24     192.168.107.7                           0           123 45 i
     *>i                     192.168.112.12           0    100       0       45 i

    Как видите, Router10 выбрал маршрут через 192.168.112.12 потому, что для данного маршрута параметр AS_Path содержит только 45, а в другом случае 123 и 45. Интуитивно понятно.
  6. Следующий параметр — Origin. IGP ( маршрут получен при помощи BGP) лучше, чем EGP ( маршрут получен при помощи предшественника BGP, ныне не используется), а EGP лучше Incomplete? (получен каким-либо другим способ, например редистрибуцией).
  7. Следующий параметр — MED. У нас был Wieght, который работал только локально на маршрутизаторе. Был Local Preference, который работал только в пределах одной автономной системе. Как нетрудно догадаться, MED — параметр, который будет передаваться между автономными системами. Очень хорошая статья о данном параметре.

Больше атрибутов использоваться не будет, но если у двух маршрутов они одинаковые, то используются следующие правила:
  1. Выбрать путь через ближайшего IGP-соседа.
  2. Выбрать самый старый маршрут для eBGP-пути.
  3. Выбрать путь через соседа с наименьшим BGP router ID.
  4. Выбрать путь через соседа с наименьшим IP-адресом.

Теперь рассмотрим вопрос сходимости BGP.

Посмотрим, что произойдет, если допустим Router6 потеряет маршрут 9.9.9.0/24 через Router9. Отключим интерфейс Gi0/1 Router6, который сразу поймет, что BGP сессия с Router8 оборвана и сосед пропал, а значит и маршрут, полученные от него не действительны. Router6 сразу отправляет Update сообщения, где указывает сеть 9.9.9.0/24 в поле Withdrawn Routes. Как только Router5 получит подобное сообщение, отправит его к Router7. Но так как у Router7 есть маршрут через Router10, то в ответ сразу отправит Update c новым маршрутом. Если детектировать падения соседа по состоянию интерфейса не получается, то придеться ждать срабатывания Hold Timer-а.

Конфедерация.

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

Здесь ссылка на данную лабу, а тут конфигурация для GNS3.

Например, при такой топологии нам пришлось бы связывать все маршрутизаторы в AS 2345 между собой, но используя Confederation, мы можем установить отношения соседства только между маршрутизаторами непосредственно подключенных друг к другу. Поговорим об этом подробно. Если у нас была только AS 2345, то laForge получив маршур от Picard рассказал бы его маршрутизаторам Data и Worf, но они не рассказали бы о нем маршрутизатору Crusher . Также маршруты, которые распрастраняет сам маршрутизатор laForge, не были бы переданы Crusher ни Worf-ом, ни Data.

Пришлось бы настраивать Route-Reflector или полносвязые отношения соседства. Разбивая одну AS 2345 на 4 sub-AS ( 2,3,4,5) для каждого маршрутизатора, мы в итоге получаем другую логику работы. Все отлично описано здесь.

Источники:

  1. CCIE Routing and Switching v5.0 Official Cert Guide, Volume 2, Fifth Edition, Narbik Kocharians, Terry Vinson.
  2. Сайт xgu.ru
  3. Сайт GNS3Vault.

Команда IP Route, объясненная на примерах

В этом руководстве подробно объясняется команда IP-маршрута и ее параметры, аргументы и параметры с примерами. Узнайте, как настроить маршрут по умолчанию и статический маршрут с помощью команды IP-маршрута в маршрутизаторе Cisco, шаг за шагом с практическим примером в пакетном трассировщике.

Команда

IP route используется для настройки статического маршрута. Статические маршруты — самый безопасный способ маршрутизации. Они также повысят общую производительность сети. Эти функции чрезвычайно полезны в небольшой сети.

Описание команды и параметров IP-маршрута

У нас есть две команды для настройки статического маршрута.

Маршрутизатор (конфигурация) # ip route destination_network_ # [subnet_mask] IP_address_of_next_hop_neighbor [административное_дистанция] [постоянный] 

и

Маршрутизатор (конфигурация) # ip route destination_network_ # [subnet_mask] interface_to_exit [административное_дистанция] [постоянный] 

Давайте подробно рассмотрим приведенные выше команды

IP маршрут

Это основная команда, которая добавляет новый маршрут в таблицу маршрутизации.

сеть_ назначения _ # [маска_подсети]

Это первый параметр. Он определяет сетевой адрес назначения. Нам нужно предоставить маску подсети, если мы используя подсеть. Подсети — это меньшие сети, созданные из одной большой сети в подсетях. Если мы не используя подсеть, мы можем опустить значение маски подсети. Он будет разбираться автоматически.

IP_адрес_следующего_шопа / соседнего_интерфейса / interface_to_exit

Этот параметр обеспечивает способ доступа к сети назначения.Обе команды используют отдельный способ присвоения этого значения. Первая команда предоставляет IP-адрес соседа на следующем переходе. Он сообщает маршрутизатору, что если он получит пакет для пункта назначения [который мы установили в предыдущем параметре], направить этот пакет на этот IP-адрес соседнего узла следующего перехода.

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

административное расстояние

Административная удаленность — это надежность маршрута. При пересылке пакета будет выбран маршрут с наименьшим значением AD. По умолчанию статический маршрут имеет два значения AD в зависимости от предыдущего параметра. Если вы использовали IP-адрес соседа на следующем переходе, то значение AD по умолчанию будет 1 . Если вы использовали интерфейс выхода, то значение AD по умолчанию будет 0 .Этот параметр позволяет нам создавать несколько статических маршрутов для одного и того же пункта назначения. Например, мы можем создать основной и резервный пути для целевой сети. Чтобы создать резервный путь, нам нужно установить значение AD выше, чем по умолчанию, например, 2 или 3. С этой конфигурацией маршрутизатор будет использовать основной путь. По какой-то причине в случае сбоя основного маршрута маршрутизатор автоматически начнет использовать резервный маршрут.

постоянный

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

Настроить маршрут по умолчанию

По умолчанию, когда пакет поступает в интерфейс, маршрутизатор проверяет пункт назначения, указанный в пакете, и сравнивает его с таблицей маршрутизации. Если он находит совпадение с сетью назначения, он пересылает этот пакет со связанного интерфейса.Если он не найдет совпадения в таблица маршрутизации, то пакет будет отброшен. Это поведение маршрутизатора по умолчанию. Маршрут по умолчанию позволяет нам изменить это поведение. Маршрут по умолчанию — это способ обработки всех несовпадающих пакетов. Если в таблице маршрутизации не найдено совпадений для сети назначения, то это будет перенаправлен на маршрут по умолчанию.

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

Маршрутизатор (конфигурация) # ip route 0.0.0.0 0.0.0.0 IP_address_of_next_hop_neighbor
[административное_дистанция] [постоянно]
 

или

Маршрутизатор (config) # ip route 0.0.0.0 0.0.0.0 interface_to_exit
[административное_дистанция] [постоянно]
 

Приведенная выше команда устанавливает для целевой сети значение 0.0.0.0/0 , которое представляет все сети.

Пример команды IP-маршрута

В демонстрационных целях мы будем использовать программу моделирования сети Packet Tracer. Помимо Packet Tracer, вы можете использовать любое другое программное обеспечение сетевого симулятора, такое как RouterSim, GNS, Boson или даже лучше, если вы можете себе позволить, использовать настоящие устройства Cisco, чтобы следовать этой практике.

Создайте практическую топологию, как показано на рисунке. В качестве альтернативы вы можете загрузить эту топологию.

Загрузить практическую топологию для примера команды ip route

Устройство Подключено с Подключено к IP-адресу
PC0 FastEthernet0 FastEthernet0 маршрутизатора 0/0 10.0.0.2/8
Router0 FastEthernet0 / 0 FastEthernet0 ПК0 10.0.0.1 / 8
Router0 Serial 0/0/0 Router1 serial0 / 0/0 192.168.0.253/30
Router1 Serial 0/0/0/ Router0’s serial0 / 0/0 192.168.0.254/30
Router1 FastEthernet0 / 0 FastEthernet0 ПК1 20.0.0.1/8
PC1 FastEthernet0 FastEthernet0 / 0 маршрутизатора 1 20/0 .0,0.2 / 8
Назначить IP-адрес устройствам

Назначьте ПК0 IP-адрес 10.0.0.2/8.

Повторите тот же процесс для ПК1 и назначьте IP-адрес 20.0.0.2/8.

Назначить IP-адрес интерфейсам маршрутизатора

Дважды щелкните Router0 , щелкните CLI и нажмите Введите ключ для доступа к командной строке маршрутизатора.

В этой топологии используются два интерфейса: FastEthernet0 / 0 и Serial0 / 0/0 из Router0 .По умолчанию интерфейсы на маршрутизаторе остаются отключенными административно во время запуска. Нам нужно настроить IP-адрес и другие параметры на интерфейсах, прежде чем мы сможем использовать их для маршрутизации. Режим интерфейса используется для назначения IP-адреса и других параметров. Доступ к режиму интерфейса можно получить из режима глобальной конфигурации. Следующие команды используются для доступа к режиму глобальной конфигурации.

Маршрутизатор> включить
Маршрутизатор # настроить терминал
Введите команды конфигурации, по одной в каждой строке.Закончите CNTL / Z.
Маршрутизатор (конфигурация) #
 

Из режима глобальной конфигурации мы можем войти в режим интерфейса. Оттуда мы можем настроить интерфейс. Следующие команды назначат IP-адрес FastEthernet0 / 0.

Маршрутизатор (конфигурация) #interface fastEthernet 0/0
Маршрутизатор (config-if) #ip-адрес 10.0.0.2 255.0.0.0
Маршрутизатор (config-if) # без выключения
Маршрутизатор (config-if) #exit
Маршрутизатор (конфигурация) #
 

interface fastEthernet 0/0 команда используется для входа в режим интерфейса.

ip address 10.0.0.2 255.0.0.0 команда назначит IP-адрес интерфейсу.

no shutdown команда активирует интерфейс.

exit команда используется для возврата в режим глобальной конфигурации.

Для последовательного интерфейса

требуются два дополнительных параметра: тактовая частота и полоса пропускания. Каждый последовательный кабель имеет два конца DTE и DCE. Эти параметры всегда настраиваются на стороне DCE.Мы можем использовать команду show controllers interface из привилегированного режима, чтобы проверить конец кабеля.

Маршрутизатор # показать серийный номер контроллеров 0/0/0
Интерфейс Serial0 / 0/0
Оборудование - PowerQUICC MPC860
DCE V.35, тактовая частота 2000000
[Вывод опущен]
 

Четвертая строка вывода подтверждает, что конец последовательного кабеля DCE подключен. Если вы видите здесь DTE вместо DCE, пропустите эти параметры.

Теперь у нас есть необходимая информация, давайте назначим IP-адрес последовательному интерфейсу.

Маршрутизатор # настроить терминал
Введите команды конфигурации, по одной в каждой строке. Закончите CNTL / Z.
Маршрутизатор (config) #interface serial 0/0/0
Маршрутизатор (config-if) #ip-адрес 192.168.0.253 255.255.255.252
Маршрутизатор (config-if) # частота 64000
Маршрутизатор (config-if) #bandwidth 64
Маршрутизатор (config-if) # без выключения
Маршрутизатор (config-if) #exit
Маршрутизатор (конфигурация) #
 

Router # configure terminal Команда используется для входа в режим глобальной конфигурации.

Router (config) #interface serial 0/0/0 Команда используется для входа в режим интерфейса.

Маршрутизатор (config-if) #ip address 192.168.0.253 255.255.255.252 Команда назначает IP-адрес интерфейсу. Для последовательного соединения мы обычно используем IP-адрес из подсети / 30.

Router (config-if) #clock rate 64000 And Router (config-if) #bandwidth 64 В реальной среде эти параметры управляют потоком данных между последовательными каналами и должны быть установлены у поставщиков услуг конец.В лабораторных условиях нам не нужно беспокоиться об этих значениях. Мы можем использовать эти значения.

Маршрутизатор (config-if) # no shutdown Команда вызывает интерфейс.

Маршрутизатор (config-if) #exit Команда используется для возврата в режим глобальной конфигурации.

Мы будем использовать те же команды для назначения IP-адресов на интерфейсах Router1. Поскольку мы предоставили тактовую частоту и полосу пропускания для последовательного интерфейса Router0, нам не нужно назначать их для последовательного интерфейса Router1.Следующая команда назначит IP-адреса на интерфейсе Router1.

Маршрутизатор> включить
Маршрутизатор # настроить терминал
Введите команды конфигурации, по одной в каждой строке. Закончите CNTL / Z.
Маршрутизатор (конфигурация) #interface fastEthernet 0/0
Маршрутизатор (config-if) #ip-адрес 20.0.0.1 255.0.0.0
Маршрутизатор (config-if) # без выключения
Маршрутизатор (config-if) #exit
Маршрутизатор (config) #interface serial 0/0/0
Маршрутизатор (config-if) #ip-адрес 192.168.0.254 255.255.255.252
Маршрутизатор (config-if) # без выключения
Маршрутизатор (config-if) #exit
 

Настроить статический маршрут

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

Маршрутизатор 0
Маршрутизатор (конфиг) #ip route 20.0.0.0 255.0.0.0 192.168.0.254
 
Маршрутизатор1
Маршрутизатор (конфигурация) #ip route 10.0.0.0 255.0.0.0 192.168.0.253 

Это все, что нам нужно для переключения пакетов из одной сети в другую. Чтобы проверить результат, мы можем использовать команду ping . Получите доступ к командной строке PC1 и используйте команду ping , чтобы проверить соединение с PC0 .

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

.

D.2.ip маршрут

Другая часть набора инструментов iproute2 для IP управления, ip route предоставляет инструменты управления для манипулирование любой из таблиц маршрутизации. Операции включают отображение маршрутов или кеш маршрутизации, добавление маршрутов, удаление маршрутов, изменение существующих маршрутов и получение маршрута и очистка всей таблицы маршрутизации или кеш маршрутизации.

Одна вещь, о которой следует помнить при использовании ip route заключается в том, что вы можете работать с любой из 255 таблиц маршрутизации с этим команда.Где маршрут команда работала только с основной таблицей маршрутизации (таблица 254), ip route Команда по умолчанию работает на главном таблица маршрутизации, но ее можно легко уговорить использовать другие таблицы с таблица параметр.

К счастью, как упоминалось ранее, iproute2 набор инструментов не полагается на DNS для каких-либо операций, поэтому повсеместный переключатель -n в предыдущих примерах не будет требуется в любом примере здесь.

Все операции с командой ip route являются атомарный, поэтому каждая команда будет возвращать RTNETLINK ответы: Нет такого процесса в случае ошибки, либо ничего перед лицом успеха. Переключатель -s , который предоставляет дополнительную статистическую информацию при отчетах о канальном уровне информация предоставит дополнительную информацию только при сообщении о состояние маршрута кеш или выборка определенного маршрут..

Утилита ip route при использовании вместе с правило ip Утилита может создавать таблицы NAT без сохранения состояния. Он может даже манипулировать локальная таблица маршрутизации, таблица маршрутизации, используемая для трафика, связанного с широковещательные адреса и IP-адреса, размещенные на самой машине.

Чтобы понять контекст, в котором работает этот инструмент, вам необходимо чтобы понять некоторые основы IP-маршрутизации, поэтому, если вы прочитали приведенное выше введение в инструмент ip route , и запутались, вы можете прочитать главу 4, IP-маршрутизация и понять некоторые концепции IP-маршрутизации (с Linux), прежде чем продолжаем здесь.

D.2.1. Отображение таблицы маршрутизации с ip route показать

В простейшей форме ip route можно использовать для отобразить вывод основной таблицы маршрутизации. Вывод этой команды значительно отличается от вывода маршрута . За для сравнения, давайте посмотрим на вывод обоих маршрутов -n и ip route показать .

Пример D.11.Просмотр основной таблицы маршрутизации с ip route показать

  [root @ tristan] #    маршрут -n  
  Таблица IP-маршрутизации ядра
Шлюз назначения Genmask Flags Metric Ref Use Iface
192.168.99.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 192.168.99.254 0.0.0.0 UG 0 0 0 eth0 
  [root @ tristan] #    ip route show  
  192.Ссылка на область действия 168.99.0 / 24 dev eth0
127.0.0.0/8 ссылка на область разработки для разработчиков
по умолчанию через 192.168.99.254 dev eth0 
           

Если вы привыкли к выходному формату route , вывод ip route может показаться лаконичным. В Однако отображается та же основная информация. Как и в случае с нашим бывшим Например, давайте пока проигнорируем петлевой маршрут 127.0.0.0/8. Это обязательный маршрут для любых IP-адресов, размещенных на кольцевой проверке. интерфейс.Нам гораздо больше интересны два других маршрута.

Сеть 192.168.99.0/24 доступна на eth0 с объемом ссылка, что означает, что сеть действительна и доступна через это устройство (eth0). См. Таблицу C.2, «Область IP под IP-адресом». для определения возможных объемов. Пока ссылка работает этого устройства, мы должны иметь доступ к любому IP-адресу внутри 192.168.99.0/24 через интерфейс eth0.

Наконец, наш важнейший маршрут по умолчанию выражается в маршрутизации таблица со словом default. Обратите внимание, что любой пункт назначения достижимый через шлюз отображается в выходных данных таблицы маршрутизации с ключевое слово через . Эта последняя строка соответствует семантически с последней строкой вывода из маршрута -n выше.

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

Пример D.12. Просмотр локальной таблицы маршрутизации с помощью ip route show стол местный

  [root @ tristan] #    ip route show table local  
  локальный 192.168.99.35 dev eth0 proto область видимости ядра хост src 192.168.99.35
широковещательная передача 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
широковещательная передача 192.168.99.255 dev eth0 proto kernel scope link src 192.168.99.35
широковещательная передача 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.1 dev lo proto ядро ​​область видимости хост src 127.0.0.1
local 127.0.0.0/8 dev lo proto ядро ​​область видимости хост src 127.0.0.1 
           

Это дает нам много информации об IP-сетях для к которому машина подключена напрямую, и загляните внутрь способ, которым таблицы маршрутизации обрабатывают специальные адреса, такие как широковещательные адреса и локально настроенные адреса.

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

Для каждого IP-адреса, размещенного на машине, логично, что машина должен ограничивать доступ к этому IP или диапазону IP только для себя.Это объясняет, почему в примере D.12 «Просмотр локальной таблицы маршрутизации с помощью ip route show стол местный », 192.168.99.35 имеет область хоста. Поскольку tristan размещает этот IP-адрес, нет причина, по которой пакет должен быть перенаправлен из коробки. Аналогично назначение localhost (127.0.0.1) не нужно перенаправлять с этой машины. В каждом из этих случаев объем был установлен на хост.

Для широковещательных адресов, которые предназначены для всех слушателей, которые случайно разделяют IP-сеть, назначение имеет смысл только в том случае, если для ряда устройств, подключенных к одному канальному уровню .

Последняя характеристика, доступная нам в каждой строчке местного Выходные данные таблицы маршрутизации — это ключевое слово src . Это рассматривается как подсказка ядру о том, какой IP-адрес выбрать для адрес источника исходящих пакетов на этом интерфейсе. Естественно, это наиболее часто используется (и злоупотребляет) на многосетевых хостах, хотя почти каждая машина использует эту подсказку для подключения к localhost .

Теперь, когда мы проверили основную таблицу маршрутизации и локальную таблица маршрутизации, давайте посмотрим, насколько легко посмотреть на любой из другие таблицы маршрутизации. Это так же просто, как указать таблицу его имя в / etc / iproute2 / rt_tables или количество. В этом файле есть несколько зарезервированных идентификаторов таблиц, но другие номера таблиц от 1 до 252 доступны для пользователь. Обратите внимание, что этот пример предназначен только для демонстрации и не имеет внутренней ценности, кроме демонстрации использования таблица параметр.

Пример D.13. Просмотр таблицы маршрутизации с ip route показать таблицу

  [root @ tristan] #    ip route show table special  
  Ошибка: аргумент "специальный" неверен: значение идентификатора таблицы недействительно
 
  [root @ tristan] #    echo 7 специальный >> / etc / iproute2 / rt_tables  
  [root @ tristan] #    ip route show table special  
  [root @ tristan] #    ip route добавить таблицу по умолчанию через 192.168.99.254  
  [root @ tristan] #    ip route show table special  
  по умолчанию через 192.168.99.254 dev eth0 
           

В приведенном выше примере вы впервые видите, как добавить маршрут к таблица, отличная от основной таблицы маршрутизации, но то, что мы на самом деле интересует последняя команда и результат. В ПримерD.13, «Просмотр таблицы маршрутизации с ip route. показать таблицу », мы выделили таблицу 7 под названием «специальный» и добавили маршрут в эту таблицу.В команда ip route show table special показывает нам таблица маршрутизации №7 из ядра.

ip route консультируется / etc / iproute2 / rt_tables для идентификатора таблицы. Если идентификатор не находит, он жалуется, что не может найти ссылка на такую ​​таблицу. Если идентификатор таблицы найден, то отображается соответствующая таблица маршрутизации.

Использование нескольких таблиц маршрутизации может сделать маршрутизатор очень сложным, очень быстро.Использование имен вместо чисел для этих таблиц может помочь в управлении этой сложностью. Для дальнейшего обсуждения по управлению несколькими таблицами маршрутизации и некоторым вопросам обработки их см. Раздел 10.3, «Использование базы данных политики маршрутизации и множественной маршрутизации. Таблицы ».

D.2.2. Отображение кеша маршрутизации с ip route показать кеш

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

Кеш маршрутизации может отображаться во всей красе с ip route show cache , который обеспечивает подробный обзор последних IP-адреса назначения и основные характеристики этих направления.На маршрутизаторах, масках Boxen и межсетевых экранах кэш маршрутизации может стать очень большим. Вместо просмотра всего кеш маршрутизации даже на рабочей станции, мы выберем конкретный пункт назначения из кеша маршрутизации для проверки.

Пример D. 14. Отображение кеша маршрутизации с ip route показать кеш

  [root @ tristan] #    ip route показать кеш 192.168.100.17  
  192.168.100.17 из 192.168.99.35 через 192.168.99.254 dev eth0
    кеш mtu 1500 rtt 18ms rttvar 15ms cwnd 15 advmss 1460
192.168.100.17 через 192.168.99.254 dev eth0 src 192.168.99.35
    кеш mtu 1500 advmss 1460 
           

ИСПРАВИТЬ МЕНЯ! Я не знаю, как объяснить rtt, rttvar и cwnd, даже прочитав комментарии Алексея в документации iproute2! Не только это, я не уверен, почему там две записи!

Вывод в ExampleD.14, «Отображение кеша маршрутизации с помощью ip route показать кеш » суммирует достижимость пункта назначения 192.168.100.17 из 192.168.99.35. Первая строка каждой записи содержит некоторые важные информация для нас: IP-адрес назначения, IP-адрес источника, шлюз через который доступен пункт назначения, а интерфейс через который маршрутизировались пакеты. Вместе эти данные идентифицировать запись маршрута в кэше.

Характеристики этого маршрута резюмируются во второй строке каждой записи.Для маршрута между тристан и изолида , мы видим, что Путь Обнаружение MTU определило 1500 байтов как максимальный размер пакета от конца до конца. Максимальный размер сегмента (MSS) данных — 1460 байтов. Хотя это обычно не какой-нибудь, а самый случайный Интересно, может быть полезная диагностическая информация.

Если вы фанат статистики и не можете насытиться информацию о маршрутизации на вашей машине вы всегда можете переведите переключатель -s .

ПримерD.15. Отображение статистики из кеша маршрутизации с ip -s route показать кеш

  [root @ tristan] #    ip -s route показать кеш 192.168.100.17  
  192.168.100.17 из 192.168.99.35 через 192.168.99.254 dev eth0
    кеш-пользователи 1 использовали 326 age 12sec mtu 1500 rtt 72ms rttvar 22ms cwnd 2 advmss 1460
192.168.100.17 через 192.168.99.254 dev eth0 src 192.168.99.35
    пользователи кеша 1 использовали 326 возраст 12 сек mtu 1500 advmss 1460 
           

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

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

D.2.3. Используя ip route, добавьте для заполнения маршрута стол

ip route add используется для заполнения таблица маршрутизации. Хотя вы можете использовать маршрут , добавьте , чтобы сделать то же самое, ip route add предлагает большой количество вариантов, которые невозможны с маститым маршрут команда. После того, как мы рассмотрели несколько простых примеров, мы обсудим больше сложные маршруты с ip route .

В Разделе D.1 « маршрут » мы использовали два классических примера добавление сетевого маршрута (в сеть нашего поставщика услуг из) и хост-маршрут. Посмотрим на разница в синтаксисе с командой ip route .

Это один из простейших примеров синтаксиса ip маршрут . Как вы помните, вы можете добавить только маршрут к сети назначения через шлюз, который сам уже доступен.В этом случае, masq-gw уже знает маршрут к 192.168.100.1 ( сервис-роутер ). Сейчас любые пакеты, привязанные к 10.38.0.0/16, будут перенаправлены на 192.168.100.1.

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

Давайте посмотрим на пример вывода tcpdump который показывает запретить маршрут в действии.

Пример D.17. Добавление маршрута prohibit с маршрутом добавить

  [root @ masq-gw] #    ip route добавить запрет 209.10.26.51  
  [корень @ tristan] #    SSH 209.10.26.51  
  ssh: подключиться к адресу 209.10.26.51 порт 22: нет маршрута к хосту 
  [корень @ masq-gw] #    tcpdump -nnq -i eth3  
  tcpdump: прослушивание eth3
22: 13: 13.740406 192.168.99.35.51973> 209.10.26.51.22: TCP 0 (DF)
22: 13: 13.740714 192.168.99.254> 192.168.99.35: icmp: host 209.10.26.51 unreachable - фильтр запрещен администратором [tos 0xc0] 
           

Сравните пакет ICMP, возвращенный отправителю в этом случае, с Пакет ICMP возвращается, если вы использовали iptables и REJECT цель .Хотя чистый эффект идентичен (пользователь не может чтобы достичь намеченной цели), пользователь получает два разных Сообщения об ошибках. С iptables REJECT , пользователь видит Connection отказался , где пользователь видит Нет маршрут к хосту с использованием запретить . Это всего лишь два варианта контроль исходящего доступа из вашей сети.

Предположим, вы не хотите блокировать доступ к этому конкретному хосту для всем вашим пользователям вариант из приходит к вам помощь.

Пример D. Использование из в команде маршрутизации с добавить маршрут

  [root @ masq-gw] #    ip route добавить запрет 209.10.26.51 из 192.168.99.35  
           

Теперь вы эффективно заблокировали исходный IP-адрес 192.168.99.35 от достигнув 209.10.26.51. Любые пакеты, соответствующие этому источнику и адрес назначения будет соответствовать этому маршруту.В этом случае, masq-gw сгенерирует Сообщение об ошибке ICMP, указывающее, что пункт назначения административно недоступен.

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

В приведенном ниже примере предположим, что наш маскирующийся хост также запускает преобразователь DNS для внутренней сети, и мы выбрали все исходящие DNS-пакеты должны маршрутизироваться в соответствии с таблицей 7 . Теперь любой пакет, который исходит из этого ящика (или замаскирован через эту таблицу) будет иметь исходный IP-адрес 205.254.211.198.

Пример D. 19. Использование src в команде маршрутизации с добавить маршрут

  [root @ masq-gw] #    ip route добавить по умолчанию через 205.254.211.254 SRC 205.254.211.198 таблица 7  
           

ИСПРАВИТЬ МЕНЯ!! Про nexthop пока нечего сказать, потому что я никогда не использовал его, это касается также уравняет и на ссылке . Если у кого-то есть несколько примеров, которыми он хотел бы поделиться, я бы хотел слышать.

Есть и другие варианты для IP маршрута добавить задокументировано в подробном отчете Алексея iproute2 документация.Для дальнейших исследований я предложил приобрести и читая это руководство.

D.2.4. Добавление маршрута по умолчанию с ip route add по умолчанию

Естественно, один из самых важных маршрутов на машине — это ее маршрут по умолчанию. Добавление маршрута по умолчанию — один из самых простых операции с ip route .

Нам нужен ровно один фрагмент информации, чтобы установить значение по умолчанию трасса на машине.Это IP-адрес шлюза. В синтаксис команды чрезвычайно прост и помимо использования через вместо gw , это почти та же команда, что и эквивалентный маршрут -n .

ПримерD.20. Установка маршрута по умолчанию с ip route add default

  [root @ tristan] #    ip route добавить значение по умолчанию через 192.168.99.254  
           

D.2.5.Настройка NAT с ip route add nat

Обязательно ознакомьтесь с главой 5, Преобразование сетевых адресов (NAT) , чтобы получить полную информацию о проблемы, связанные с преобразованием сетевых адресов (NAT). Если ты здесь, чтобы узнать больше о том, как настроить NAT в вашей сети, тогда вы должны знать, что IP-маршрут add nat только половина раствора. Вы должны понимать, что выполнение NAT с iproute2 включает один компонент для перезаписи входящий пакет ( ip route add nat ), и другая команда для перезаписи исходящего пакета ( ip rule add нац ).Если вы установите только половину системы, ваш NAT будет работать только наполовину — или не будет работать вообще, в зависимости от того, как вы определите «работу».

Алексей четко документирует в приложении к iproute2 руководство, что NAT предоставляется iproute2 Suite не имеет состояния. Это отчетливо в отличие от NAT с netfilter. См. Раздел 5.5, «NAT назначения с сетевым фильтром (DNAT)» и Раздел 8.3, «Отслеживание подключений Netfilter» для лучшего просмотра отслеживания соединений и сетевого адреса поддержка перевода доступна в netfilter.

Команда ip route add nat используется для перезаписи адрес назначения пакета с одного IP-адреса или диапазона на другой IP или диапазон. Инструменты iproute2 могут работать только на весь IP-пакет. Непосредственно в пределах iproute2 набор для поддержки условной перезаписи на основе порта назначения дейтаграммы UDP или сегмента TCP. Это весь пакет, каждый пакет и ничего, кроме пакета .нац nat 205.254.211.17 через 192.168.100.17 хост области

Запись маршрута, которую мы только что создали, говорит ядру перезаписать любой входящий пакет с 205.254.211.17 привязан к 192.168.100.17. В фактическая перезапись пакета происходит на этапе маршрутизации пакеты проходят через ядро. Это важная деталь, освещен более полно в Раздел 5.4, «NAT без сохранения состояния и фильтрация пакетов».

Не только iproute2 поддерживает сетевой адрес перевод для отдельных IP-адресов, а также для целых диапазонов сети. В синтаксис практически аналогичен синтаксису выше, но использует Сетевой адрес CIDR вместо одного IP.

Пример D. 22. Создание маршрута NAT для всей сети с IP маршрут добавить нац

  [root @ masq-gw] #    ip route add nat 205.нац  
  nat 205.254.211.32/29 через 192.168.100.32 хост области 
           

В этом примере мы добавляем маршрут для всей сети. любой IP-пакеты, которые приходят к нам, предназначены для любого адреса между 205.254.211.32 и 205.254.211.39 будут переписаны на соответствующий адрес в диапазоне от 192.168.100.32 до 192.168.100.39. Это сокращенный способ указать несколько переводы в нотации CIDR.

Опять же, это только половина дела для NAT с iproute2 . Обязательно прочтите раздел ниже для информации об использовании ip rule add nat , в дополнение к Chapter 5, Network Address Translation (NAT) , которая предоставит более полную документацию по поддержке NAT в Linux. Не забудьте использовать ip route flush кеш после добавления маршрутов NAT и соответствующие правила NAT .

D.2.6. Удаление маршрутов с ip route del

ip route del имеет точно такой же синтаксис, что и маршрут ip добавьте команду , так что если вы уже ознакомились с синтаксисом это должно быть несложно.

На самом деле, удалить маршруты в командной строке практически нетрудно. с ip route del . Вы можете просто определить маршрут, который вы хотите удалить с помощью ip route show команду и дословно добавьте строку вывода к ip route дель .

ПримерD.23. Удаление маршрутов с ip route del

  [root @ masq-gw] #    ip route show  
  192.168.100.0/30 dev eth4 scope ссылка
205.254.211.0/24 dev, ссылка на область действия eth2
192.168.100.0/24 dev eth0 scope ссылка
Ссылка на 192.168.99.0/24 dev eth0 scope
192.168.98.0/24 через 192.168.99.1 dev eth0
10.38.0.0/16 через 192.168.100.1 dev eth4
127.0.0.0/8 ссылка на область разработки для разработчиков
по умолчанию через 205.254.211.254 разработчик eth2 
  [root @ masq-gw] #    ip route del 10.38.0.0/16 через 192.168.100.1 dev eth4  
           

Мы определили сетевой маршрут до 10.38.0.0/16 как маршрут, который мы хотел удалить, просто добавил описание маршрута нашей команде ip route del .

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

D.2.7. Изменение существующих маршрутов с помощью ip route сдача

Иногда вам нужно удалить маршрут и заменить его на другой. К счастью, это можно сделать атомарно с помощью изменение маршрута ip .

Давайте изменим маршрут по умолчанию на тристане с помощью этой команды.

ПримерD.24. Изменение существующих маршрутов с помощью ip route сдача

  [root @ tristan] #    ip route change default через 192.168.99.113 dev eth0  
  [root @ tristan] #    ip route show  
  192.168.99.0/24 dev eth0 ссылка на область видимости
127.0.0.0/8 ссылка на область разработки для разработчиков
по умолчанию через 192.168.99.113 dev eth0 
           

Если вы действительно используете команду ip route change , вы следует знать, что он не сообщает о состоянии таблицы маршрутизации изменить кеш маршрутизации, так что вот еще одно хорошее место для входа привычка использовать ip route flush кеш .

Больше нечего сказать об использовании этой команды. если ты не хочу использовать IP-маршрут del сразу за ним следует IP-маршрут , добавьте вы можете использовать ip route change .

D.2.8. Программная загрузка информации о маршруте с ip маршрут получить

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

ПримерD.25. Тестирование таблиц маршрутизации с помощью ip route получить

  [root @ tristan] #    ip -s route получить 127.0.0.1/32  
  ip -s route получить 127.0.0.1/32
локальный 127.0.0.1 dev lo src 127.0.0.1
    cache  пользователи 1 использовали 1 mtu 16436 advmss 16396 
  [root @ tristan] #    ip -s route получить 127.0.0.1/32  
  локальный 127.0.0.1 dev lo src 127.0.0.1
    cache  пользователи 1 использовали 2 mtu 16436 advmss 16396 
           

Для случайного использования ip route get — бесценный орудие труда.Очевидный побочный эффект использования ip route получить увеличение счетчика использования каждой затронутой записи в кеше маршрутизации. Хотя это не проблема, это изменит количество пакетов, которые использовали этот конкретный маршрут. Если ты использование ip для подсчета исходящих пакетов (у людей сделал это!), вы должны быть осторожны с этой командой.

D.2.9. Очистка таблиц маршрутизации с ip route промывка

Опция flush при использовании с ip route очищает таблицу маршрутизации или удаляет маршрут для конкретный пункт назначения.В ExampleD.26, «Удаление определенного маршрута и очистка таблицы маршрутизации с помощью очистка IP-маршрута », сначала мы удалим маршрут для сети назначения, используя ip route flush , а затем удалим все маршруты в основной таблице маршрутизации одной командой.

Если вы не хотите удалять маршруты вручную, вы можете быстро очистить все маршруты в таблице, указав идентификатор таблицы команде ip route flush .

ПримерD.26. Удаление определенного маршрута и очистка таблицы маршрутизации с помощью очистка IP маршрута

  [root @ masq-gw] #    очистка IP-маршрута  
  "ip route flush" требует аргументов 
  [root @ masq-gw] #    очистка IP-маршрута 10,38  
  Нечего смывать. 
  [root @ masq-gw] #    очистка маршрута IP 10.38.0.0/16  
  [root @ masq-gw] #    ip route show  
  192.Ссылка на область действия 168.100.0 / 30 dev eth4
205.254.211.0/24 dev, ссылка на область действия eth2
192.168.100.0/24 dev eth0 scope ссылка
Ссылка на 192.168.99.0/24 dev eth0 scope
192.168.98.0/24 через 192.168.99.1 dev eth0
127.0.0.0/8 ссылка на область разработки для разработчиков
по умолчанию через 205.254.211.254 dev eth2 
  [root @ masq-gw] #    ip route flush table main  
  [root @ masq-gw] #    ip route show  
  [root @ masq-gw] # 
           

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

D.2.10. ip route flush cache

Выше, в Разделе D.2.2, «Отображение кеша маршрутизации с ip route. показать кеш », мы рассмотрели содержимое кеша маршрутизации, хеш-таблица в ядре, которая содержит недавно использованные маршруты. Цитируя Джона С. Денкера, вы не забудьте использовать ip route flush cache после того, как вы изменили таблицы маршрутизации; «в противном случае изменения будут вступают в силу только после некоторой до безумия невоспроизводимой задержки.»

Поскольку ядро ​​обращается к кешу маршрутизации перед выборкой нового маршрут из таблиц маршрутизации, ip route flush cache очищает кеш от любых данных. Теперь, когда ядро переходит в кэш маршрутизации, чтобы найти лучший маршрут к пункту назначения, он находит кеш пустым. Затем он просматривает политику маршрутизации базы данных и таблицы маршрутизации. Когда ядро ​​находит маршрут, оно введет вновь выбранный пункт назначения в кеш маршрутизации.

ПримерD.27. Очистка кеша маршрутизации с помощью ip route flush кэш

  [root @ tristan] #    ip route show cache  
  локальный 127.0.0.1 от 127.0.0.1 до 0x10 dev lo
    кеш <локальный> mtu 16436 advmss 16396
локальный 127.0.0.1 из 127.0.0.1 dev lo
    кеш <локальный> mtu 16436 advmss 16396
192.168.100.17 из 192.168.99.35 через 192.168.99.254 dev eth0
    кеш mtu 1500 rtt 18ms rttvar 15ms cwnd 15 advmss 1460
192.168.100.17 через 192.168.99.254 dev eth0 src 192.168.99.35
    кеш mtu 1500 advmss 1460 
  [root @ tristan] #    ip route flush cache  
  [root @ tristan] #    ip route show cache  
  [root @ tristan] #    ip route show cache  
  локальный 127.0.0.1 от 127.0.0.1 до 0x10 dev lo
    кеш <локальный> mtu 16436 advmss 16396
локальный 127.0.0.1 из 127.0.0.1 dev lo
    кеш <локальный> mtu 16436 advmss 16396 
           

При внесении изменений в маршрутизацию Linux-бокса вы можете спасти себя некоторое время на устранение неполадок (и путаницу), привыкнув завершение команд маршрутизации с помощью ip route flush кеш .

D.2.11. Краткое изложение использования ip route

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

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *