Инструменты пользователя

Инструменты сайта


iproute

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

iproute [2018/08/08 11:51]
iproute [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +====== Маршрутизация ======
  
 +{{htmlmetatags>
 +metatag-description=(Маршрутизация в Linux. Использование пакет iproute, который состоит из нескольких утилит управления трафиком.)
 +}}
 +
 +{{::iproute2.png?nolink|}}
 +
 +Одной из главнейших задач [[osi?&#setevoj_uroven|сетевого уровня]] модели OSI является маршрутизация. Устройства, которые связывают подсети между собой в единую составную сеть, называются маршрутизаторами. Внутри сети сегменты не разделяются маршрутизаторами, иначе это была бы не одна сеть, а несколько сетей. Маршрутизатор соединят несколько сетей в интерсеть (internetwork или internet).
 +
 +Данные, которые поступают на сетевой уровень и которые необходимо передать через составную сеть, снабжаются заголовком сетевого уровня. Данные вместе с заголовком образуют пакет. Заголовок пакета сетевого уровня имеет унифицированный формат, не зависящий от форматов кадров канального уровня тех сетей, которые могут входить в объединенную сеть, и несет наряду с другой служебной информацией данные о номере сети, которой предназначается этот пакет. Явная нумерация сетей позволяет протоколам сетевого уровня составлять точную карту межсетевых связей и выбирать рациональные маршруты при любой их топологии, в том числе альтернативные маршруты, если они имеются, что никак не умеют делать мосты и коммутаторы.
 +
 +Сетевой уровень определяет маршрут пути следования пакета и перемещает его между подсетями. При передаче пакета из одной подсети в другую пакет сетевого уровня, инкапсулированный в прибывший канальный кадр первой подсети, освобождается от заголовков этого кадра и окружается заголовками кадра канального уровня следующей подсети. Информацией, на основе которой делается эта замена, являются служебные поля пакета сетевого уровня.
 +
 +**Резюмируем**.
 +  - построение неоднородных сетей реализуют с помощью сетевого уровня.
 +  - сетевой уровень использует собственную адресацию, которая обеспечивает каждому узлу подсети составной сети свой универсальный сетевой адрес, который состоит из номера сети и номера узла. Благодаря такой системе адресации сетевой уровень может пересылать информации к узлу получателю "не обращая внимания" на внутреннюю структуру подсетей, с другой стороны для непосредственного продвижения пакетов к адресату, он использует технологию передачи данных конкретной подсети, через которую следуют эти пакеты.
 +  - поиск наилучшего пути следования пакетов в сети - маршрутизация - это основная задача сетевого уровня.
 +  - сети соединяются между собой с помощью маршрутизаторов. Маршрутизаторы занимаются сбором информации о топологии межсетевых соединений, и на ее основании пересылают данные в пункт назначения. 
 +
 +**Основная функция маршрутизатора** - чтение заголовков пакетов сетевых протоколов, которые принимаются и буферизуются по каждому его порту, и принятие решения о дальнейшем маршруте следования того пакета в соответствии с указанным в нем сетевым адресом. Сетевой адрес пакета сетевого протокола включает, как правило, номер сети номер узла.
 +
 +====== Маршрутизация статическая ======
 +
 +**Статическая маршрутизация** является одним из способов задания маршрута следования пакетов в сетях. При этом протоколы маршрутизации не используются, а необходимая информация заносится системным администратором вручную в соответствующие таблицы маршрутизации. К статическим маршрутам также относится маршрут по умолчанию (default route).
 +
 +<note>Создание собственных таблиц и правил маршрутизации это и есть **Policy-Routing**, он же **PBR (Policy-based Routing)**. SBR (Source-based Routing) или Source-Routing в [[Linux]] является частным случаем [[iproute?&#policy-routing_marshrutizacija_dlja_dvux_isp|Policy-Routing]], в случае использования условия from в правиле маршрутизации.</note>
 +====== iproute ======
 +
 +  * Homepage: [[http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2|iproute2]]
 +  * [[http://docstore.mik.ua/manuals/ru/LARTC/index.html|Перевод Linux Advanced Routing & Traffic Control HOWTO]]
 +
 +**iproute** также известна как iproute2. 
 +
 +Пакет iproute состоит из нескольких утилит управления трафиком:
 +  * **ip** – управление собственно маршрутизацией;
 +  * **tc** – управление очередями маршрутизации;
 +  * **ss** — утилита для просмотра текущих соединений и открытых портов, аналог утилиты [[netstat]].
 +
 +<note important>Доступ ко всем возможностям дает только **ip**, использование утилиты route устарело (вы не сможете настроить например политики маршрутизации и не увидите их существование в выводе команды просмотра, если они уже настроены в системе).</note>
 +
 +  * Увидеть IP и [[MAC]], аналог [[arp]] -a<file>
 +# ip neighbour show
 +</file>
 +  * Поиск маршрута для удаленного ip<file>
 +ip route get 192.168.35.55
 +192.168.35.55 via 192.168.35.254 dev tun1  src 10.26.95.254 
 +    cache  ipid 0xf0ea
 +</file>
 +  * Для все MAC задает состояние failed, в дальнейшем ядро Ос удалит помеченные так MAC записи из arp таблицы.<file>
 +# ip neigh flush all
 +</file>
 +  * Вывести запись о маршруте по умолчанию:<file>
 +# ip r | grep default
 +</file>
 +  * Просмотр сетевых карт<file>
 +# ip link list
 +</file>
 +  * Сбросить кеш маршрутизатора<file>
 +# ip route flush cache
 +</file>
 +  * **blackhole**. Добавить «зануленный» маршрут (аналог «ip route ... null0» в Cisco). Пакеты в сеть с таким маршрутом будут удалены с причиной «No route to host». Может быть полезно для подавление [[DoS]]-атаки с хоста<file>
 +# ip route add blackhole 10.56.50.0/27
 +</file>
 +  * C помощью команды **ip addr add** можно установить на сетевом интерфейсе как основной IP адрес, так и несколько дополнительных адресов. Удалить IP адрес<file>
 +ip addr del 10.90.91.254 dev eth4
 +или удалить все с интерфейса wlan1
 +ip addr flush wlan1
 +</file>
 +
 +===== Таблицы маршрутизации =====
 +Вывести таблицы маршрутизации.  Ядро принимает решение о применении той или иной таблицы на основании адреса источника пакета. Эти таблицы применимы для всех пакетов.<file>
 +# ip rule list
 +0:      from all lookup local 
 +32766:  from all lookup main 
 +32767:  from all lookup default
 +</file>
 +
 +Вывести содержимое таблицы local.
 +<file>
 +# ip route show table local
 +</file>
 +  * **Таблица local**. Пакет при выборе пути к месту назначения проверяется правилом с наименьшим приоритетом. Правило 0 отправит поиск маршрута в таблицу "local".
 +Таблица local проверяет не адресован ли пакет локальной машине (широковещательный или сетевой адреса интерфейсов). Таблицу local автоматически заполняют команды конфигурации сетевых интерфейсов.
 +  * **Таблица main** - является основной и именно она используется, если в команде, связанной с маршрутизацией, не указано какую таблицу использовать. При поднятии интерфейсов в неё прописываются маршруты к подсетям интерфейсов, стартовые скрипты также заносят в эту таблицу значение шлюза по-умолчанию. Использование команды route add администратором также может дополнить таблицу маршрутами. В общем случае, таблица main всегда содержит подходящий для пакета маршрут (например шлюз по-умолчанию).
 +  * **Таблица default** изначально пуста.
 +  * **Модификация таблицы маршрутизации**:<file>
 +Добавление маршрута через шлюз: ip route add 172.16.10.0/24 via 192.168.1.1
 +Добавление маршрута через интерфейс: ip route add 172.16.10.0/24 dev eth0
 +Маршрут с метрикой: ip route add 172.16.10.0/24 dev eth0 metric 100
 +</file>Кроме **add** также поддерживаются и другие действия: **del** — удалить маршрут; **replace** — заменить маршрут другим; **change** — изменить параметры маршрута.
 +
 +====== Policy-Routing. Маршрутизация для двух ISP ======
 +  * [[http://www.ibm.com/developerworks/ru/library/l-static-routing/|Статическая маршрутизация в Linux]]
 +  * [[http://habrahabr.ru/blogs/linux/108690/|Роутинг и policy-routing в Linux при помощи iproute2]]
 +  * [[http://www.k-max.name/linux/princip-raboty-routing-policy-database/|Принцип работы Routing Policy DataBase]]
 +
 +
 +**Пример 1. Создание таблицы для маршрутизации пакетов с определенного IP- адреса.** Локальная сеть 10.26.95.0/24 имеет выход в Интернет с двух разных провайдеров – основной ISP1 (статика) и резервный ISP2 ([[DHCP]]).
 +
 +  * В файле /etc/iproute2/rt_tables для удобства задаются символьные имена таблиц, это не обязательно так как все таблицы имеют цифровые идентификаторы. Например<file bash>
 +echo '82 velton' >> /etc/iproute2/rt_tables
 +</file>
 +
 +  * Маршрут по умолчанию для таблицы '82 velton'<file bash>
 +ip route add default via 82.117.232.1 table 82
 +</file>
 +  * Внесем правила маршрутизация для пользователя с IP 10.26.95.5, после чего эта таблица станет доступна в выводе команды ip rule list. Теперь все пользователи шлют пакеты через ISP1, кроме пользователя с IP 10.26.95.251<file bash>
 +ip rule add from 10.26.95.251/32 table 82
 +</file>
 +  * Очистить кеш маршрутизатора для вступления в силу сделанных изменений<file bash>
 +ip route flush cache
 +</file>
 +
 +
 +**Пример 2. Создание таблицы для маршрутизации, когда часть сетей (AS) нужно маршрутизировать через резервного провайдер ISP2. Например, это может быть дешевая точка обменом трафика или ресурсы провайдера. [[whois#whois_-_najti_vse_ips_vashego_provajdera|whois - найти все IPs вашего провайдера]]**
 +
 +  * Создаем как в предыдущем примере маршрут по умолчанию для таблицы '82 velton'<file bash>
 +ip route add default via 82.117.232.1 table 82
 +</file>
 +  * Прописываем статические маршруты на сети ISP2<file bash>
 +ip route add 82.117.224.0/19 via 82.117.234.15
 +ip route add 85.90.192.0/19 via 82.117.234.15
 +</file>
 +  * Добавим rule для всех сетей<file bash>
 +ip rule add to 82.117.224.0/19 table 82
 +ip rule add to 85.90.192.0/19 table 82
 +</file>
 +  * Очистить кеш маршрутизатора для вступления в силу сделанных изменений<file bash>
 +ip route flush cache
 +</file>