Для чего используется локальная таблица маршрутизации?

Я пытаюсь понять, что такое локальная таблица маршрутизации.

Если я добавлю случайный адрес в нем с помощью следующей команды:

sudo ip route add to local <any-ip-address> dev <network interface>

Теперь я могу пропинговать этот адрес, но ни один интерфейс, указанный ifconfig, не использует этот адрес.

Пример:

$ ping 192.168.22.22 -w 1
PING 192.168.22.22 (192.168.22.22) 56(84) bytes of data.

--- 192.168.22.22 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

$ sudo ip route add to local 192.168.22.22 dev wlp2s0
$ ping 192.168.22.22 -w 1
PING 192.168.22.22 (192.168.22.22) 56(84) bytes of data.
64 bytes from 192.168.22.22: icmp_seq=1 ttl=64 time=0.018 ms
64 bytes from 192.168.22.22: icmp_seq=2 ttl=64 time=0.015 ms

--- 192.168.22.22 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.015/0.016/0.018/0.004 ms

Такое ощущение, что он работает как loopback, но из ifconfig интерфейс lo по-прежнему имеет только адрес 127.0.0.1. Если я проверю эту таблицу ip route ls table local Я вижу следующее:

$ ip route ls table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.0.0 dev wlp2s0  proto kernel  scope link  src 192.168.0.13
local 192.168.0.13 dev wlp2s0  proto kernel  scope host  src 192.168.0.13
broadcast 192.168.0.255 dev wlp2s0  proto kernel  scope link  src 192.168.0.13
local 192.168.22.22 dev wlp2s0  scope host
broadcast 192.168.122.0 dev virbr0  proto kernel  scope link  src 192.168.122.1
local 192.168.122.1 dev virbr0  proto kernel  scope host  src 192.168.122.1
broadcast 192.168.122.255 dev virbr0  proto kernel  scope link  src 192.168.122.1

Итак, что такое локальная таблица, и в каком случае я должен ее использовать?

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

Спасибо

2 ответа

Решение

Прежде всего, как объясняется в некоторых доступных в Интернете сведениях, " локальная таблица - это специальная таблица маршрутизации, поддерживаемая ядром ".

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

man ip - поскольку это была команда, с которой вы возились, имеет смысл ожидать, что в ее руководстве должны быть некоторые подсказки по этому вопросу. Вы должны четко наблюдать, теперь есть так называемый раздел также. Давайте посмотрим на это внимательно - среди прочего, он бесстыдно упоминает 2 возможных кандидатов для дальнейшего расследования в отношении:

  1. ip-route(8)
  2. ip-rule(8)

В общем, теперь мы имеем несколько:

man 8 ip-route "S:

local - назначения назначены этому хосту. Пакеты возвращаются и доставляются локально.

...

На самом деле, всегда существует еще одна таблица, которая невидима, но еще важнее. Это local Таблица ( ID 255 ). Эта таблица состоит из маршрутов для локальных и широковещательных адресов. Ядро поддерживает эту таблицу автоматически, и администратору обычно не нужно ее изменять или даже просматривать.

man 8 ip-rule "S:

Во время запуска ядро ​​настраивает RPDB по умолчанию, состоящую из трех правил:

  1. Приоритет: 0, Селектор: совпадать с чем угодно, Действие: таблица маршрутизации поиска local (ID 255). local Таблица - это специальная таблица маршрутизации, содержащая высокоприоритетные маршруты управления для локальных и широковещательных адресов.

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

Ответ poige говорит о том, что локальная таблица маршрутизации 1) специальная, 2) наивысший приоритет и 3) поддерживается ядром, но не отвечает на вопрос "Для чего используется локальная таблица маршрутизации?", который я попробую объяснять.

Локальные петли

local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1

