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

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


iproute

Различия

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

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

iproute [2018/08/08 11:51] (текущий)
Строка 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>​
загрузка...
iproute.txt · Последние изменения: 2018/08/08 11:51 (внешнее изменение)