Маршрутизація Linux визначає, через який мережевий інтерфейс і шлюз надсилати пакети. Сучасний інструмент — команда ip з пакета iproute2.
Основні команди ip
# Показати всі IP-адреси
ip addr show
ip a # коротка форма
# Показати таблицю маршрутизації
ip route show
ip r # коротка форма
# Показати маршрут до конкретного хоста
ip route get 8.8.8.8
# ARP-таблиця (відповідність IP → MAC)
ip neigh show
Тимчасові зміни (до перезавантаження)
# Додати IP-адресу на інтерфейс
sudo ip addr add 192.168.1.100/24 dev eth0
# Видалити IP-адресу
sudo ip addr del 192.168.1.100/24 dev eth0
# Додати маршрут через конкретний шлюз
sudo ip route add 10.0.0.0/8 via 192.168.1.1
# Додати дефолтний шлюз
sudo ip route add default via 192.168.1.1
# Видалити маршрут
sudo ip route del 10.0.0.0/8
# Увімкнути/вимкнути інтерфейс
sudo ip link set eth0 up
sudo ip link set eth0 down
Постійні маршрути через Netplan (Ubuntu 22.04+)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.10/24
routes:
- to: default
via: 192.168.1.1
- to: 10.0.0.0/8
via: 10.0.0.1
metric: 100
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
sudo netplan apply
Два інтерфейси з різними шлюзами
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0: # Основний (інтернет)
dhcp4: false
addresses: [1.2.3.4/24]
routes:
- to: default
via: 1.2.3.1
eth1: # Приватна мережа
dhcp4: false
addresses: [10.0.0.10/24]
routes:
- to: 10.0.0.0/8
via: 10.0.0.1
ifconfig застаріла і не встановлена за замовчуванням в Ubuntu 20.04+. Використовуйте ip addr і ip route — вони підтримують IPv6 і сучасні можливості ядра.Розбір типових помилок маршрутизації
"RTNETLINK answers: Network is unreachable" під час додавання маршруту через шлюз — означає, що вказаний шлюз недосяжний напряму, тобто не перебуває в одній підмережі з адресою інтерфейсу.
sudo ip route add 10.0.0.0/8 via 192.168.1.1
RTNETLINK answers: Network is unreachable
Перевірте, що на інтерфейсі вже є адреса з тієї самої підмережі, що й шлюз: ip addr show dev eth0. Якщо шлюз 192.168.1.1, а на інтерфейсі лише адреса 10.0.0.5/24, маршрут додати не вдасться, поки не з'явиться адреса з мережі 192.168.1.0/24.
Після netplan apply інтернет зникає повністю — майже завжди синтаксична помилка відступів у YAML (YAML критичний до пробілів) або конфлікт з NetworkManager/systemd-networkd, який керує тим самим інтерфейсом.
sudo netplan apply
Error in network definition //etc/netplan/01-netcfg.yaml: invalid indentation
Перевірте синтаксис перед застосуванням: sudo netplan try — команда покаже помилку і автоматично відкотить зміни через 120 секунд, якщо ви їх не підтвердите, що рятує від втрати SSH-доступу через одруківку.
Способи налаштування маршрутів: порівняння
| Спосіб | Постійність | Де застосовується | Синтаксис |
|---|---|---|---|
| ip route add | До перезавантаження | Будь-який Linux з iproute2 | Команда CLI |
| Netplan (YAML) | Постійно | Ubuntu 18.04+ | YAML-декларація |
| /etc/network/interfaces | Постійно | Debian, старий Ubuntu | Ключ-значення |
| NetworkManager (nmcli) | Постійно | Desktop-дистрибутиви, RHEL/CentOS | CLI або GUI |
Коли статичних маршрутів недостатньо
- Топологія мережі часто змінюється (кілька провайдерів, резервні канали) — потрібна динамічна маршрутизація (BGP, OSPF) через FRRouting або Bird, а не список статичних записів.
- Потрібен автоматичний failover між провайдерами — статичний маршрут не перемкнеться сам під час падіння лінку, для цього потрібні спеціальні механізми моніторингу і скрипти або протоколи маршрутизації.
- Сервер обслуговує десятки VLAN з незалежною маршрутизацією — ручне керування через
ip routeабо Netplan стає важким у підтримці, варто дивитися в бік виділеного роутера або FRRouting.
Перевірка результату
- Перевірте застосовані маршрути:
ip route showмає містити потрібний запис з правильним шлюзом і метрикою. - Перевірте зв'язність через конкретний маршрут:
ip route get 10.0.0.5має показати, через який інтерфейс і шлюз піде пакет. - Переконайтеся, що налаштування переживуть перезавантаження:
sudo netplan generate && sudo reboot, потім повторітьip route show. - Перевірте обидва інтерфейси під час мультигомінгу:
ping -I eth0 8.8.8.8іping -I eth1 10.0.0.1мають проходити незалежно один від одного.
Перед налаштуванням маршрутів корисно розібратися з масками підмереж — див. статтю про CIDR, а загальний механізм трансляції адрес описано в статті про NAT.