Базовая настройка маршрутизации трафика в Linux: ip route, iptables и policy routing — шпаргалка 2026 | AdminWiki

Базовая настройка маршрутизации трафика в Linux: ip route, iptables и policy routing — шпаргалка 2026

22 июля 2026 11 мин. чтения

Что вы найдете в этой шпаргалке

Вы держите в руках практическую памятку по управлению сетевым трафиком в Linux. Материал построен вокруг трех ключевых инструментов: ip route для статической маршрутизации, iptables для трансляции адресов и фильтрации, ip rule для гибкой политики маршрутизации на основе источника или метки пакета. Все примеры проверены на Ubuntu 24.04 и Debian 12, команды можно копировать и применять без адаптации.

Шпаргалка разбита на логические блоки. Сначала разберем базовые операции с таблицей маршрутизации: просмотр, добавление, удаление статических маршрутов и настройку шлюза по умолчанию. Затем перейдем к iptables: маскарадинг, проброс портов, сохранение правил. Третий блок посвящен policy routing с несколькими таблицами и ip rule. В конце - инструменты диагностики и сводная таблица команд для ежедневной работы. Если вам нужен более глубокий разбор конкретной темы, обратитесь к нашим расширенным руководствам по статической маршрутизации и Policy-Based Routing.

Управление таблицей маршрутизации: команды ip route

Утилита ip route из пакета iproute2 - основной инструмент для работы с таблицей маршрутизации в современных дистрибутивах. Команда route считается устаревшей и не рекомендуется к использованию. Все операции выполняются от root или через sudo.

Просмотр текущей таблицы маршрутизации

Для вывода основной таблицы маршрутизации выполните:

ip route show

Альтернативные формы той же команды: ip route list или ip r. Чтобы посмотреть содержимое конкретной таблицы, укажите её имя:

ip route show table main
ip route show table local

Разберем типовую строку вывода:

192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100
  • 192.168.1.0/24 - сеть назначения в CIDR-нотации.
  • dev eth0 - интерфейс, через который доступна сеть.
  • proto kernel - источник маршрута: kernel (автоматически при поднятии интерфейса), static (добавлен вручную), dhcp, bgp и другие.
  • scope link - область действия: link означает прямую связность без шлюза, global - через шлюз.
  • src 192.168.1.10 - предпочитаемый адрес источника для исходящих пакетов в эту сеть.
  • metric 100 - вес маршрута: при наличии нескольких путей до одной сети выбирается маршрут с меньшей метрикой.

Строка со шлюзом по умолчанию выглядит так:

default via 192.168.1.1 dev eth0 proto static

Здесь default - синоним сети 0.0.0.0/0, via 192.168.1.1 - адрес следующего перехода.

Добавление и удаление статических маршрутов

Синтаксис добавления маршрута к подсети:

ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0

Маршрут к конкретному хосту задается маской /32:

ip route add 203.0.113.50/32 via 192.168.1.254

Для IPv6 синтаксис аналогичен, но с ключевым словом -6:

ip -6 route add 2001:db8:1::/64 via 2001:db8:ff::1 dev eth0

Указание метрики позволяет влиять на приоритет маршрута:

ip route add 10.0.0.0/8 via 192.168.1.254 metric 200

Удаление маршрута выполняется командой del с тем же синтаксисом:

ip route del 10.0.0.0/8 via 192.168.1.254

Можно удалить все маршруты до конкретной сети разом:

ip route del 10.0.0.0/8

Маршруты, добавленные через ip route add, не переживают перезагрузку сети. Для постоянной конфигурации используйте Netplan, systemd-networkd или прописывайте команды в /etc/network/interfaces с директивой up. Подробный разбор постоянной настройки маршрутов через Netplan и systemd-networkd вы найдете в этом руководстве.

Настройка шлюза по умолчанию (default gateway)

Шлюз по умолчанию принимает все пакеты, для которых нет более специфичного маршрута. Добавление default gateway:

ip route add default via 192.168.1.1 dev eth0

Если шлюз уже существует и его нужно заменить, используйте replace - это атомарная операция, которая не приводит к разрыву соединения:

ip route replace default via 192.168.1.254 dev eth0

Предупреждение. При удаленной работе через SSH никогда не удаляйте старый шлюз до добавления нового. Последовательность ip route del default с последующим ip route add default via ... создает окно без маршрута по умолчанию. Вы потеряете связь с сервером. Правильный подход - сначала добавить новый шлюз с большей метрикой, проверить связность, затем удалить старый. Либо использовать ip route replace.

Удаление шлюза по умолчанию:

ip route del default

Для систем с несколькими интернет-каналами можно задать несколько default gateway с разными метриками. Трафик пойдет через шлюз с наименьшей метрикой, второй шлюз останется резервным. Детально этот сценарий разобран в блоке policy routing.

Фильтрация и перенаправление трафика с помощью iptables

Iptables - интерфейс к подсистеме netfilter ядра Linux. Правила организованы в таблицы и цепочки. Для задач маршрутизации важны три таблицы:

  • filter - таблица по умолчанию, цепочки INPUT, FORWARD, OUTPUT. Используется для фильтрации пакетов.
  • nat - трансляция сетевых адресов, цепочки PREROUTING, INPUT, OUTPUT, POSTROUTING.
  • mangle - модификация заголовков пакетов, установка fwmark для policy routing.

Порядок прохождения пакета через цепочки зависит от его направления. Для транзитного трафика (форвардинг) последовательность такова: PREROUTING → FORWARD → POSTROUTING. Для локально сгенерированных пакетов: OUTPUT → POSTROUTING.

Маскарадинг (SNAT/MASQUERADE) для выхода в интернет

Маскарадинг позволяет хостам локальной сети с частными адресами выходить в интернет через единственный публичный IP шлюза. Сначала включите форвардинг пакетов:

sysctl -w net.ipv4.ip_forward=1

Для сохранения настройки после перезагрузки раскомментируйте или добавьте строку в /etc/sysctl.conf:

net.ipv4.ip_forward=1

Правило маскарадинга для интерфейса eth0, смотрящего в интернет:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Разберем синтаксис: -t nat - работаем с таблицей nat, -A POSTROUTING - добавляем правило в конец цепочки POSTROUTING (срабатывает после принятия решения о маршрутизации), -o eth0 - применяем только к пакетам, покидающим интерфейс eth0, -j MASQUERADE - действие: подменить адрес источника на адрес исходящего интерфейса.

Разница между SNAT и MASQUERADE: SNAT требует явного указания адреса источника (-j SNAT --to-source 203.0.113.5) и работает быстрее, так как не проверяет адрес интерфейса для каждого пакета. MASQUERADE автоматически подставляет текущий IP интерфейса и необходим при динамическом внешнем адресе. Для статического публичного IP предпочтительнее SNAT.

Проброс портов (DNAT) к внутренним серверам

Проброс порта позволяет направить входящее соединение с внешнего интерфейса на конкретный хост и порт внутренней сети. Правило состоит из двух частей: DNAT в цепочке PREROUTING и разрешающее правило в цепочке FORWARD.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

Пояснение: -i eth0 - входящий интерфейс, -p tcp --dport 8080 - протокол и порт назначения, -j DNAT --to-destination 192.168.1.100:80 - подменить адрес назначения на внутренний сервер и порт 80.

Разрешаем форвардинг этого трафика:

iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

Если политика цепочки FORWARD по умолчанию DROP, добавьте также правило для обратного трафика:

iptables -A FORWARD -p tcp -s 192.168.1.100 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

Сохранение и восстановление правил iptables

Правила iptables хранятся в памяти ядра и теряются при перезагрузке. Для сохранения используйте пакет iptables-persistent:

apt install iptables-persistent

При установке пакет предложит сохранить текущие правила. Для ручного сохранения в любой момент:

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Восстановление правил:

iptables-restore < /etc/iptables/rules.v4

Сервис netfilter-persistent автоматически загружает сохраненные правила при старте системы.

Policy Routing: маршрутизация на основе правил

