Ip route save linux

Как добавить статические маршруты (routes) в Ubuntu

Written by on 28.09.2015 . Posted in Linux

Добаление маршрута в linux (static routes)

В память можно добавить маршрут используя route или через ip ro

синтаксис route
route add [-net|-host] netmask gw dev X

синтаксис ip ro
ip route add via

Все параметры можно посмотреть ip route help

примечание: в команде ip можно использовать сокращенный синтаксис ip ro … в место ip route …
Для удаления статического маршрута используйте del вместо add

Как сохранить статический маршрут

Все эти маршруты будут добавлены в память и сохранятся до перезагрузки. Если необходимо, загружать маршруты при загрузки системы, то необходимо добавить их в файл конфигурации интерфейсов (для ubuntu и debian). /etc/network/interfaces

Добавим в конец файла следующую сточку:

up ip ro add 192.168.2.0/24 via 192.168.0.1

пример файла конфигурации.

Как посмотреть маршруты в системе

Сохранить статический маршрут в CentOS (Redhat)

  1. Необходимо отредактировать (если нет создать) файл
    /etc/sysconfig/network-scripts/route-ethX — ethX заменить на номер интерфейса (eth0, eth1 …)
    добавить следующие строки:

X.X.X.X — заменить на нужные значения
Другой вариант добавить маршруты в файл /etc/sysconfig/static-routes. Если нет этого файла — необходимо создать.

Пример содержания фала:

PS: Если маршрутов много или ими нужно управлять (добавлять или удалять) то лучше для этого использовать демон статической маршрутизации
Вам помогла эта статья, не забудьте сказать «спасибо» для благодарности используется вертикальная и горизонтальная реклама на сайте.

Источник

Сохранить статические маршруты при перезагрузке.

Здравствуйте. Debian 7.8. Нужно при загрузке сетевой подсистемы восстанавливать содержимое одной таблицы и добавлять правило:

В /etc/network/interfaces работают команды up и down. А в файле /etc/network/if-up.d/whatever нужно делать отбор по нужному интерфейсу. Читайте маны, короче.

Добрый день. Спасибо за ответ.
По поводу дистрибутива я написал в первой строке.
По запросу man if-up.d получил это http://manpages.ubuntu.com/manpages/precise/man5/interfaces.5.html и другие похожие справки, но метода выполнения скрипта из if-up.d только для одного интерфейса не обнаружил.
В /etc/network/interfaces я пробовал и up, и post-up, например:

Демон BIRD умеет работать с многими таблицами маршртизации и статику. Попробуйте настроить там.

Так должно работать, обрати внимание, что секция помечена manual тебе надо будет руками написать команды с тегами up и down: поднять линк, добавить IP адрес и тд.

Спасибо за ответы.
2 Tok BIRD это похоже на «по воробьям из пушки». Мне нужно сделать банальную вещь без таких усложнений жизни.
2 Yur4eg получил примерно вот что:

ЕМНИП, скриптам из ip-up.d/ при вызове передаются параметры, в том числе и имя интерфейса. Т.е., каким-то таким способом:

All of these commands have access to the following environment variables.

IFACE physical name of the interface being processed

