Статическая маршрутизация
Маршрут — это правило, устанавливаемое в ядре, чтобы определить, какой физический сетевой интерфейс или какой шлюз использовать, чтобы достичь определённой сети (или отдельного компьютера). Существует множество типов маршрутизируемых протоколов; данная статья описывает маршрутизацию протокола IP в ядре Linux.
Хотя маршруты IP хранятся в ядре, их можно модифицировать с помощью пользовательских инструментов, как это описано в следующих примерах.
Отображение маршрутов
Показать таблицу маршрутизации с помощью iproute2:
user $
ip route
default via 192.168.1.1 dev wlan1 metric 1 192.168.50.0/24 dev lan proto kernel scope link src 192.168.50.1 127.0.0.0/8 via 127.0.0.1 dev lo 192.168.1.0/24 dev wlan1 proto kernel scope link src 192.168.1.1
Или показать таблицу маршрутизации с использованием sys-apps/net-tools:
user $
netstat -rn
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 lan 192.168.1.0 0.0.0.0 255.255.255.0 U 2000 0 0 wlan1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.1 0.0.0.0 UG 2000 0 0 wlan1
Добавление статического маршрута
Для добавления статического маршрута необходимо знать адрес IP, маску подсети (CIDR) и шлюз.
В этом примере мы прокладываем маршрут к сети 10.10.10.0
с сетевой маской 255.255.255.0
через шлюз 192.168.1.50
. Для команд из sys-apps/iproute2 (ip) требуется использование синтаксиса подсетей в стиле CIDR. Следующий пример команды добавляет маршрут 10.10.10.0/24
:
root #
ip route add 10.10.10.0/24 via 192.168.1.50
Показать таблицу маршрутизации с помощью команды ip route:
user $
ip route
default via 192.168.1.1 dev wlan1 metric 1 10.10.10.0/24 dev wlan1 via 192.168.1.50 src 10.10.10.1 192.168.50.0/24 dev lan proto kernel scope link src 192.168.50.1 127.0.0.0/8 via 127.0.0.1 dev lo 192.168.1.0/24 dev wlan1 proto kernel scope link src 192.168.1.1
В старых системах вместо использованного в примере ip, возможно, единственно доступными командами могут быть netstat или route (из пакета sys-apps/net-tools).
С помощью команды route статический маршрут добавляется следующим образом:
root #
route add -net 10.10.10.0 netmask 255.255.255.0 gw 192.168.1.50
Показать таблицу маршрутизации с помощью netstat (sys-apps/net-tools):
user $
netstat -rn
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.10.0 192.168.1.50 255.255.255.0 UG 0 0 0 wlan1 192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 lan 192.168.1.0 0.0.0.0 255.255.255.0 U 2000 0 0 wlan1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.1 0.0.0.0 UG 2000 0 0 wlan1
Таблица маршрутизации отсортирована от наиболее конкретных маршрутов к наиболее общим. Так она прочитывается в процессе маршрутизации. Совпадение с наибольшим префиксом означает самую маленькую сеть, или сеть с самой длинной сетевой маской, или самый конкретный маршрут, например 255.255.255.255
находится на первой позиции в таблице маршрутизации
Добавление постоянного статического маршрута
Пользователям netifrc (стандартный инструмент управления сетью в OpenRC) для добавления постоянного статического маршрута нужно открыть /etc/conf.d/net в любимом текстовом редакторе и изменить его соответствующим образом.
Посмотрите свою текущую таблицу маршрутизации для справки.
routes_wlan1="10.10.10.0/24 via 192.168.1.50
default via 192.168.1.1"
Если в качестве сетевого менеджера используется dhcpcd, статический маршрут вместо этого должен быть записан в /etc/dhcpcd.conf.
Оба указанные выше конструкции означают:
- IP-пакеты, предназначенные для сети
10.10.10.0/24
, будут отправлены в192.168.1.50
. - IP-пакеты, предназначенные для всех остальных сетей
0.0.0.0/0
, будут отправлены в192.168.1.1
.
0.0.0.0/0
означает все другие сети без префикса (маски подсети), то есть маршрут по умолчанию.Маршрут по умолчанию 0.0.0.0/0
будет использован, если:
- Узел не имеет физического или логического интерфейса IP в целевом сегменте сети.
- Узел вынужден отправлять IP-пакеты за пределы своего сегмента IP-сети, и в таблице маршрутизации явно не указан маршрут к целевой сети IP.
Смотрите также
- iproute2 — a tool developed to unify network interface configuration, routing, and tunneling for Linux systems.
- Network management — describes possibilities for managing the network stack.
Внешние ресурсы
- Совпадение с наибольшим префиксом (Википедия)
- Gentoo Bug 5409326