Почему 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  

Эта подсеть будет использоваться для передачи с Raspberry Pi, соединенным на моем порте Ethernet. Интернет-соединение не нужно потому что уже обеспеченный Wi-Fi.

Я ожидал, что мой ноутбук получит статический 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  
  1. Почему у меня есть 169.254.0.0 строки?
  2. Я полагаю, что это является ненужным. Как я удаляю его?
2
задан 12 August 2015 в 06:12

3 ответа

Из заключенной в кавычки ссылки:

, Если клиент DHCP пытается получить адрес, но не удается найти сервер DHCP после тайм-аута и период повторений, он случайным образом примет адрес из этой сети. Это позволяет связь с хостами, которым не удалось получить адрес DHCP.

Однако Ваш интерфейсы файл запрашивает статический IP-адрес, который, вероятно, невозможен, таким образом, никакой допустимый адрес не был дан.

192.168.1.1 вероятно адрес маршрутизатора или другой точки доступа, с которой Вы пытаетесь соединиться. Поэтому адрес не предоставят. Кроме того, если Вы будете ожидать соединяться с Интернетом, то необходимо будет указать серверы имен DNS. Позвольте мне предложить:

# 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.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 192.168.1.1

, Конечно, проверяют точные детали перед продолжением.

Перезапуск интерфейс:

sudo ifdown eth0 && sudo ifup -v eth0

Проверка:

ping -c3 www.ubuntu.com
4
ответ дан 2 December 2019 в 01:44

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

Для предотвращения этого рассмотрите использование ifconfig вместо ifup.

При необходимости, выполнение ifdown сначала.

sudo ifdown eth0
sudo ifconfig eth0 192.168.1.1

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

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

, Как делают меня интерфейсы мостовой схема?

0
ответ дан 2 December 2019 в 01:44

На RFC 3927 (шахта акцента):

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

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

Заключить статью Wikipedia в кавычки о частных сетях,

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

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


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

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

Если Вы слушаете совет этого файла и проверяете man networks, Вы будете видеть:

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

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


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

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

sudo route del -net 169.254.0.0 gw 0.0.0.0

Или удалить его постоянно, необходимо смочь просто прокомментировать его запись в /etc/networks и перезагрузка.

2
ответ дан 2 December 2019 в 01:44

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

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