Эти маршруты указывают, что любой адрес в 127.*.*.*пробел укажет обратно на машину. В 127.*.*.*пробел специально обозначен в спецификации IETF, чтобы всегда быть адресами обратной связи. Чтобы понять, почему 127.0.0.0/8 отображается на 127.*.*.*, вы должны понимать нотацию CIDR, если вы еще не знакомы с ней.

127.0.0.0/8 - Этот блок предназначен для использования в качестве адреса обратной связи узла Интернета. Дейтаграмма, отправленная протоколом более высокого уровня на
адрес в любом месте этого блока, возвращается обратно внутри хоста. Это
является обычно реализуется с использованием только 127.0.0.1/32 для шлейфа. Как
описано в [RFC1122], раздел 3.2.1.3, адреса в пределах всего блока 127.0.0.0/8 законно не появляются ни в какой сети нигде.

Трансляции

broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.0.0 dev wlp2s0  proto kernel  scope link  src 192.168.0.13
broadcast 192.168.0.255 dev wlp2s0  proto kernel  scope link  src 192.168.0.13
broadcast 192.168.122.0 dev virbr0  proto kernel  scope link  src 192.168.122.1
broadcast 192.168.122.255 dev virbr0  proto kernel  scope link  src 192.168.122.1

Обычно пакет отправляется на единственный IP-адрес назначения. Однако бывают случаи, когда полезно отправить один и тот же пакет на блок IP-адресов подсети (например, ваш компьютер может отправить специальный пакет по всем адресам в подсети вашего маршрутизатора для обнаружения сетевых принтеров, которые отвечают на специальный пакет). Широковещательный адрес - это специальный адрес, который действует как отправка на все адреса в подсети. Обычно это первый и последний адрес в подсети.

Локальные маршруты в разных подсетях

local 192.168.0.13 dev wlp2s0  proto kernel  scope host  src 192.168.0.13
local 192.168.122.1 dev virbr0  proto kernel  scope host  src 192.168.122.1

Наконец, оставшиеся адреса - это адрес машины в каждой из этих подсетей. Например, устройство (192.168.0.14) в подсети 192.168.0.0/24 достигнет вашего компьютера, отправив пакеты на 192.168.0.13.

Определяемые пользователем

local 192.168.22.22 dev wlp2s0  scope host

Это последний не учтенный маршрут, который, я полагаю, был добавлен вами вручную.

Локальная таблица маршрутизации позволяет системе направлять на соответствующий интерфейс для достижения адреса. Маршруты выбираются с использованием самого определенного (наименьшего подсети) маршрута. Однако вы тестируете маршруты, обработанные по адресу обратной связи.

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

Обычно у вас в таблице маршрутизации будут следующие маршруты:

  • по умолчанию (0.0.0.0/0): маршрут к маршрутизатору, который будет направлять трафик на неизвестные адреса. Это маршрут, используемый для подключения к Интернету. Это должно направить непосредственно к маршрутизатору, хотя существуют способы косвенной маршрутизации, указав промежуточный маршрутизатор.

  • 192.0.2.0/24: (Необязательно, полезно только для нескольких интерфейсов) Где 192.0.2.0 - это сетевой адрес для удаленной подсети, а / 24 - это размер nework. Опять это будет маршрутизировать к маршрутизатору. Это требуется только в том случае, если маршрут маршрутизируется не маршрутизатором, а маршрутизатором для вмещающей подсети.

  • 192.0.2.0/24: (Стандарт). значения, как описано выше) Предоставляет маршрут к подключенной сети. IP-адрес интерфейса должен быть в подсети. Это маршрутизирует к маршрутизатору, обслуживающему подсеть. Однако соединения с другими хостами в подсети будут маршрутизироваться напрямую, если они не переопределены более конкретным маршрутом.

  • 127.0.0.1/8: (Стандарт). Это адрес обратной связи, прикрепленный к psuedo-интерфейсу обратной связи. Эти адреса никогда не должны быть видны на реальном интерфейсе.

Существуют и другие специализированные маршруты, такие как точка-точка и черная дыра. Они используются редко.

Другие вопросы по тегам