Почему 169.254.0.0 появляется по умолчанию в таблице маршрутизации?

Я определил подсеть на eth0 в /etc/network/interfaces с:

# interfaces(5) file used by ifup(8) and ifdown(8)  
auto lo  
iface lo inet loopback  

auto eth0  
iface eth0 inet static  
        address 192.168.1.1  
        netmask 255.255.255.0  
        network 192.168.1.0  

. Эта подсеть будет использоваться для связи с малиной Pi, подключенной к моему порту Ethernet.

Я ожидал, что мой ноутбук получит статический IP-адрес 192.168.1.1, когда я запустил sudo ifup eth0, и это так. Однако, route -n показывает:

Kernel IP routing table  
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
... (bunch of things) ...  
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0  
Почему у меня есть строка 169.254.0.0? Я считаю, что это не нужно. Как его удалить?
1
задан 12 August 2015 в 06:12

2 ответа

В RFC 3927 (выделено мной):

Для участия в широкополосной IP-сети хост должен быть настроен с IP-адресами для своих интерфейсов либо вручную пользователем, либо автоматически из источника в сети, такой как сервер протокола конфигурации динамического хоста (DHCP). К сожалению, такая информация о конфигурации адреса не всегда доступна. Поэтому полезно, чтобы хост мог зависеть от полезного подмножества функций IP-сети, даже если конфигурация адресов недоступна. В этом документе описывается, как хост может автоматически настроить интерфейс с адресом IPv4 в префиксе 169.254 / 16, который действителен для связи с другими устройствами, подключенными к одной и той же физической (или логической) ссылке.

Итак, чтобы суммировать, подсеть 169.254 / 16 была зарезервирована для обеспечения связи между двумя физически (или логически, например, через коммутатор) подключенными устройствами, не полагаясь на DHCP или ручное назначение статических IP-адресов .

Чтобы процитировать RFC 3927 ,

Чтобы участвовать в широкополосной IP-сети, хост должен быть настроен с IP-адресами для его интерфейсы либо вручную пользователем, либо автоматически из источника в сети, такого как сервер протокола DHCP. К сожалению, такая информация о конфигурации адреса не всегда доступна. Поэтому полезно, чтобы хост мог зависеть от полезного подмножества функций IP-сети, даже если конфигурация адресов недоступна. В этом документе описывается, как хост может автоматически настроить интерфейс с адресом IPv4 в префиксе 169.254 / 16, который действителен для связи с другими устройствами, подключенными к одной и той же физической (или логической) ссылке.

[d17 ] Если хост в сети IEEE 802 (Ethernet) не может получить сетевой адрес через DHCP, адрес от 169.254.1.0 до 169.254.254.255 может быть назначен псевдослучайно.

As пример его использования, скажем, у вас есть два встроенных устройства, которым необходимо связываться друг с другом через прямое Ethernet-соединение, но вы хотите, чтобы одно или оба устройства сначала искали DHCP, чтобы они также имели возможность подключения к локальной области сеть. Когда устройства подключаются напрямую и нет DHCP, устройства могут использовать протокол, такой как многоадресный DNS, для обнаружения друг друга автоматически, но для каждого устройства сначала должен быть назначен какой-то произвольный IP-адрес, чтобы они могли фактически разговаривать друг с другом Ethernet-соединение. Таким образом, операционная система автоматически назначает IP-адрес Ethernet-устройству из сети 169.254 / 16.

$ cat /etc/networks
# symbolic names for networks, see networks(5) for more information
link-local 169.254.0.0

Теперь, что касается того, почему этот маршрут находится в таблице маршрутизации по умолчанию ... if вы смотрите на /etc/networks, вы можете видеть, что сеть «link-local» определяется как находящаяся в этой подсети:

Этот файл считывается утилитами route (8) и netstat (8).

Если вы возьмете совет этого файла и посмотрите man networks, вы увидите:

Таким образом, маршрут создается автоматически при загрузке после route читает этот файл.

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

sudo route del -net 169.254.0.0 gw 0.0.0.0

Однако, если вы действительно хотите удалить его, вы можете сделать это с помощью

2
ответ дан 23 May 2018 в 18:17

Как отмечали другие, 169.254.0.0 присутствует в вашей таблице маршрутизации, потому что ifup настраивает сеть link-local.

Чтобы избежать этого, рассмотрите возможность использования ifconfig вместо ifup ].

При необходимости сначала запустите ifdown.

sudo ifdown eth0
sudo ifconfig eth0 192.168.1.1

ifconfig делает меньше работы и не читает /etc/network/interfaces.

It должны быть доступны для доступа к Интернету с помощью Pi. Вам необходимо включить пересылку пакетов в ядро ​​на вашем ноутбуке. Я думаю, что это можно сделать без перезагрузки. Я делал это в прошлом, но не знаю, как это сделать с самого начала моего слуха. Это может помочь:

Как подключить сетевые интерфейсы?

0
ответ дан 23 May 2018 в 18:17

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

Похожие вопросы: