如果 localhost 不将 127.0.0.1 解释为环回地址会怎样?

网络工程 路由 路由器 网络 IP地址 环回
2022-02-19 17:24:54

为了这个例子,假设网关是10.0.0.1并且主机A(我的机器)是10.0.0.2

如果网关 ( 10.0.0.1) 正在运行仅绑定到 localhost 端口的服务,则网络上的任何人都应该无法访问该服务。但是,如果我将机器 A ( 10.0.0.2) 配置为将所有流量路由到127.0.0.1through 10.0.0.1,那么会将10.0.0.1这些数据包路由到自身吗?我的假设是否正确,127.0.0.1无论其来源如何,发送到的数据包都将被发送到该地址,因此,离开 localhost 但被寻址到的数据包127.0.0.1将被寻址到下一个“跃点”的环回?它在很大程度上取决于网络和网关,还是在大多数情况下工作/不工作?

我的意思的抄本:

10.0.0.1 - "Hey! Send this to 127.0.0.1 for me, 10.0.0.1?"
10.0.0.2 - "Sure!"
10.0.0.2 - *oh, that's me*
10.0.0.2 - "Here's the reply 127.0.0.1 (I) gave, 10.0.0.2"
10.0.0.1 - "Thanks!"

我不确定这是否有意义,或者是否有可能,但如果是这样的话,对于运行仅限本地服务和转发其他机器流量的机器来说,这可能是一个相当大的安全漏洞。

1个回答

您不能将任何流量路由到127.0.0.0/8外部网络上块中的任何地址。块中的任何地址127.0.0.0/8都不能出现在任何网络的任何地方,该块中的任何地址也不能用作主机外部数据包的源地址或目标地址。

至少可以追溯到RFC 990, ASSIGNED NUMBERS

A类网络号127被分配了“环回”功能,即由更高级别的协议发送到网络127地址的数据报应该在主机内部环回。“发送”到网络 127 地址的任何数据报都不应该出现在任何地方的任何网络上。

-和-

RFC 1122,互联网主机要求——通信层

(g) { 127, }

内部主机环回地址。这种形式的地址不得出现在主机之外。

-和-

RFC 1700,分配号码

(g) {127, }

内部主机环回地址。永远不应该出现在主机之外。

-和-

RFC 3330,特殊用途 IPv4 地址

127.0.0.0/8 - 此块被分配用作 Internet 主机环回地址。由更高级别协议发送到该块内任何地址的数据报应在主机内部循环。这通常仅使用 127.0.0.1/32 来实现环回,但此块中的任何地址都不应该出现在任何地方的任何网络上 [RFC1700,第 5 页]。

-和-

RFC 5735,特殊用途 IPv4 地址

127.0.0.0/8 - 此块被分配用作 Internet 主机环回地址。由更高级别协议发送到该块内任何地址的数据报在主机内部循环返回。这通常仅使用 127.0.0.1/32 进行环回来实现。如 [RFC1122] 第 3.2.1.3 节所述,整个 127.0.0.0/8 块内的地址不会合法地出现在任何网络上的任何地方。

这意味着主机 A 无法将发往网络的数据包路由127.0.0.1到网络上的网关,因为该地址不能作为目标地址出现在网络上。