решение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
.
Ответ взят изЗДЕСЬ