Что означают `linkdown` и `onlink` в Linux Route?

Что означают `linkdown` и `onlink` в Linux Route?

Когда я набрал ip route show: ip маршрут показать

Что linkdownна самом деле означает? Иногда я все еще могу видеть onlink. Также хочу знать, что onlinkозначает.

Влияет ли это на приоритет маршрутизации? Например, случай двух маршрутов по умолчанию на рисунке

решение1

linkdownэто статус, который будет отображаться для маршрута, который находится в таблице и настроен на выход через интерфейс, который находится в DOWNсостоянии. Вы можете увидеть это, запустив:

ip a

и ищу статусы интерфейсов. На моем ноутбуке включен Wi-Fi и отключен адаптер Ethernet, поэтому он показывает:

wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000

В моей таблице маршрутизации есть несколько маршрутов, но я могу добавить пару бесполезных:

sudo ip route add 192.168.123.0/24 dev enp0s25
sudo ip route add 192.168.124.0/24 dev wlp3s0

Затем моя таблица покажет linkdownмаршрут Ethernet:

 192.168.123.0/24 dev enp0s25 scope link linkdown 
 192.168.124.0/24 dev wlp3s0 scope link 

onlinkозначает, что маршрутизация должна «притворяться, что следующий переход напрямую подключен к этой ссылке, даже если он не соответствует ни одному префиксу интерфейса». Таким образом, мы можем сделать поддельный один из тех, что в таблице:

sudo ip route add 192.168.125.0/24 via 192.168.123.111 dev wlp3s0 onlink

Что теперь отобразится в таблице маршрутизации:

192.168.123.0/24 dev enp0s25 scope link linkdown 
192.168.124.0/24 dev wlp3s0 scope link 
192.168.125.0/24 via 192.168.123.111 dev wlp3s0 onlink 

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

192.168.126.0/24 via 192.168.123.111 dev enp0s25 onlink linkdown

решение2

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

Попробую привести пример, чтобы увидеть, что onlinkна самом деле делает эта опция:

Вы настроили eth0(на своем компьютере) IP-адрес/маску: 192.168.0.1/24

По какой-то причине вы хотите использовать шлюз в физической локальной сети, eth0конфигурация которой несовместима. Предположим, что у него адрес 10.0.10.1/24, который не соответствует конфигурации 192.168.0.1/24, которую вы дали своей машине.

Если вы скажете:

ip route add default dev eth0 via 10.0.10.1

то вы получите сообщение об ошибке (сеть недоступна или что-то в этом роде).

Почему? Потому что (строго говоря) не имеет смысла иметь машину 10.0.10.1 в eth0локальной сети, поскольку вы указали своему компьютеру сетевой адрес этой локальной сети 192.168.0.0/24.

Но вот что происходит: если вы добавите onlinkк команде, например, следующее:

ip route add default dev eth0 via 10.0.10.1 onlink

тогда маршрут принимается.

Но теперь мы подходим к другому вопросу: что делает ядро, если пакет необходимо направить на этот onlinkшлюз?

Я проверил (экспериментально), и вот результат: ядро ​​отправляет запрос arp в локальную eth0сеть с вопросом "who-has 10.0.10.1", который является onlinkшлюзом, который вы настроили. Когда оно получает ответ, ядро ​​имеетMAC-адрескуда он может отправлять свои пакеты и куда будет выполняться маршрутизация.

Это означает: когда адрес шлюза не соответствует конфигурации локальной сети на вашем компьютере ( eth0), вы можете заставить ядро ​​использовать этот шлюз, добавив onlinkк оператору.

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

Ответ взят изЗДЕСЬ

Связанный контент