Я определил подсеть на 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? Я считаю, что это не нужно. Как его удалить? В 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
Однако, если вы действительно хотите удалить его, вы можете сделать это с помощью
Как отмечали другие, 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. Вам необходимо включить пересылку пакетов в ядро на вашем ноутбуке. Я думаю, что это можно сделать без перезагрузки. Я делал это в прошлом, но не знаю, как это сделать с самого начала моего слуха. Это может помочь:
Как подключить сетевые интерфейсы?