Linux где хранятся маршруты

Routing Tables

This section describes the way to setup routing table as well as it explains the logic used to prioritize interfaces.

The routing table is stored in the kernel which merely acts upon it. The route itself is set by the user-space tools. There is no preference as any tool created for this reason will do. It can be either a DHCP client, ip command or route command.

It is important to understand that NetworkManager changes the routing table whenever it creates a new connection.

Routing table acts as a junction and is there to show where the different network subnets will be routed to. An example of a routing table is shown below.

$ ip route \ default via 10.0.0.1 dev wlp3s0 proto static metric 600 \ 10.0.0.0/24 dev wlp3s0 proto kernel scope link src 10.0.0.73 metric 600 \ 10.0.1.0/24 dev lxcbr0 proto kernel scope link src 10.0.1.1 \ 169.254.0.0/16 dev docker0 scope link metric 1000 linkdown \ 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown \ 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 

The first column is the subnet with the “default” being a wildcard for everything else. The “via” fragment points to the however when it is missing it indicates that that network is connected directly and instead it describes a source address.

The metric field/column translates to the number of hops required to reach the destination and is used to determine which route shall be preferred when there are more than one route available for a specific destination. Since this value is related to the concept of distance, the lower it’s value is the better.

The metric value can be set manually however when NetworkManager creates a connection the following defaults are applied:

Editing the routing tables

The routing table can be added or modified using the standard ip command which is available on Ubuntu Core. You can find more information on its man page.

Separately it is possible to modify routing information per single connection using the nmcli tool. The parameters such as: gateway, routes and metrics can be modified.

Читайте также:  Установка 2гис на линукс

The following options are responsible:

ipv4.gateway: ipv4.routes: ipv4.route-metric: ipv6.gateway: ipv6.routes: ipv6.route-metric: 

These options can be modified in a following way:

$ nmcli connection modify +ipv4.routes ipv4.gateway $ nmcli connection modify ipv4.route-metric

Where is the connection name. You can obtain it by listing available connections on the system:

  • is the destination network provided as a static IP address, subnet or “default”.
  • is the new gateway information. is the new metric information.

Note that this kind of changes can be made separately for each connection thus it is possible to provide a fine grained control over how the packets directed to different networks are routed.

It is also important to understand that bringing up and down connections with different values set for these options is in fact changing the routing table.

Источник

Маршрутизация в Linux

Эта статья одна из статей про работу сетей в Linux. Вы уже знаете, что все данные в сети передаются в виде пакетов, а чтобы компьютер знал куда нужно отправить тот или иной пакет используются IP адреса. Но пакету, перед тем, как он достигнет точки назначения нужно пройти множество компьютеров и маршрутизаторов.

Каждому из маршрутизаторов нужно знать на какой компьютер передавать пакет дальше. Именно это мы и обсудим в этой статье. Сегодня нас будет интересовать маршрутизация в Linux, как это работает, как настроить правила и заставить все работать как нужно.

Сетевые маршруты в Linux

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

Когда компьютеру нужно отправить пакет в сеть он смотрит таблицу маршрутизации, в ней указанны ip адреса пунктов назначения и адреса интерфейсов и роутеров в домашней сети, которые могут отправить пакет по нужному адресу. Если для цели маршрут не указан то используется так называемый шлюз по умолчанию или маршрут по умолчанию. Точно такая же картина наблюдается на роутере. Устройство смотрит на IP адрес назначения и сверяет его со своей таблицей маршрутизации, а потом отправляет дальше.

Ниже мы рассмотрим как проверить текущие маршруты в системе, а также как настроить новые.

Как посмотреть таблицу маршрутизации

Перед тем как что-либо менять, нужно понять какие правила уже используются. В Linux для этого существует несколько команд. Чтобы посмотреть таблицу маршрутизации можно использовать команду route:

Читайте также:  Kde linux in windows

Вот так выглядит таблица маршрутизации 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.

Настройка маршрутов в 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. Например:

Читайте также:  Linux управление пользователями группами

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.

Источник

Where is routing table stored internally in the Linux kernel?

When I execute route -n , from where exactly (from which struct s) is the information displayed retrieved? I tried executing strace route -n but I didn’t help me finding the right place it’s stored.

For anyone looking for the file on disk, it’s either built from whatever the DHCP server gives out, or from what can be found in /etc/sysconfig/network-scripts/ifcfg-$ in simple cases and/or from what can be found in /etc/sysconfig/network-scripts/route-$ in more convoluted cases (case of Red Hat / CentOS 7). The latter file contains the output of ip -r . See Add a Static Route on CentOS.

1 Answer 1

The route or the ip utility get their information from a pseudo filesystem called procfs . It is normally mounted under /proc . There is a file called /proc/net/route , where you can see the kernel’s IP routing table. You can print the routing table with cat instead, but the route utility formats the output human readable, because the IP adresses are stored in hex.

That file is not just a normal file. It is always generated at exactly the moment when opening it with an attempt to read, as all files in the proc filesystem.

I you are interessted how that file is written, then you need to look at the kernel sources: That function outputs the routeing table. You see at line 2510, the header of the routing table is printed. The routing table appears to be mostly in the struct fib_info that is defined in the header file ip_fib.h, line 98.

Источник

Оцените статью
Adblock
detector