Спасибо за ответ. Без заключения в кавычки $IFACE и eth0 выдавало такое себе: /etc/network/if-up.d/scipt: line 3: [: ==: ожидается использование унарного оператора. После заключения в кавычки ошибок не выдает, но и результата тоже — таблица пустая, правило не добавляется. Похоже все эти способы не работают из-за сообщения об ошибке при перезагрузке сети о том, что eth1 не поднят, хотя по факту он поднят и работает. Видимо, нужно устранять эту проблему, однако как — без понятия. В syslog ничего подозрительного о eth1 нет.

Читайте также:  Как исправить выберите раздел установки windows

Хм, проблема решилась просто: для обоих интерфейсов в /etc/network/interfaces были указаны шлюзы, пока не закомментировал шлюз для одного из них, указанная выше проблема имела место быть. Меня слегка удивило это поведение, ведь шлюз по умолчанию все же один. Спасибо всем за помощь, воспользовался последним способом, вид примерно такой:

Хм, проблема решилась просто: для обоих интерфейсов в /etc/network/interfaces были указаны шлюзы, пока не закомментировал шлюз для одного из них, указанная выше проблема имела место быть.

А если бы ты привёл конфиг в начале темы — то это быстрее бы выловили.

P.S.: пометь тему, как решённую, имей совесть

Отметил. Я и подумать не мог, что указание шлюза для каждого интерфейса может повлечь такие проблемы. Есть шлюз по умолчанию и их не больше одного в каждой таблице, откуда ноги проблемы-то растут вообще. Вот пример обсуждения с такой же ошибкой После перезагрузки серва с Debian через раз поднимаются сетевые интерфейсы.. и никто не упомянул что указание шлюза для каждого интерфейса может привести к такой беде.

Источник

Linux Set Up Routing with ip Command

C an you explain the ip command to setup routing on Linux based systems? How do I use the ip command to configure the routing table of the Linux kernel?

The ip command can be used for the following tasks on Linux:

Tutorial details
Difficulty level Easy
Root privileges Yes
Requirements ip command
Est. reading time 10m
  1. Show / manipulate routing
  2. Show / manipulate devices
  3. Policy routing
  4. Tunnels

How to view or display Linux routing table

Type the following command:
$ ip route show
OR
$ ip route list
Sample Outputs:

Each entry is nothing but an entry in the routing table (Linux kernel routing table). For example, the following line represents the route for the local network. All network packets to a system in the same network are sent directly through the device ra0:

  • No ads and tracking
  • In-depth guides for developers and sysadmins at Opensourceflare✨
  • Join my Patreon to support independent content creators and start reading latest guides:
    • How to set up Redis sentinel cluster on Ubuntu or Debian Linux
    • How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
    • How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
    • A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
    • How to protect Linux against rogue USB devices using USBGuard

Join Patreon

Our default route is set via ra0 interface i.e. all network packets that cannot be sent according to the previous entries of the routing table are sent through the gateway defined in this entry i.e 192.168.1.1 is our default gateway.

How to set a route to the locally connected network eth0 on Linux

Type the following command to sent all packets to the local network 192.168.1.0 directly through the device eth0:, enter:
# ip route add 192.168.1.0/24 dev eth0
OR route traffic via 192.168.2.254 gateway for 192.168.2.0/24 network:
# ip route add 192.168.2.0/24 via 192.168.2.254 dev eth0

Set a default route

All network packets that cannot be sent according to the previous entries of the routing table are sent through the following default gateway:
# ip route add default via 192.168.1.254

Delete route from table

Type the following command
# ip route delete 192.168.1.0/24 dev eth0
Let us delete default route too:
# ip route add default via 192.168.1.254 dev eth0

Linux add a default route/static route or delete a route using the ip command.

How do I verify routing configurations?

Use the ping command or host command commands to make sure you can reach to your gateway:
ping Your-Gateway-Ip-Here
ping Your-DNS-Server-IP-Here
ping 192.168.1.254
ping www.cyberciti.biz
host www.cyberciti.biz

Linux Set Up Routing with ip command and save it to a configuration file

All routing settings made with the ip tool (or route command) are lost when you reboot Linux server. See our previous article about configuring static routes in a Debian/Ubuntu or CentOS/Red Hat Enteprise Linux systems.

How to add a static route on Ubuntu or Debian

Here is a sample for eth0 displayed using the cat command cat /etc/network/interfaces

Источник

Роутинг и policy-routing в Linux при помощи iproute2

Речь в статье пойдет о роутинге сетевых пакетов в Linux. А конкретно – о типе роутинга под названием policy-routing (роутинг на основании политик). Этот тип роутинга позволяет маршрутизировать пакеты на основании ряда достаточно гибких правил, в отличие от классического механизма маршрутизации destination-routing (роутинг на основании адреса назначения). Policy-routing применяется в случае наличия нескольких сетевых интерфейсов и необходимости отправлять определенные пакеты на определенный интерфейс, причем пакеты определяются не по адресу назначения или не только по адресу назначения. Например, policy-routing может использоваться для: балансировки трафика между несколькими внешними каналами (аплинками), обеспечения доступа к серверу в случае нескольких аплинков, при необходимости отправлять пакеты с разных внутренних адресов через разные внешние интерфейсы, даже для отправки пакетов на разные TCP-порты через разные интерфейсы и т.д.
Для управления сетевыми интерфейсами, маршрутизацией и шейпированием в Linux служит пакет утилит iproute2.

Этот набор утилит лишь задает настройки, реально вся работа выполняется ядром Linux. Для поддержки ядром policy-routing оно должно быть собрано с включенными опциями IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) и IP: policy routing (CONFIG_IP_MULTIPLE_TABLES), находящимися в разделе Networking support -> Networking options -> TCP/IP networking.