Стандартная таблица маршрутизации принимает решение только на основе адреса назначения. Policy routing расширяет эту логику: вы можете направить трафик через разные шлюзы в зависимости от адреса источника, метки пакета (fwmark), TOS-поля или входящего интерфейса. Это критически важно для серверов с несколькими интернет-каналами, VPN-туннелями и изолированными сетевыми средами.

Создание дополнительных таблиц маршрутизации

Linux поддерживает до 256 таблиц маршрутизации с идентификаторами от 0 до 255. Зарезервированы: 0 (unspec), 253 (default), 254 (main), 255 (local). Пользовательские таблицы принято размещать в диапазоне 1-252. Именованные таблицы регистрируются в файле /etc/iproute2/rt_tables:

# Добавляем строки в /etc/iproute2/rt_tables
100     ISP1
200     ISP2

Теперь наполним таблицу ISP2 маршрутами. Предположим, второй провайдер подключен через интерфейс eth1 с адресом шлюза 10.0.0.1:

ip route add 10.0.0.0/24 dev eth1 src 10.0.0.100 table ISP2
ip route add default via 10.0.0.1 dev eth1 table ISP2

Первый маршрут описывает непосредственно подключенную сеть провайдера. Второй - шлюз по умолчанию в рамках этой таблицы.

Настройка правил выбора таблицы (ip rule)

Правила ip rule определяют, какую таблицу маршрутизации использовать для конкретного пакета. Правила просматриваются в порядке возрастания приоритета (числового значения).

Просмотр текущих правил:

ip rule show

Вывод по умолчанию содержит три правила:

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Правило 0 обрабатывает локальные адреса самого хоста, 32766 - основная таблица, 32767 - таблица по умолчанию (обычно пустая).

Направим трафик, исходящий от подсети 192.168.2.0/24, через второго провайдера:

ip rule add from 192.168.2.0/24 lookup ISP2 priority 1000

Теперь любой пакет с адресом источника из этой подсети будет маршрутизироваться по таблице ISP2, а не main. Для привязки к конкретному приложению используйте маркировку пакетов через iptables:

iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1
ip rule add fwmark 1 lookup ISP2 priority 1001

Этот пример направляет весь исходящий HTTPS-трафик через второго провайдера независимо от адреса источника. Сценарий удобен для разделения трафика приложений между основным каналом и VPN-туннелем. Пошаговый разбор такой настройки с готовыми командами вы найдете в статье Source-based маршрутизация (PBR) на Linux.

Типовой сценарий: резервирование каналов с проверкой доступности

Схема с двумя провайдерами и автоматическим переключением при отказе основного канала - частый запрос в корпоративных средах. Простейший вариант - два шлюза по умолчанию с разными метриками в таблице main:

ip route add default via 192.168.1.1 metric 100
ip route add default via 10.0.0.1 metric 200

Пока шлюз с метрикой 100 доступен, трафик идет через него. При отказе интерфейса маршрут удаляется автоматически, и вступает в силу второй шлюз. Этот механизм работает только при физическом падении линка. Если канал «завис» на уровне провайдера, но линк остался поднятым, переключения не произойдет.

Для отслеживания логической доступности применяют скрипты с периодическим пингом внешнего хоста и условным изменением метрики:

#!/bin/bash
ping -c 3 -W 2 8.8.8.8 > /dev/null 2>&1
if [ $? -ne 0 ]; then
    ip route replace default via 10.0.0.1 metric 50
else
    ip route replace default via 192.168.1.1 metric 50
fi

Скрипт запускается по cron раз в минуту. При недоступности 8.8.8.8 через основной канал метрика резервного шлюза снижается до 50, и трафик переключается. Это минимальное решение. В production-средах рекомендуем использовать специализированные демоны вроде keepalived с VRRP или bird для динамической маршрутизации. Если вы проектируете отказоустойчивую инфраструктуру, присмотритесь к облачным решениям: Timeweb Cloud предоставляет готовую облачную инфраструктуру с настраиваемыми сетевыми интерфейсами и резервированием каналов.

Диагностика и отладка: как понять, куда идет трафик

Маршрутизация работает не так, как ожидалось? Набор инструментов для быстрой локализации проблемы.

