Эта статья одна из статей про работу сетей в Linux. Вы уже знаете, что все данные в сети передаются в виде пакетов, а чтобы компьютер знал куда нужно отправить тот или иной пакет используются IP адреса. Но пакету, перед тем, как он достигнет точки назначения нужно пройти множество компьютеров и маршрутизаторов.
Каждому из маршрутизаторов нужно знать на какой компьютер передавать пакет дальше. Именно это мы и обсудим в этой статье. Сегодня нас будет интересовать маршрутизация в Linux, как это работает, как настроить правила и заставить все работать как нужно.
Сетевые маршруты в Linux
Как я уже сказал, сетевые маршруты необходимы чтобы компьютеры могли определить по какой цепочке должен пойти пакет, чтобы достигнуть цели. Маршруты можно настроить на уровне интерфейса или маршрутизатора.
Когда компьютеру нужно отправить пакет в сеть он смотрит таблицу маршрутизации, в ней указанны ip адреса пунктов назначения и адреса интерфейсов и роутеров в домашней сети, которые могут отправить пакет по нужному адресу. Если для цели маршрут не указан то используется так называемый шлюз по умолчанию или маршрут по умолчанию. Точно такая же картина наблюдается на роутере. Устройство смотрит на IP адрес назначения и сверяет его со своей таблицей маршрутизации, а потом отправляет дальше.
Утилита Route
Ниже мы рассмотрим как проверить текущие маршруты в системе, а также как настроить новые.
Как посмотреть таблицу маршрутизации
Перед тем как что-либо менять, нужно понять какие правила уже используются. В Linux для этого существует несколько команд. Чтобы посмотреть таблицу маршрутизации можно использовать команду route:
Вот так выглядит таблица маршрутизации linux. Тут выводится достаточно простая информация, которой не всегда достаточно чтобы понять суть дела. Более подробно можно посмотреть с помощью команды routel:
Тут вы уже можете видеть IP адрес цели (target), IP адрес шлюза (gateway), IP отправителя (source), протокол, и даже сетевой интерфейс. Но самый удобный способ посмотреть таблицу маршрутизации linux — это команда ip:
Вывод похож на результат предыдущей команды, но выглядит не совсем привычно, это потому, что вывод команды можно использовать в качестве аргумента для ip route add или ip route del. Это очень удобно. Как вы видите, в качестве шлюза по умолчанию везде используется 192.168.1.1. Рассмотрим подробнее что означает вывод этой команды:
- default — в данной строке означает вариант по умолчанию. Здесь должен быть ip адрес цели или маска подсети;
- via 192.168.1.1 — указывает через какой шлюз мы можем добраться до этой цели, у нас это 192.168.1.1;
- dev enp2s0 — сетевой интерфейс, с помощью которого будет доступен этот шлюз;
- proto static — означает, что маршрут был установлен администратором, значение kernel значит что он был установлен ядром;
- metric — это приоритет маршрута, чем меньше значение — тем выше приоритет.
А теперь рассмотрим выполняется настройка маршрутов Linux.
43 Таблица маршрутизации
Настройка маршрутов в Linux
Вы можете настраивать таблицу маршрутизации с помощью команды ip. Например, чтобы изменить маршрут по умолчанию достаточно выполнить:
ip route add default via 192.168.1.1
Так вы можете добавить маршрут для любого IP адреса, например, для 243.143.5.25:
sudo ip route add 243.143.5.25 via 192.168.1.1
Все очень просто, сначала указывается IP адрес цели, а затем шлюз в локальной сети, через который можно достичь этого адреса. Но такие маршруты будут активны только до перезагрузки, после перезагрузки компьютера они будут автоматически удалены. Чтобы маршруты сохранились их нужно добавить в файл конфигурации.
В операционных системах семейства Red Hat используются конфигурационные файлы /etc/sysconfig/network-scripts/route-ethX. Каждый файл может описывать несколько маршрутов, например:
GATEWAY=10.10.0.1
NETMASK=255.0.0.0
IPADDR=10.10.0.22
Здесь gateway — шлюз по умолчанию для этого интерфейса, netmask — маска сети, а ipaddr — ip адрес интерфейса. В Debian и основанных на нем дистрибутивах можно настроить маршруты в файле /etc/network/interfaces. Здесь команда route добавляется в секцию iface. Например:
up route add -net 10.10.0.0 netmask 255.0.0.0 gw 10.10.0.1
С помощью опции -net мы указываем целевую сеть, netmask — это маска сети, а gw — шлюз. Все очень просто. Теперь добавленные маршруты останутся даже после перезагрузки.
Выводы
В этой небольшой статье мы кратко рассмотрели как работает маршрутизация в Linux, как выполняется настройка маршрутизации в linux, а также зачем это нужно. Надеюсь, эта информация была полезной для вас.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Источник: losst.pro
Маршрутизация в Linux
Linux предоставляет большой набор функций для маршрутизации и инструменты для ее настройки. Ядро 2.6.x поддерживает:
- Простую статическую маршрутизацию.
- Equal Cost Multi Path маршруты (маршруты до одной сети с одинаковым весом, которые выбираются с равной вероятностью).
- Blackhole-маршруты.
- Множественные таблицы маршрутизации.
- Policy Based Routing
Команды
Для управления маршрутизацией применяются следующие команды: route, netstat, ip (последняя из пакета iproute2, возможно его придется установить).
Просмотреть таблицу можно следующими способами:
route -n (устаревшее) netstat -rn ip route show cat /proc/net/route
При этом следует учитывать, что доступ ко всем возможностям дает только ip. Используя route вы не только не сможете настроить «продвинутые» функции вроде политик маршрутизации, но и не увидите их существование в выводе команды просмотра, если они уже настроены в системе. Поэтому следует по возможности использовать ip.
Модификация таблицы маршрутизации:
ip [опции] route [опции]
Использование route
Добавление маршрута через шлюз: route add -net 192.168.0.0/16 gw 10.0.0.1 Добавление маршрута через интерфейс: route add -net 192.168.0.0/16 dev eth1 Маршрут до отдельного хоста: route add -host 192.168.0.1 gw 172.16.0.1 Удаление маршрута: route del .
Использование ip
Синтаксис ip по структуре напоминает синтаксис Cisco IOS.
Любые опции могут быть сокращены до потери двусмысленности, например «ip ro ad» вместо «ip route add».
Добавление маршрута через шлюз: ip route add 172.16.10.0/24 via 192.168.1.1 Добавление маршрута через интерфейс: ip route add 172.16.10.0/24 dev eth0 Маршрут с метрикой: ip route add 172.16.10.0/24 dev eth0 metric 100
Командой вида ip route add blackhole 10.56.50.0/27 можно добавить «зануленный» маршрут (аналог «ip route . null0» в Cisco). Пакеты в сеть с таким маршрутом будут удалены с причиной «No route to host». Может быть полезно для подавление DoS-атаки с хоста или иных подобных случаев.
Действия с маршрутами
Кроме add также поддерживаются и другие действия:
- del — удалить маршрут.
- replace — заменить маршрут другим.
- change — изменить параметры маршрута.
Equal Cost Multi Path
Если добавить два маршрута до одной и той же сети с одинаковой метрикой, ядро начнет распределять нагрузку между ними путем выбора того или другого с равной вероятностью. Работает и для более чем двух маршрутов. Предупреждение: это может вызвать проблемы со входящими соединениями, потому что иногда ответ может пойти по другому маршруту, чем пришел запрос. Будьте осторожны.
ip route add default dev eth0 ip route add default dev eth1
IPv6
Настройка маршрутизации IPv6 почти идентична настройке для IPv4.
ip route add ::/0 via 2001:db8:dead:beef::1/64
В некоторых дистрибутивах еще есть нерешенная проблема с маршрутом по умолчанию (например, старые версии RHEL), используйте
ip route add 2000::/3 .
Просмотр маршрутов до определенной сети
На маршрутизаторах с длинной таблицей может быть неудобно просматривать вывод «ip route show» в поисках нужного маршрута. В этом случае можно использовать команду вида:
ip route show 10.0.0.0/8
которая выведет маршруты только до указанной сети.
Пересылка пакетов между интерфейсами
Linux позволяет разрешить или запретить пересылку пакетов между интерфейсами (forwarding). На рабочих станциях и серверах приложений ее можно запретить, на маршрутизаторах или межсетевых экранах она, очевидно, должна быть разрешена.
За этот параметр для IPv4 отвечает переменная net.ipv4.ip_forward (1 = «разрешить», 0 = «запретить»).
cat /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/ip_forward
Для IPv6 используйте net.ipv6.conf.all.forwarding
cat /proc/sys/net/ipv6/conf/all/forwarding echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Чтобы настройки сохранились после перезагрузки, пропишите значения net.ipv4.ip_forward и net.ipv6.conf.all.forwarding в /etc/sysctl.conf.
Конфигурационные файлы
Настройки статической маршрутизации находятся в различных файлах, в зависимости от дистрибутива.
- Debian GNU/Linux: /etc/network/interfaces
- RHEL/CentOS/Scientifix: etc/sysconfig/network-scripts/route-
- Gentoo: /etc/conf.d/net
(добавьте свои дистрибутивы, пожалуйста)
Policy routing
ip route add default via 10.0.1.2 ip rule add from 192.168.1.1 lookup 3 ip route add default via 10.0.3.4 table 3
Для хоста 192.168.1.1 используется особенная таблица маршрутизации (table 3), не такая как для всех остальных хостов. В ней указан единственный маршрут — маршрут по умолчанию.
Все будут ходить через шлюз 10.0.1.2, а 192.168.1.1 — через 10.0.3.4.
Демоны динамической маршрутизации
Дополнительная информация
- LARTC (англ.) — правильный документ по маршрутизации в Linux
Примечания
Сетевой уровень
Источник: xgu.ru
Переводы страниц руководства
route изменяет таблицы IP-маршрутизации ядра. Программа главным образом используется для настройки статических маршрутов к определённым узлам или сетям через интерфейс после того, как интерфейс был настроен с помощью программы ifconfig(8).
При использовании опций add или del, route изменяет таблицы маршрутизации. Если эти опции не указаны, route показывает текущее содержимое таблиц маршрутизации.
ОПЦИИ
-A семейство Использовать указанное семейство адресов (например, ‘inet’; воспользуйтесь командой ‘route —help’ для получения полного списка). -F Воздействует на таблицу маршрутизации ядра FIB (Forwarding Information Base — база информации о продвижении пакетов). Используется по умолчанию. -C Воздействует на кэш маршрутизации ядра. -v Выбрать режим вывода сообщений о подробностях. -n Показать числовые адреса, не пытаясь определить символьные имена узлов. Это полезно, если вы пытаетесь определить, почему не работает маршрут до сервера имён. -e Использовать формат отображения таблицы маршрутизации как в netstat(8). -ee выведет очень длинные строки со всеми параметрами из таблицы маршрутиазции. del Удалить маршрут. add Добавить новый маршрут. цель Целевая сеть или узел. Вы можете указать IP-адрес в десятично-точечной нотации или имя узла/сети. -net цель является сетью. -host цель является узлом. netmask маска_сети При добавлении маршрутов к сетям указывается сетевая маска. gw шлюз Маршрутизировать пакеты через шлюз. ЗАМЕЧАНИЕ: Указанный шлюз для начала должен быть доступен. Обычно это означает, что сначала вы должны настроить статические маршруты к шлюзу. Если вы укажете адрес одного из ваших локальных интерфейсов, он будет использован для определения, через какой интерфейс нужно отправлять пакеты. Это средство достижения с системами BSD. metric M Задаёт в поле метрики таблицы маршрутизации значение M (используется демонами маршрутизации). mss M Задаёт максимальный размер сегмента TCP (TCP Maximum Segment Size — MSS) для соединения по указанному маршруту в M байт. По умолчанию используется MTU устройства за вычетом размера заголовков, или наименьшее значение MTU, определённое протоколом Path MTU Discovery. Значение можно использовать для принудительного уменьшения размера пакетов TCP, на другом конце, если определение по протоколу Path MTU Discovery не работает (обычно это происходит по причине неправильной настройки пакетных фильтров, блокирующих сообщения ICMP Fragmentation Needed — требуется фрагментация) window W Задаёт размер окна TCP для соединений по указанному маршруту в W байт. Обычно это используется в сетях AX.25 и с драйверами, не поддерживающими обработку кадров один-к-одному. irtt I Задаёт начальное время кругового обхода для соединений TCP через данный маршрут в I миллисекунд (1-12000). Обычно это используется только в сетях AX.25. Если не указано, используется значение по умолчанию из RFC 1122 — 300 миллисекунд. reject Установка блокирующего маршрута, который завершит просмотр таблицы маршрутизации ошибкой. Это, например, используется для сокрытия сетей до использования маршрута по умолчанию. Это используется НЕ для фильтрации пакетов. mod, dyn, reinstate Установаить динамический или изменяемый маршрут. Эти индикаторы используются в целях диагностики, и обычно они устанавливаются демонами маршрутиазции. dev интерфейс Принудительно связать маршрут с указанным интерфейсом, поскольку ядро в ином случае определит его самостоятельно (проверкой уже существующих маршрутов и устройств, после чего маршрут будет добавлен). В большинстве обычных четей вам это не потребуется. Если dev интерфейс является последней опцией в командной строке, слово dev можно не указывать, потому что оно подразумевается по умолчанию. В противном случае порядок опций маршрута (metric — netmask — gw — dev) не имеет значения.
ПРИМЕРЫ
route add -net 127.0.0.0 netmask 255.0.0.0 dev lo Добавляет обычную петлевую запись, использующую сетевую маску 255.0.0.0 и связанную с устройством «lo» (подразумевая что устройство до этого уже было корректно настроено с помощью ifconfig(8)). route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0 Добавить маршрут к локальной сети 192.56.76.x через «eth0». Слово «dev» в данном случае можно не указывать. route del default Удалить текущий маршрут по умолчанию, помеченный как «default» или 0.0.0.0 в поле места назначения текущей таблицы маршрутизации. route add default gw mango-gw Добавить маршрут по умолчанию (который будет использоваться если нет других подходящих маршрутов). При использовании этого правила все пакеты будут направляться в шлюз «mango-gw». Устройство, которое будет использоваться, будет зависеть от того, можно ли через него достичь «mango-gw» — статический маршрут до «mango-gw» должен быть настроен до этого. route add ipx4 sl0 Добавляет маршрут к узлу «ipx4» через интерфейс SLIP (подразумевая, что «ipx4» — это узел SLIP). route add -net 192.57.66.0 netmask 255.255.255.0 gw ipx4 Эта команда добавляет сеть «192.57.66.x» через имеющийся маршурт на интерфейсе SLIP. route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 Это не точное описание, некоторые люди знают как сделать его более точным. Это множество всех IP-маршрутов класса D (мультикаст), направленных через «eth0». Это обычная строка настройки ядра с поддержкой мультикастинга. route add -net 10.0.0.0 netmask 255.0.0.0 reject Эта команда создаёт отбрасывающий маршрут для частной сети «10.x.x.x.»
ВЫВОД
Выводимая из таблицы маршрутизации информация организована в следующие колонки:
Destination Сеть назначения или целевой узел. Gateway Адрес шлюза или ’*’, если он не настроен. Genmask Сетевая маска сети назначения; ’255.255.255.255’ если это узел, ’0.0.0.0’ если это маршрут по умолчанию (default). Flags Возможны следующие индикаторы:
U — маршрут активен (up)
H — цель является узлом (host)
G — используется шлюз (gateway)
R — динамический восстанавливаемый маршрут (reinstate)
D — маршрут динамически (dynamically) настроенный демоном или перенаправленный
M — изменённый (modified) демоном маршрутизации или перенаправленный
A — настроенный (addrconf)
C — запись в кэше (cache)
! — отбрасывающий (reject) маршрутMetric ’Расстояние’ до цели (обычно измеряемое в количестве переходов). Оно не используется последними ядрами, но может потребоваться демонам маршрутизации. Ref Количество ссылок на этот маршрут. (В некоторых ядрах Linux не используется.) Use Количество поисков маршрута. В зависимости от того, используется ли опция -F или -C, это будет количество промахов (-F) или попаданий (-C) в кэш. Iface Интерфейс, через который будут отправляться маршрутизируемые пакеты. MSS Максимальный размер сегмента для соединений TCP по этому маршруту. Window Размер окна по умолчанию для соединений TCP по этому маршруту. irtt Начальное время кругового обхода (Round Trip Time). Ядро использует его для определения лучших параметров протокола TCP без ожидания (возможно долгого) ответов. HH (только кэшированные) Количество ARP-записей и кэшированных маршрутов, ссылающихся на кэш аппаратного заголовка кэшированного маршрута. Принимает значение -1, если аппаратный адрес не требуется для кэширования маршрута интерфейса (например, lo). Arp (только кэшированные) Говорит о том, актуален ли кэшированный маршрут.
ФАЙЛЫ
/proc/net/ipv6_route
/proc/net/route
/proc/net/rt_cache
СМОТРИ ТАКЖЕ
ifconfig(8), netstat(8), arp(8), rarp(8)
ИСТОРИЯ
route для Linux изначально был написан Фрэдом Н. ван Кемпеном (Fred N. van Kempen), а затем изменён Джоанном Стиллом (Johannes Stille) и Линусом Торвальдсом (Linus Torvalds) для pl15. Алан Кокс (Alan Cox) добавил опции mss и window для Linux 1.1.22. Поддержка irtt и слияние с netstat выполнил Бернд Экенвелс (Bernd Eckenfels).
АВТОР
В настоящее время сопровождается Филом Блюнделлом (Phil Blundell) и Берндом Экенфельсом (Bernd Eckenfels) .
АВТОР ПЕРЕВОДА
Перевод на русский язык выполнил Владимир Ступин .
net-tools | ROUTE (8) | 2007-12-02 |
Перейти в начало страницы | Раздел 8 | Главный указатель.
Сгенерировано manServer 1.07 из /home/stupin/man/man8/route.8.gz с использованием макросов man.
Источник: manpages.ylsoftware.com