ip route

Для настройки роутинга служит команда ip route. Выполненная без параметров, она покажет список текущих правил маршрутизации (не все правила, об этом чуть позже):

Так будет выглядеть роутинг при использовании на интерфейсе eth0 IP-адреса 192.168.12.101 с маской подсети 255.255.255.0 и шлюзом по умолчанию 192.168.12.1.
Мы видим, что трафик на подсеть 192.168.12.0/24 уходит через интерфейс eth0. proto kernel означает, что роутинг был задан ядром автоматически при задании IP интерфейса. scope link означает, что эта запись является действительной только для этого интерфейса (eth0). src 192.168.12.101 задает IP-адрес отправителя для пакетов, попадающих под это правило роутинга.
Трафик на любые другие хосты, не попадающие в подсеть 192.168.12.0/24 будет уходить на шлюз 192.168.12.1 через интерфейс eth0 ( default via 192.168.12.1 dev eth0 ). Кстати, при отправке пакетов на шлюз, IP-адрес назначения не изменяется, просто в Ethernet-фрейме в качестве MAC-адреса получателя будет указан MAC-адрес шлюза (часто даже специалисты со стажем путаются в этом моменте). Шлюз в свою очередь меняет IP-адрес отправителя, если используется NAT, либо просто отправляет пакет дальше. В данном случае используются приватный адрес (192.168.12.101), так что шлюз скорее всего делает NAT.
А теперь залезем в роутинг поглубже. На самом деле, таблиц маршрутизации несколько, а также можно создавать свои таблицы маршрутизации. Изначально предопределены таблицы local, main и default. В таблицу local ядро заносит записи для локальных IP адресов (чтобы трафик на эти IP-адреса оставался локальным и не пытался уходить во внешнюю сеть), а также для бродкастов. Таблица main является основной и именно она используется, если в команде не указано какую таблицу использовать (т.е. выше мы видели именно таблицу main). Таблица default изначально пуста. Давайте бегло взглянем на содержимое таблицы local:

broadcast и local определяют типы записей (выше мы рассматривали тип default ). Тип broadcast означает, что пакеты соответствующие этой записи будут отправлены как broadcast-пакеты, в соответствии с настройками интерфейса. local – пакеты будут отправлены локально. scope host указывает, что эта запись действительная только для этого хоста.
Для просмотра содержимого конкретной таблицы используется команда ip route show table TABLE_NAME . Для просмотра содержимого всех таблиц в качестве TABLE_NAME следует указывать all , unspec или 0 . Все таблицы на самом деле имеют цифровые идентификаторы, их символьные имена задаются в файле /etc/iproute2/rt_tables и используются лишь для удобства.

ip rule

Как же ядро выбирает, в какую таблицу отправлять пакеты? Все логично – для этого есть правила. В нашем случае:

Число в начале строки – идентификатор правила, from all – условие, означает пакеты с любых адресов, lookup указывает в какую таблицу направлять пакет. Если пакет подпадает под несколько правил, то он проходит их все по порядку возрастания идентификатора. Конечно, если пакет подпадет под какую-либо запись маршрутизации, то последующие записи маршрутизации и последующие правила он уже проходить не будет.
Возможные условия:

  • from – мы уже рассматривали выше, это проверка отправителя пакета.
  • to – получатель пакета.
  • iif – имя интерфейса, на который пришел пакет.
  • oif – имя интерфейса, с которого уходит пакет. Это условие действует только для пакетов, исходящих из локальных сокетов, привязанных к конкретному интерфейсу.
  • tos – значение поля TOS IP-пакета.
  • fwmark – проверка значения FWMARK пакета. Это условие дает потрясающую гибкость правил. При помощи правил iptables можно отфильтровать пакеты по огромному количеству признаков и установить определенные значения FWMARK. А затем эти значения учитывать при роутинге.

Условия можно комбинировать, например from 192.168.1.0/24 to 10.0.0.0/8 , а также можно использовать префикc not , который указывает, что пакет не должен соответствовать условию, чтобы подпадать под это правило.
Итак, мы разобрались что такое таблицы маршрутизации и правила маршрутизации. А создание собственных таблиц и правил маршрутизации это и есть policy-routing, он же PBR (policy based routing). Кстати SBR (source based routing) или source-routing в Linux является частным случаем policy-routing, это использование условия from в правиле маршрутизации.

Простой пример

Теперь рассмотрим простой пример. У нас есть некий шлюз, на него приходят пакеты с IP 192.168.1.20. Пакеты с этого IP нужно отправлять на шлюз 10.1.0.1. Чтобы это реализовать делаем следующее:
Создаем таблицу с единственным правилом:

Создаем правило, отправляющее нужные пакеты в нужную таблицу:

Как видите, все просто.

Доступность сервера через несколько аплинков

Теперь более реалистичный пример. Имеется два аплинка до двух провайдеров, необходимо обеспечить доступность сервера с обоих каналов:

В качестве маршрута по умолчанию используется один из провайдеров, не важно какой. При этом веб-сервер будет доступен только через сеть этого провайдера. Запросы через сеть другого провайдера приходить будут, но ответные пакеты будут уходить на шлюз по умолчанию и ничего из этого не выйдет.
Решается это весьма просто:
Определяем таблицы:

Думаю теперь уже объяснять смысл этих строк не надо. Аналогичным образом можно сделать доступность сервера по более чем двум аплинкам.

Балансировка трафика между аплинками

Делается одной элегантной командой:

Эта запись заменит существующий default-роутинг в таблице main. При этом маршрут будет выбираться в зависимости от веса шлюза ( weight ). Например, при указании весов 7 и 3, через первый шлюз будет уходить 70% соединений, а через второй – 30%. Есть один момент, который при этом надо учитывать: ядро кэширует маршруты, и маршрут для какого-либо хоста через определенный шлюз будет висеть в таблице еще некоторое время после последнего обращения к этой записи. А маршрут до часто используемых хостов может не успевать сбрасываться и будет все время обновляться в кэше, оставаясь на одном и том же шлюзе. Если это проблема, то можно иногда очищать кэш вручную командой ip route flush cache .

Использование маркировки пакетов при помощи iptables

Допустим нам нужно, чтобы пакеты на 80 порт уходили только через 11.22.33.1. Для этого делаем следующее:

Первой командой маркируем все пакеты, идущие на 80 порт. Второй командой создаем таблицу маршрутизации. Третьей командой заворачиваем все пакеты с указанной маркировкой в нужную таблицу.
Опять же все просто. Рассмотрим также использование модуля iptables CONNMARK. Он позволяет отслеживать и маркировать все пакеты, относящиеся к определенному соединению. Например, можно маркировать пакеты по определенному признаку еще в цепочке INPUT, а затем автоматически маркировать пакеты, относящиеся к этим соединениям и в цепочке OUTPUT. Используется он так:

Пакеты, приходящие с eth0 маркируются 2, а с eth1 – 4 (строки 1 и 2). Правило на третьей строке проверяет принадлежность пакета к тому или иному соединению и восстанавливает маркировки (которые были заданы для входящих) для исходящих пакетов.
Надеюсь изложенный материал поможет вам оценить всю гибкость роутинга в Linux. Спасибо за внимание 🙂

Источник

Читайте также:  Версии линукс для начинающих
Оцените статью