为什么路由表中默认出现169.254.0.0?

为什么路由表中默认出现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 进行通信。无需互联网连接,因为已由 wifi 提供。

我原本希望我的笔记本电脑运行时能获得静态 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. 我认为没有必要。如何删除它?

答案1

来自引用的链接:

如果 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

答案2

RFC 3927(重点是我的):

要参与广域 IP 网络,主机需要
为其接口配置 IP 地址,可以由
用户手动配置,也可以从网络上的某个源(例如
动态主机配置协议 (DHCP) 服务器)自动配置。遗憾的是,
此类地址配置信息可能并非始终可用。因此, 即使没有可用的地址配置
,主机也能够依赖有用的 IP 网络功能子集,这将大有裨益 。

本文档介绍了主机如何
自动配置一个接口,该接口具有 169.254/16 前缀内的 IPv4 地址,可用于与连接到同一物理(或逻辑)链路的其他设备进行通信。

因此,总而言之,保留 169.254/16 子网以允许两个物理(或逻辑,例如通过交换机)连接的设备之间的通信,而不必依赖 DHCP 或手动分配静态 IP 地址。

引用维基百科上有关私人网络的文章

如果 IEEE 802(以太网)网络上的主机无法通过 DHCP 获取网络地址,则可能会伪随机分配从 169.254.1.0 到 169.254.254.255 的地址。

举个例子,假设您有两个嵌入式设备需要通过直接以太网连接相互通信,但您希望其中一个或两个设备首先查找 DHCP,以便它们也有可能连接到局域网。当设备直接连接在一起并且没有可用的 DHCP 时,设备可能会使用以下协议多播域名解析自动发现对方,但每台设备必须先分配一个任意 IP 地址,这样它们才能通过以太网链路真正相互通信。因此,操作系统会自动从 169.254/16 网络为以太网设备分配一个 IP 地址。


现在,至于为什么该路由默认存在于路由表中……如果您查看/etc/networks,您会看到“链路本地”网络被定义为位于以下子网中:

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

如果您采纳此文件的建议并查看man networks,您将看到:

该文件由 route(8) 和 netstat(8) 实用程序读取。

route因此,读取该文件后,会在启动时自动创建路线。


仅当您计划实际使用链路本地通信并且不想为连接的设备分配静态 IP 地址时,才需要路由。但如果您不这样做,保留它也不会有什么坏处。

但是,如果你真的想要删除它,你可以这样做

sudo route del -net 169.254.0.0 gw 0.0.0.0

/etc/networks或者要永久删除它,您只需注释掉它的条目并重新启动即可。

答案3

正如其他人提到的,由于正在设置网络169.254.0.0,因此它存在于您的路由表中。ifuplink-local

为了避免这种情况,请考虑使用ifconfig而不是ifup

如果需要的话,先跑ifdown

sudo ifdown eth0
sudo ifconfig eth0 192.168.1.1

ifconfig工作少,读书少/etc/network/interfaces

应该可以与 Pi 共享互联网访问。您需要在笔记本电脑的内核中打开数据包转发。我认为这可以在不重新启动的情况下完成。我以前做过,但不知道该怎么做。这可能会有所帮助:

如何桥接网络接口?

相关内容