# Routing table _Сеть: L2 / L3 · LinuxLab Knowledge Base_ **TL;DR:** Таблица маршрутизации - список «куда направлять пакеты с таким destination». Самая длинная (longest-prefix) подходящая запись выигрывает. ## Что в таблице Каждая запись содержит: - **destination** - подсеть-получатель (`10.0.0.0/24`, `0.0.0.0/0` для default) - **next hop** - IP следующего роутера (`via X.X.X.X`) или `-` если подсеть напрямую подключена - **dev** - через какой интерфейс отправлять - **metric** - приоритет (меньше = лучше) при нескольких подходящих - **scope** - `link` (одна подсеть) или `global` - **proto** - кто записал маршрут: `kernel`, `static`, `boot`, `ra` (router advertisement), `bgp`, `ospf`, `dhcp` ## Longest prefix match Когда пакет уходит на `1.2.3.4`, ядро ищет в таблице **самую длинную** совпадающую подсеть. Например: ``` default via 192.168.1.1 dev eth0 10.0.0.0/8 via 192.168.1.254 dev eth0 10.42.0.0/16 via 10.42.0.1 dev wg0 ``` - `8.8.8.8` → не попадает в `10.x.x.x`, идёт через default → 192.168.1.1 - `10.99.5.5` → попадает в `/8` (но не в `/16`) → 192.168.1.254 - `10.42.7.7` → попадает в `/8` И в `/16`, но **`/16` длиннее** → wg0 Это правило универсально, BGP/OSPF не меняют: они только ВСТАВЛЯЮТ записи в таблицу, выбор делает kernel-FIB. ## Default route `0.0.0.0/0` - «всё что не покрыто более специфичной записью». На обычном хосте это **обязательная** запись для выхода в интернет. Без default route: ``` $ ping 8.8.8.8 ping: connect: Network is unreachable ``` ## Где смотреть ```bash ip route # вся таблица main ip -4 route show # только IPv4 ip route get 1.2.3.4 # какой маршрут СЕЙЧАС выберется для 1.2.3.4 ``` Помимо main есть ещё `local` (адреса самой машины) и `default` (отдельные tables через `ip rule` для policy-routing). ## Где это хранится в ядре - **RIB** (Routing Information Base) - то что вводят протоколы и админ - **FIB** (Forwarding Information Base) - оптимизированная для lookup структура (trie); именно по ней пакет маршрутизируется Для большинства задач пользователю эта разница неважна. ## Команды ```bash ip route ``` Текущая main-таблица маршрутизации ```bash ip route get 8.8.8.8 ``` Какой маршрут выберется для адреса 8.8.8.8 (с auto-selected source IP) ```bash sudo ip route add 10.5.0.0/16 via 10.0.0.1 ``` Добавить статический маршрут (требует NET_ADMIN) ```bash sudo ip route add default via 192.168.1.1 ``` Установить default gateway ```bash ip rule ``` Policy routing: правила выбора таблицы маршрутизации (для multi-WAN, VPN-split) ## См. также - [IPv4-адресация и CIDR](/kb/ipv4-addressing.md) - [Subnetting и CIDR](/kb/subnetting-cidr.md) - [Default gateway - выход из своей сети](/kb/default-gateway.md) - [Policy routing - rule-based маршрутизация](/kb/policy-routing.md) - [GRE-туннели и IPIP - point-to-point поверх IP](/kb/gre-tunnel.md) - [BGP - Border Gateway Protocol](/kb/bgp.md) - [OSPF - Open Shortest Path First](/kb/ospf.md)