是什么使私有IP地址无法路由?


21

我明白如私有地址10.0.0.0/8172.16.0.0/12并且192.168.0.0/16是不可路由的。但是,究竟是什么使这些地址无法路由呢?ISP是否实施阻止这些网络路由的ACL,还是更高级别的东西?

另外,是IANA创造了这种设计吗?


是否存在一个隐含的问题:“是否保证它们不会被公开路由?是否还有人仍在错误地公开路由?”?
rackandboneman '18

3
关于您的最后一个问题:IETF为IANA定义了它们,将其排除在公共地址空间之外。适用于IPv4的RFC1918适用于IPv6的
RFC4193

3
当然,它们是可路由的。路由器从您的公共外部地址获取一条消息,然后将其“路由”到内部私有地址。建议您查找网络地址转换的基础知识。
Lakey

2
Lakey,它们无法在公共网上路由。因此,为什么需要Nat并用来保存IP地址。.我在Cisco课堂上,而我的教授无法回答此问题,所以这就是我在此处发布的原因。
QuantumRads

1
另外,我应该澄清私有地址在私有网络中是可路由的,但在公共网络中是不可路由的。
QuantumRads

Answers:


39

私有IP地址可路由的,尽管它们不是公开路由的。基本上,路由器会将专用地址路由到专用/内部LAN,而不是Internet。

扩展我的答案:路由器可以通过其默认网关将专用地址路由到公共端。但是,由于其他路由器丢弃了该数据包,或者由于数据包的TTL达到0,该数据包在传输中将“丢失”。

例如,看一下(部分混淆)traceroute -I -n 192.168.200.1

[root@myhost ~]# traceroute -I -n 192.168.200.1
traceroute to 192.168.200.1 (192.168.200.1), 30 hops max, 60 byte packets
 1  x.x.x.x  0.851 ms  0.841 ms  0.818 ms
 2  6x.xx.xx.xx  0.791 ms  0.791 ms  0.849 ms
 3  15x.xx.xx.xx  1.350 ms  1.347 ms  1.373 ms
 4  15x.x.xx.xx  1.446 ms  1.435 ms  1.428 ms
 5  151.6.68.20  2.272 ms  2.266 ms  2.251 ms
 6  151.6.0.91  8.818 ms  8.256 ms  8.326 ms
 7  * * *
 8  * * *
 9  * * *
10  * * *
...
...
29  * * *
30  * * *

正如你所看到的,数据包通过机器的默认网关路由到公共互联网。但是,它将在运输过程中掉落,并且永远不会到达任何正确的目的地。

毕竟,私有IP /类(按照定义)在客户之间是重叠的,因此应在此包中路由数千个192.168.200.x / 24网络中的哪一个?

一个有趣的旁注:互联网提供商经常使用私有地址进行内部路由。例如,如果将私有192.168.200.x / 24类用于内部路由,则IP为192.168.200.1的第一台路由器/机器接收但丢弃该数据包,因为它是未经请求的。ICMP是一个有趣的例外,因为路由器/计算机通常会回复未经许可的PING。这意味着您有时可以使用专用地址扫描来映射您的ISP专用网络。


2
因此,基本上,如果IP地址以10、172.16-31或192.168开头,则应将路由器配置为仅通过内部LAN网络发送它们,而不是发送到外部Internet(在企业中,通常是通过外部网关)。您可以在此处阅读这些“专用网络”:en.wikipedia.org/wiki/Private_network
Bruno,

3
每当您建立路由专用网络时,路由专用RFC1918地址(192.168、172.16、10)实际上并不少见。
user253751 '18

3
@布鲁诺不一定。路由可以将公共端的专用地址路由到其默认网关,但是其他路由器最终将丢弃数据包或将其路由到一个环路中(当TTL达到0时,数据包将被丢弃)。
shodanshok

ISP的主路由器是否甚至具有默认网关?那会是什么?
kubanczyk

通常,是的。毕竟,ISP需要路由打算发送给其他ISP的数据包...
shodanshok

9

通常,私有IP地址由ISP过滤。您的访问路由器也应配置为不使其泄漏。

私有IP地址不能在互联网上使用,因为任何人都可以使用它们。可能有数百万个设备专用于使用192.168.1.1-互联网路由器应该发送哪个数据包?

Zeroconf地址(169.254.0.0/16)实际上是不可路由的。这些可以以临时方式在任何地方使用,但它们只能访问本地的Internet或任何子网。无法路由它们,因为它们只能在广播域内有效,在该域中,每个设备都可以自行选择未使用的地址。根据定义,zeroconf没有像DHCP服务器这样的管理实例。


