Linux. Полное руководство.

19.3. Расширенные средства маршрутизации. Комплекс iproute2.

19.3.1. Пакет iproute2.

Начиная с версии ядра 2.2, сетевая подсистема Linux была значительно переработана, в нее было добавлено много новых возможностей — управление трафиком, маршрутизация на основе правил и т.п. Доступ к этим возможностям предоставляется пакетом iproute2, входящим в состав большинства современных дистрибутивов.

В случае необходимости можно скачать этот пакет с сайта ftp://ftp.inr.ас.ru./ip-routing.

19.3.2. Утилита ip.

Утилита ip, входящая в состав пакета iproute2, объединяет в себе все возможности команд ifconfig, arp и route. Формат ее вызова такой:

Ip [ключи] объект [команда [аргументы команды]].

Ключи можно указывать следующие:

♦ -s — вывод статистической информации;

♦ -f — выбор протокола:

 • -f inet — протокол IPv4;

 • -f inet6 — протокол IPv6;

 • -f link — сетевое устройство;

♦ -r — разрешать IP-адреса в имена узлов;

♦ -V — печать версии программы.

Аргумент Объект позволяет выбрать объект, с которым будем работать:

♦ адрес — IPv4 или IPv6 адрес устройства;

♦ link — устройство;

♦ neighbour — ARP-адрес;

♦ route — маршрутизация;

♦ rule — база данных правил маршрутизации;

♦ madress — широковещательный адрес;

♦ tunnel — туннель через IP.

Аргумент Команда описывает действие над Объектом:

♦ ip link — конфигурация сетевого устройства;

♦ ip link set — изменение параметров сетевого устройства;

♦ ip link show — просмотр параметров сетевого устройства.

При изменении параметров сетевого устройства вы можете задать следующие аргументы:

♦ up — включить;

♦ down — выключить;

♦ arp on или arp off — изменение флага NOARP на устройстве;

♦ dynamic on или dynamic off — изменяет флаг DYNAMIC на устройстве;

♦ multicast on или multicast off — изменяет флаг MULTICAST на устройстве;

♦ name — изменяет имя устройства;

♦ mtu <Число> — изменяет значение MTU на устройстве;

♦ address <Адрес> — изменяет адрес на устройстве;

♦ broadcast <Адрес> — изменяет широковещательный адрес на устройстве.

19.3.3. Просмотр параметров сетевого устройства.

Команду ip link show лучше всего рассматривать на примерах. Для получения информации о состоянии устройства eth0 введите команду:

# ip link ls dev eth0.

Eth0: mtu 1500 qdisc cbq qlen 100.

Link/ether 00:44:67:91:31:1d brd ff:ff:ff:ff:ff:ff.

Получить статистику устройства eth0 можно командой:

#ip -s link ls dev eth0.

2: eth0: mtu 1500 qdisc cbq qlen 100.

Link/ether 00:44:67:91:31 brd ff:ff:ff:ff:ff:ff.

RX: bytes packets errors dropped overrun mcast.

Xxxxxxxx xxxxxx 0 0 0 0.

TX: bytes packets errors dropped carrier collsns.

Xxxxxxxx xxxxxx 0 0 0 132934.

Вместо xxxxxxxx xxxxxx вы увидите количество принятых(RX)/переданных(TX) байтов и пакетов.

19.3.4. Операции над адресами: команда ip address.

Команда ip address управляет адресами на устройстве. Объект для нее — это IPv4 или IPv6 адрес. Эта команда показывает адреса и их свойства, а также добавляет новые адреса.

Чтобы добавить адрес 192.168.0.1/24 с маской подсети 255.255.255.0 со стандартным широковещательным адресом и именем eth0:Alias, введите команду.

# ip addr add 192.168.0.1/24 brd + dev eth0 label eth0:Alias.

Используются еще следующие варианты команды:

Ip address delete предназначена для удаления адресов. Для удаления адреса 192.168.0.1/24 с устройства eth0 введите команду ip addr del 192.168.0.1/24 dev eth0.

Ip address show выводит информацию об адресе.

19.3.5. Управление таблицей маршрутизации.

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

Ip route add — добавить новый маршрут;

Ip route change — изменить маршрут;

Ip route replace — заменить маршрут.

Добавим маршрут к сети 192.168.0.0/24 через 192.168.1.1:

# ip route add 192.168.0.0/24 via 192.168.1.1.

19.3.6. Динамическая маршрутизация.

Команда ip route позволяет добавить динамический маршрут; шлюз будет выбираться в зависимости от текущей нагрузки на нега. Всегда будет выбираться шлюз с минимальной нагрузкой.

Пусть у нас есть два устройства — ppp0 и ppp1. Маршрут по умолчанию — через устройство ppp0, но если этот маршрут недоступен, будет использоваться ppp1:

# ip route add default scope global nexthop \

Dev ppp0 nexthop dev ppp1.

Для удаления маршрута используйте команду ip route delete:

# ip route del default scope global nexthop \

# dev ppp0 nexthop dev ppp1.

19.3.7. Управление правилами маршрутизации.

Для решения этой задачи предназначена команда ip rule. Маршрутизация производится в зависимости от:

♦ адреса получателя;

♦ адреса отправителя;

♦ IP-протокола;

♦ транспортного протокола.

По умолчанию используются три таблицы правил маршрутизации:

♦ Local — содержит таблицы для локальных и широковещательных адресов;

♦ Main — самая обыкновенная таблица маршрутизации;

♦ Default — пустая таблица по умолчанию.

Аргументы команды ip rule:

1. адрес отправителя;

2. адрес назначения;

3. имя интерфейса, с которого получен пакет;

4. метка пакета, которая устанавливается брандмауэром;

5. идентификатор таблицы маршрутизации: им может быть номер или строка из файла /etc/iproute2/rt_tables;

6. приоритет таблицы (число).

Вот несколько примеров. Требование пересылать пакеты с сети 192.168.0.0/24 согласно таблице Main:

# ip rule add from 192.203.80.0/24 table main prio 100.

Теперь допустим, что у нас есть два канала в Интернет (два провайдера): ppp1 с адресом 193.168.99.99, который связан с 193.168.99.100, и ppp2 с адресом 193.168.100.99, связанный с 195.1.1.1. Пользователь ivanov хочет, чтобы мы его пакеты отправляли через ppp2 (второго провайдера):

# echo 200 ivanov >> /etc/iproute2/rt_tables.

# ip rule add from 192.168.0.10 table ivanov.

# ip rule ls.

0: from all lookup local.

32765: from 192.168.0.10 lookup ivanov.

32766: from all lookup main.

32767: from all lookup default.

Теперь для этого пользователя назначим маршрут по умолчанию и очистим кэш-таблицы маршрутизации, чтобы наши изменения вступили в силу:

# ip route add default via 195.1.1.1 dev ppp2 table ivanov.

# ip route flush cache.

Рассмотрим еще один практический пример. Направим весь трафик на порт 21 через устройство eth1:

# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 21 -j MARK --set-mark 2.

Теперь нужно создать правила для помеченных пакетов.

# echo 202 21,tbl >> /etc/iproute2/rt_tables.

# ip rule add fwmark 2 table 21.tbl.

# ip route add default via 192.168.0.10 dev eth1 table 21.tbl.

# ip route flush cache.