ip route get - главный инструмент отладки. Показывает реальный путь пакета с учетом всех таблиц и правил policy routing:

ip route get 8.8.8.8 from 192.168.2.50

Вывод сообщит, через какой шлюз и интерфейс уйдет пакет, какую таблицу маршрутизации использовал и какой адрес источника будет подставлен.

traceroute - трассировка пути до удаленного хоста:

traceroute -n 8.8.8.8

Опция -n отключает DNS-резолвинг, ускоряя вывод. Для явного указания исходного адреса используйте -s.

tcpdump - захват трафика на интерфейсе для проверки, доходят ли пакеты:

tcpdump -i eth0 -n host 192.168.1.100 and port 80

Просмотр счетчиков iptables - покажет, сколько пакетов попало под каждое правило:

iptables -L -v -n -t nat
iptables -L -v -n -t filter

Ненулевые счетчики подтверждают, что правило срабатывает. Нулевые - повод проверить порядок правил и критерии совпадения.

Типовые ошибки и их признаки:

  • Забытый ip_forward - транзитные пакеты молча отбрасываются. Проверьте: sysctl net.ipv4.ip_forward.
  • Неверный порядок правил в iptables - пакет попадает под более раннее правило и не доходит до нужного. Используйте -I вместо -A для вставки в начало цепочки.
  • Конфликт маршрутов - две записи для одной сети с одинаковой метрикой. Ядро использует первую найденную, поведение недетерминировано.
  • Отсутствие обратного маршрута - пакет уходит через один шлюз, а ответ возвращается через другой и отбрасывается как невалидный. Проверяйте симметричность путей.
  • Неверный src в маршруте - пакет уходит с IP, не принадлежащим исходящему интерфейсу, и отбрасывается провайдером. Указывайте src явно в таблицах policy routing.

Для комплексного анализа сетевой связности в корпоративных средах обратитесь к руководству по IP-маршрутизации и диагностике.

Шпаргалка: типовые команды для ежедневной работы

Сводка всех ключевых команд из статьи в одной таблице. Копируйте и адаптируйте под свои адреса и интерфейсы.

Задача Команда
Просмотр таблицы маршрутизации ip route show
Просмотр конкретной таблицы ip route show table ISP2
Добавить маршрут к подсети ip route add 10.0.0.0/8 via 192.168.1.254
Добавить маршрут к хосту ip route add 203.0.113.50/32 via 192.168.1.254
Добавить маршрут с метрикой ip route add 10.0.0.0/8 via 192.168.1.254 metric 200
Добавить IPv6 маршрут ip -6 route add 2001:db8:1::/64 via 2001:db8:ff::1
Удалить маршрут ip route del 10.0.0.0/8
Добавить шлюз по умолчанию ip route add default via 192.168.1.1
Заменить шлюз по умолчанию ip route replace default via 192.168.1.254
Включить форвардинг sysctl -w net.ipv4.ip_forward=1
Маскарадинг (NAT) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Проброс порта (DNAT) iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
Сохранить правила iptables iptables-save > /etc/iptables/rules.v4
Восстановить правила iptables iptables-restore < /etc/iptables/rules.v4
Создать таблицу маршрутизации echo '200 ISP2' >> /etc/iproute2/rt_tables
Добавить маршрут в таблицу ip route add default via 10.0.0.1 table ISP2
Правило policy routing по источнику ip rule add from 192.168.2.0/24 lookup ISP2
Маркировка пакета в iptables iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1
Правило policy routing по метке ip rule add fwmark 1 lookup ISP2
Проверить путь пакета ip route get 8.8.8.8 from 192.168.2.50
Трассировка маршрута traceroute -n 8.8.8.8
Счетчики правил iptables iptables -L -v -n -t nat

Эта шпаргалка покрывает 90% ежедневных задач системного администратора по управлению маршрутизацией. Для углубленного изучения отдельных тем используйте наши расширенные руководства. Если вы активно работаете с генерацией конфигураций и документации, обратите внимание на AiTunnel - агрегатор API нейросетей, который ускоряет рутинные задачи по написанию скриптов и описанию инфраструктуры.

Поделиться:
Сохранить гайд? В закладки браузера