6

但是,究竟是什么使这些地址无法路由呢?

通讯实体实施的公认标准。这些是在软件,硬件和配置中强制执行的。

ISP是否实施阻止这些网络路由的ACL,还是更高级别的东西?

他们可以但实际上停止的仅仅是不符合标准的无效翻译。

如果您像大多数家庭用户一样,可以将一个IP地址分配给您作为公共IP地址。为了使来自所有已连接设备的流量进行通信,路由器使用NAT(网络地址转换)或PAT(端口地址转换)对这些内部IP地址进行转换。

基本上,路由器会记住您的LAN(局域网)中的哪个内部IP地址启动了会话,该会话通过路由器到达WAN之外,并到达WAN(广域网)接口。当数据退出路由器时,它将包含分配给您的单个IP地址作为源IP。进入时,数据包包含与目标IP相同的地址。然后,路由器决定从那里定向到何处。

在外部,您只有一个IP地址,实际上是路由器的IP。路由器能够跟踪这些会话并确定哪些流量属于其LAN上的每个内部IP地址,并相应地引导该流量。这是一个复杂的管理过程,但是一旦您了解到每个路由器都在翻译所有内容,这个想法实际上就非常简单。

此外,大多数家用路由器都具有交换端口,因此流量是通过MAC地址而不是IP地址传递的。数据包中的源MAC地址保持不变,直到它到达路由器为止。路由器会剥离该源MAC地址,并插入其自己的WAN接口的MAC地址。

另外,是IANA创造了这种设计吗?

这些标准最初不是由IANA设计的。今天,尽管他们率先制定标准,但他们肯定不会通过任何法律手段来强制执行。它们是通过共识实施的标准。搜索RFC 791。

他们具有“权威”,以至于每个人都愿意遵守它们。完全有可能违反这些标准,但是您最终会在一条路径上遇到某个ISP,这将要求您坚持使用,否则它们将降低流量。

希望对您有所帮助。


2
我认为,这与OP的特定问题有关,每个字都触动人心。其他答案实际上是正确的,但我不确定它们会尽可能直接地解决OP的特定困惑。关键是:惯例和大多数人都希望遵守的事实
莫妮卡(Monica)与Lightness比赛'18

1
@LightnessRacesinOrbit:该答案中的第一个未引号的单词基本上覆盖了该单词,这并不是绝对必要的...该单词强调您的观点。虽然,但我同意您的斜体字确实使观点更好。
TOOGAM

2
@TOOGAM:是的,我只是加强它。正如我所说,我认为这个答案是完美的。
与莫妮卡(Monica)进行的轻度比赛

1

作为对其他答案的澄清,您在本地使用的专用IP地址范围不会路由到Internet,因为它们在路由表中有其自己的显式条目。例如,这是我在家中桌面上的路由表:

$ ip route
default via 192.168.1.1 dev enp5s0 proto dhcp src 192.168.1.104 metric 1024 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.18.0.0/16 dev br-90a372f4b373 proto kernel scope link src 172.18.0.1 linkdown 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.104 
192.168.1.1 dev enp5s0 proto dhcp scope link src 192.168.1.104 metric 1024

注意172.17.0.0/16172.18.0.0/16。这些网络的数据包将直接到达我的Docker桥,而不会离开我的计算机,因为它们在我的路由表中有特定的条目。该192.168.1.0/24条目明确表示到该网络的流量将流出enp5s0接口。我的路由器的路由表将具有一个类似的条目,该条目将从桌面所连接的接口发送该专用网络的所有流量。

只有未在表中明确列出的网络数据包才会转到默认路由。您可以通过以下方式将网络明确标记为不可访问:

$ ip route add unreachable 10.0.0.0/8

这将我的路线表更改为:

$ ip route
default via 192.168.1.1 dev enp5s0 proto dhcp src 192.168.1.104 metric 1024 
unreachable 10.0.0.0/8 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.18.0.0/16 dev br-90a372f4b373 proto kernel scope link src 172.18.0.1 linkdown 
192.168.1.0/24 dev enp5s0 proto kernel scope link src 192.168.1.104 
192.168.1.1 dev enp5s0 proto dhcp scope link src 192.168.1.104 metric 1024

现在,我的桌面甚至不会尝试向默认网关询问该范围内的地址。查找该地址将立即返回“没有主机路由”。

$ traceroute 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 60 byte packets
connect: No route to host

在路由表中未明确标记为不可达的不可达网络的数据包将继续通过默认路由转发,直到该数据包到达明确知道网络不可达的路由器或TTL过期为止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.