- Routing Tables
- Editing the routing tables
- Таблица маршрутизации в Linux
- Способы просмотра таблицы маршрутизации в Линукс
- Настройка
- ЗАКЛЮЧЕНИЕ
- Маршрутизация в Linux
- [править] Команды
- [править] Использование route
- [править] Использование ip
- [править] Действия с маршрутами
- [править] Equal Cost Multi Path
- [править] IPv6
- [править] Просмотр маршрутов до определенной сети
- [править] Пересылка пакетов между интерфейсами
- [править] Конфигурационные файлы
- [править] Policy routing
- [править] Демоны динамической маршрутизации
- [править] Дополнительная информация
- [править] Примечания
Routing Tables
This section describes the way to setup routing table as well as it explains the logic used to prioritize interfaces.
The routing table is stored in the kernel which merely acts upon it. The route itself is set by the user-space tools. There is no preference as any tool created for this reason will do. It can be either a DHCP client, ip command or route command.
It is important to understand that NetworkManager changes the routing table whenever it creates a new connection.
Routing table acts as a junction and is there to show where the different network subnets will be routed to. An example of a routing table is shown below.
$ ip route \ default via 10.0.0.1 dev wlp3s0 proto static metric 600 \ 10.0.0.0/24 dev wlp3s0 proto kernel scope link src 10.0.0.73 metric 600 \ 10.0.1.0/24 dev lxcbr0 proto kernel scope link src 10.0.1.1 \ 169.254.0.0/16 dev docker0 scope link metric 1000 linkdown \ 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown \ 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
The first column is the subnet with the “default” being a wildcard for everything else. The “via” fragment points to the however when it is missing it indicates that that network is connected directly and instead it describes a source address.
The metric field/column translates to the number of hops required to reach the destination and is used to determine which route shall be preferred when there are more than one route available for a specific destination. Since this value is related to the concept of distance, the lower it’s value is the better.
The metric value can be set manually however when NetworkManager creates a connection the following defaults are applied:
Editing the routing tables
The routing table can be added or modified using the standard ip command which is available on Ubuntu Core. You can find more information on its man page.
Separately it is possible to modify routing information per single connection using the nmcli tool. The parameters such as: gateway, routes and metrics can be modified.
The following options are responsible:
ipv4.gateway: ipv4.routes: ipv4.route-metric: ipv6.gateway: ipv6.routes: ipv6.route-metric:
These options can be modified in a following way:
$ nmcli connection modify +ipv4.routes ipv4.gateway $ nmcli connection modify ipv4.route-metric
Where is the connection name. You can obtain it by listing available connections on the system:
- is the destination network provided as a static IP address, subnet or “default”.
- is the new gateway information. is the new metric information.
Note that this kind of changes can be made separately for each connection thus it is possible to provide a fine grained control over how the packets directed to different networks are routed.
It is also important to understand that bringing up and down connections with different values set for these options is in fact changing the routing table.
Таблица маршрутизации в Linux
Статическая маршрутизация — это процесс, в котором администратор сети вручную настраивает сетевые интерфейсы, таким образом, чтобы пакеты пересылались из одной сети в другую. Администратор создает так называемую таблицу маршрутизации, в ней описаны различные маршруты пакетов. Любому из маршрутизаторов необходимо понимать на какой хост отправлять следующий пакет. Вот про это и будет идти речь в данной статье. Сегодня мы раскроем вопрос про маршрутизацию в Линукс, функциональность, настройку правил и правильное функционирование. Когда хосту необходимо послать пакет другому хосту он просматривает таблицу маршрутизации. В данной таблице указаны IP-address конечного пункта назначения, метрика, название интерфейсов, адреса маршрутизаторов по которые могут отправить пакет конечному получателю. В случае отсутствия маршрута для узла, применяется так называемый default шлюз, default маршрут. Подобное можно наблюдать на маршрутизаторе. Он сравнивает необходимый IP-address с таблицей маршрутизации, затем посылает дальше. Ниже будем рассматривать проверку проходящих маршрутов в системе, процесс настройки новых.
Способы просмотра таблицы маршрутизации в Линукс
Для просмотра таблицы в ОС Линукс можно использовать команду: $ netstat -r Как видно из скриншота выше, команда показала всего две записи. В первой записи указан шлюз (gateway) 192.168.168.254, вторая запись говорит о наличии доступа в подсеть 192.168.168.0 на интерфейсе eth0. Другой способ вывести информацию о статических маршрутов — использовать команду «route», однако, как правило утилита просит права супер пользователя, поэтому предварительно введем «su-«. $ su — # route Бывает, выводимых данных route и netstat недостаточно, так как в них выводится легкая информация, ее не хватает для понимания всей картины. Чтобы получить более подробную таблицу, можно воспользоваться утилитой «routel». $ routel В этой информации содержится:
- target (цель) — IP-адрес.
- gateway — адрес шлюза.
- source — адрес отправителя.
- dev — интерфейс.
Наиболее подходящий метод для просмотра таблицы маршрутизации в ОС Линукс – использовать утилиту «ip».
$ ip route
Подробней про «ip» можно посмотреть в другой статье: https://www.vseprolinux.ru/komanda-ip
- default – IP-адрес по умолчанию.
- via 192.168.168.254 — адрес шлюза, куда будут отправлять пакеты по умолчанию.
- dev eth0 — интерфейс сети, за счёт него открывается доступ к шлюзу.
- proto kernel — обозначает, что маршрут устанавливался ядром, если static, то установка выполняется администратором.
Настройка
Для настройки таблицы маршрутизации будем использовать команду ip route. Добавим временный статический маршрут 192.168.22.0/24 через шлюз 192.168.168.254.
ip route add 192.168.22.0/24 via 192.168.168.254
ВАЖНО! При выполнении такой команды добавиться временный статический маршрут, после перезагрузки системы он сотрется.
Для проверки необходимо проверить, проходит ли пакет из сети 192.168.22.0. Для этого будем использовать ip route get.
ip route get 192.168.22.30
Как говорилось выше, после перезагрузки Linux все эти добавленные адреса сотрутся. Для того, чтобы данные не стирались, необходимо записать их в файле.
post-up route add -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.168.254
pre-down route del -net 192.168.22.0 netmask 255.255.255.0 gw 192.168.168.254
- post-up — запустить команду после включения интерфейса.
- pre-down — запустить команду перед отключением интерфейса.
- net — задает целевую сеть
- netmask — сетевая маска.
- gw — шлюз.
Не так сложно, как могло показаться. После всей выполненной работы присоединенные маршруты будут работать даже после перезагрузки операционной системы Линукс.
Рассмотрим еще несколько примеров.
Изменяем статический маршрут:
ip route change 192.168.22.0/24 via 192.168.168.254
ЗАКЛЮЧЕНИЕ
Подобная работа написана для краткого рассмотрения функционирования маршрутизации в Линукс, как происходит настройка маршрутизации, а также для чего она необходима.
Маршрутизация в Linux
Linux предоставляет большой набор функций для маршрутизации и инструменты для ее настройки. Ядро 2.6.x поддерживает:
- Простую статическую маршрутизацию.
- Equal Cost Multi Path маршруты (маршруты до одной сети с одинаковым весом, которые выбираются с равной вероятностью).
- Blackhole-маршруты.
- Множественные таблицы маршрутизации.
- Policy Based Routing
[править] Команды
Для управления маршрутизацией применяются следующие команды: route, netstat, ip (последняя из пакета iproute2, возможно его придется установить).
Просмотреть таблицу можно следующими способами:
route -n (устаревшее) netstat -rn ip route show cat /proc/net/route
При этом следует учитывать, что доступ ко всем возможностям дает только ip. Используя route вы не только не сможете настроить «продвинутые» функции вроде политик маршрутизации, но и не увидите их существование в выводе команды просмотра, если они уже настроены в системе. Поэтому следует по возможности использовать ip.
Модификация таблицы маршрутизации:
[править] Использование route
Добавление маршрута через шлюз: route add -net 192.168.0.0/16 gw 10.0.0.1 Добавление маршрута через интерфейс: route add -net 192.168.0.0/16 dev eth1 Маршрут до отдельного хоста: route add -host 192.168.0.1 gw 172.16.0.1 Удаление маршрута: route del .
[править] Использование ip
Синтаксис ip по структуре напоминает синтаксис Cisco IOS. Любые опции могут быть сокращены до потери двусмысленности, например «ip ro ad» вместо «ip route add».
Добавление маршрута через шлюз: 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
Командой вида ip route add blackhole 10.56.50.0/27 можно добавить «зануленный» маршрут (аналог «ip route . null0» в Cisco). Пакеты в сеть с таким маршрутом будут удалены с причиной «No route to host». Может быть полезно для подавление DoS-атаки с хоста или иных подобных случаев.
[править] Действия с маршрутами
Кроме add также поддерживаются и другие действия:
- del — удалить маршрут.
- replace — заменить маршрут другим.
- change — изменить параметры маршрута.
[править] Equal Cost Multi Path
Если добавить два маршрута до одной и той же сети с одинаковой метрикой, ядро начнет распределять нагрузку между ними путем выбора того или другого с равной вероятностью. Работает и для более чем двух маршрутов. Предупреждение: это может вызвать проблемы со входящими соединениями, потому что иногда ответ может пойти по другому маршруту, чем пришел запрос. Будьте осторожны.
ip route add default dev eth0 ip route add default dev eth1
[править] IPv6
Настройка маршрутизации IPv6 почти идентична настройке для IPv4.
ip route add ::/0 via 2001:db8:dead:beef::1/64
В некоторых дистрибутивах еще есть нерешенная проблема с маршрутом по умолчанию (например, старые версии RHEL), используйте
[править] Просмотр маршрутов до определенной сети
На маршрутизаторах с длинной таблицей может быть неудобно просматривать вывод «ip route show» в поисках нужного маршрута. В этом случае можно использовать команду вида:
которая выведет маршруты только до указанной сети.
[править] Пересылка пакетов между интерфейсами
Linux позволяет разрешить или запретить пересылку пакетов между интерфейсами (forwarding). На рабочих станциях и серверах приложений ее можно запретить, на маршрутизаторах или межсетевых экранах она, очевидно, должна быть разрешена.
За этот параметр для IPv4 отвечает переменная net.ipv4.ip_forward (1 = «разрешить», 0 = «запретить»).
cat /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward
Для IPv6 используйте net.ipv6.conf.all.forwarding
cat /proc/sys/net/ipv6/conf/all/forwarding echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Чтобы настройки сохранились после перезагрузки, пропишите значения net.ipv4.ip_forward и net.ipv6.conf.all.forwarding в /etc/sysctl.conf.
[править] Конфигурационные файлы
Настройки статической маршрутизации находятся в различных файлах, в зависимости от дистрибутива.
- Debian GNU/Linux: /etc/network/interfaces
- RHEL/CentOS/Scientifix: etc/sysconfig/network-scripts/route-
- Gentoo: /etc/conf.d/net
(добавьте свои дистрибутивы, пожалуйста)
[править] Policy routing
ip route add default via 10.0.1.2 ip rule add from 192.168.1.1 lookup 3 ip route add default via 10.0.3.4 table 3
Для хоста 192.168.1.1 используется особенная таблица маршрутизации (table 3), не такая как для всех остальных хостов. В ней указан единственный маршрут — маршрут по умолчанию.
Все будут ходить через шлюз 10.0.1.2, а 192.168.1.1 — через 10.0.3.4.
[править] Демоны динамической маршрутизации
[править] Дополнительная информация
[править] Примечания
detector |
---|