题 真正的IPv4地址耗尽有多糟糕?


多年来,媒体一直在撰写关于现在可用的IPv4地址非常少的问题。但另一方面,我正在使用服务器托管公司,很乐意以少量资金提供公共IPv4地址。我的私人互联网连接带有公共IPv4地址。

怎么可能?问题是否像媒体要我们相信的那样糟糕?


161
2018-01-28 14:01




一些公司仍然拥有大量的IPv4地址。其他人很少。我必须非常仔细地考虑使用IPv4地址;因此,我有很多只有IPv6的机器。 - Michael Hampton♦
它还为您提供了一些观点,说明了ISP愿意让其他人不必部署IPv6的痛苦程度。 - immibis
我不会叫它 邪恶,但这肯定是一种痛苦。那说,大多数 消费者 假设facebook和whatsapp工作,可能不会在乎他们是否在nat之后。 - Journeyman Geek
@JourneymanGeek嗯,普通消费者并不真正关心他们不理解的事情。例如,有分布式社交媒体的想法(因为这使审查非常困难),但没有人关心这些事情,直到 后 他们已经离开了地面,因为NAT他们不能。我敢说NAT是我们最终建立集中式网络的原因之一,因为如果不付费就基本上不可能托管你自己的网站。 - immibis
正如@Azendale指出的那样,游戏服务器托管是一个很大的问题。为什么我不能只运行minecraft_server.exe并给我的朋友我的地址?因为NAT。 “消费者”肯定希望有时运行游戏服务器。 - immibis


答案:


这很糟糕。以下列出了我与消费者ISP在解决IPv4地址短缺方面的第一手经验:

  • 在城市之间的IPv4块周围反复混乱,导致客户短暂中断和连接重置。
  • 缩短 DHCP 租约时间从几天到几分钟。
  • 允许用户选择是否需要 网络地址转换(NAT) 在客户端设备(CPE)与否,然后追溯为每个人打开它。
  • 交交似件交实实件交交实实实实实实实实实实实交似似实实似件实件实件件件件件件件实实似件件件实件实件实件件件实实件似件实件实件实件交件交似交交实似交实件实件实件实件
  • 减少并发活动数量的上限 媒体访问控制(MAC)地址 由CPE强制执行。
  • 部署 运营商级NAT(CGN) 实件件实实交件实实实实实实交交似件实实件似件实件件实件似实件实实实实件实交件件实实件实件件实件件件件实件件件实件

实实似对于他们为客户这样做的唯一明智的解释是IPv4地址短缺。

IPv4地址短缺导致地址空间分散,存在多个缺点:

  • 行政管理费用不仅耗费时间和金钱,而且容易出错并导致停电。
  • 大量使用 内容可寻址存储器(CAM) 几年前骨干路由器的容量导致了 多个ISP的重大中断 交件交交实似实实实交交交实实似件件件实实交件实件实实似实似件件交件实实实件实件件件似件交实件实似件实件实件实交件件件实似实似交交实实件实件实似件实件件实实实件件

如果没有NAT,我们今天无法通过3700万个可路由的IPv4地址获得。但NAT是一个脆弱的解决方案,它为您提供不太可靠的连接和难以调试的问题。越多的NAT层越糟糕。经过二十年的艰苦努力,单层NAT大部分都在工作,但我们已经跨越了单层NAT足以解决IPv4地址短缺的问题。


174
2018-01-28 14:31



需要补充的一点是,NAT还会导致恶意用户影响普通用户,并且通常会使IP作为用户区分机制变得不可靠。例如,维基百科 阻止几乎每个卡塔尔用户 由于一个或几个用户的破坏行为。 - IllusiveBrian
@IllusiveBrian提出了一个有效的观点。我继承了使用IP地址作为主要标识符的广告定位软件。现在这远远不够,必须进行大量修改以保证其可靠性。印度和希腊似乎是受影响最严重的两个国家。我可以看到广告每天从同一个IPv4中被击中100次以上,但每次点击可以是不同的用户,由其他跟踪方法决定 - Darren H
@DmitriySintsov只不过是一个简单的状态防火墙了。如果边缘设备可以执行NAT,则可以执行状态防火墙。 - mfinni
@DarrenH“使用IP地址作为主要标识符的广告定位软件......并且必须进行大量修改以保持其可靠性。”仅凭这个原因就足以保持NAT。 - Andy
@DarrenH它只是一个关于不喜欢广告软件的评论,无论你感觉到什么样的语气都在你自己的脑海中。 - Andy


似交实实件交件交实件交件实交件实件件实交件件件实交交实实件实件实件实件件件实实件件件件件件实实件件实实件件实件件实件件实件件实件件实件件实件件实件件件实件件件件每台连接互联网的计算机都有自己的全球唯一地址。首次引入NAT时,就是从ISP的客户那里获得客户使用/拥有的每个设备的1个真实地址,以便为1个客户提供1个真实地址。这个问题已经解决了一段时间(几年),而我们应该转向IPv6。而不是切换到IPv6,(大多数情况下)每个人都在等待其他人切换,所以(大多数情况下)没有人推出IPv6。现在我们再次遇到同样的问题,但这一次,正在部署第二层NAT(CGN),以便ISP可以在多个客户之间共享1个真实地址。

如果NAT不是很糟糕,IP地址耗尽并不是什么大问题,包括在最终用户无法控制它的情况下(运营商级NAT或CGN)。

但我认为NAT很可怕, 特别 在最终用户无法控制的情况下。而且(作为一个人的工作是网络工程/管理但具有软件工程学位)我认为,通过部署NAT而不是IPv6,网络管理员已经将解决​​地址耗尽问题的重心从他们的领域转移到最终用户和应用开发人员。

所以(在我看来),为什么NA​​T是一个应该避免的可怕的,邪恶的东西?

让我们看看我是否能够正确地解释它所破坏的东西(以及它导致我们已经习以为常的问题,我们甚至没有意识到它会更好):

  • 网络层独立性
  • 点对点连接
  • 一致的命名和资源位置
  • 流量的最佳路由,主机知道它们的真实地址
  • 跟踪恶意流量的来源
  • 将数据和控制分离为单独连接的网络协议

让我们看看我是否可以解释每个项目。

网络层独立性

互联网服务提供商应该只传递第3层数据包,而不关心上面这些层中的内容。无论你是在传递TCP,UDP还是更好/更具异国情调的东西(可能是SCTP?甚至是一些比TCP / UDP更好的协议,但由于缺乏NAT支持而模糊不清),你的ISP不应该关心;它应该只是看起来像他们的数据。

但事实并非如此 - 当他们正在实施NAT的“第二波”“运营商级”NAT时。然后,他们必须查看并支持您要使用的第4层协议。现在,这实际上意味着您只能使用TCP和UDP。其他协议要么被阻止/丢弃(根据我的经验绝大多数情况),要么只是转发到使用该协议的NAT“内部”的最后一个主机(我已经看过1个实现这样做)。甚至转发到使用该协议的最后一个主机也不是真正的修复 - 只要两个主机使用它,它就会中断。

我想有一些TCP和UDP替换协议,目前尚未经过测试和未使用,仅仅是因为这个问题。不要误会我的意思,TCP和UDP的设计非常出色,令人惊讶的是它们如何能够扩展到我们今天使用互联网的方式。但谁知道我们错过了什么?我读过有关SCTP的内容并且听起来不错,但从未使用它,因为它因为NAT而不切实际。

点对点连接

这是一个很大的问题。实际上,在我看来是最大的。如果你有两个终端用户,都在他们自己的NAT后面,无论哪一个尝试先连接,另一个用户的NAT将丢弃他们的数据包,连接将不会成功。

这会影响游戏,语音/视频聊天(如Skype),托管您自己的服务器等。

有解决方法。问题是这些变通方法需要花费开发人员时间,最终用户时间和不便,或服务基础设施成本。它们并非万无一失,有时会破裂。 (查看其他用户对Skype遭受的中断的评论。)

一种解决方法是端口转发,您可以在其中对NAT设备进行编程,以将特定的传入端口转发到NAT设备后面的特定计算机。有完整的网站致力于如何为所有不同的NAT设备执行此操作。看到 https://portforward.com/。这通常会花费最终用户的时间和挫败感。

另一个解决方法是为应用程序添加对打孔等内容的支持,并维护不在NAT后面的服务器基础结构来引入两个NATed客户端。这通常会花费开发时间,并使开发人员处于可能维护服务器基础结构的位置,而以前不需要它。

(还记得我所说的关于部署NAT而不是IPv6的问题,将问题的重要性从网络管理员转移到最终用户和应用程序开发人员?)

一致的网络资源命名/位置

因为NAT内部使用了不同的地址空间,所以在外部,NAT内部设备提供的任何服务都有多个地址可以通过它来访问,正确使用的地址取决于客户端从哪里访问它。 (即使在端口转发工作后,这仍然是一个问题。)

如果NAT中有Web服务器,例如端口192.168.0.23端口80,并且您的NAT设备(路由器/网关)的外部地址为35.72.216.228,并且您为TCP端口80设置了端口转发,现在您的可以使用192.168.0.23端口80或35.72.216.228端口80访问Web服务器。您应该使用的端口取决于您是在NAT内部还是外部。如果您在NAT之外,并使用192.168.0.23地址,您将无法到达您期望的位置。如果您在NAT内,并且使用外部地址35.72.216.228,那么 威力 到达你想去的地方, 如果您的NAT实现是支持发夹的高级实现,但随后服务于您请求的Web服务器将看到来自您的NAT设备的请求。这意味着所有流量必须通过NAT设备,即使NAT后面的网络中存在较短的路径,这意味着Web服务器上的日志变得不那么有用,因为它们都将NAT设备列为源连接。如果您的NAT实现不支持发夹,那么您将无法获得您期望的位置。

一旦使用DNS,这个问题就会变得更糟。突然之间,如果您希望一切能够正常运行NAT后面的东西,您将希望根据谁在询问(AKA水平分割DNS,IIRC),对NAT内托管的服务的地址给出不同的答案。呸。

这就是假设您有一些了解端口转发和发夹NAT以及水平分割DNS的人。最终用户怎么样?当他们购买消费者路由器和一些IP安全摄像头并希望它“正常工作”时,他们有什么机会将这一切设置好?

这导致我:

流量的最佳路由,主机知道它们的真实地址

正如我们所看到的,即使使用高级发夹,NAT流量并不总是流经最佳路径。即使在知识渊博的管理员设置服务器并具有发夹NAT的情况下也是如此。 (当然,水平分割DNS可以在网络管理员手中实现内部流量的最佳路由。)

当应用程序开发人员创建Dropbox等程序并将其分发给不专门配置网络设备的最终用户时会发生什么?具体来说,当我将4GB文件放入共享文件,然后尝试访问下一台计算机时,会发生什么?它是直接在机器之间传输,还是我必须等待它通过慢速WAN连接上传到云服务器,然后等待第二次通过相同的慢速WAN连接下载?

对于一个天真的实现,它将使用Dropbox的服务器基础设施上传然后下载,该服务器基础设施不在NAT后面作为中介。但是如果这两台机器只能意识到它们在同一个网络上,那么它们就可以更快地直接传输文件。因此,对于我们的第一个不太天真的实现尝试,我们可能会询问操作系统IP(v4)解决机器的问题,然后检查相同Dropbox帐户上注册的其他计算机。如果它与我们在同一范围内,只需直接传输文件即可。这可能在很多情况下都有效。但即使这样,也存在一个问题:NAT只能工作,因为我们可以重用地址。那么,如果在同一个Dropbox帐户上注册的192.168.0.23地址和192.168.0.42地址实际上位于不同的网络(如家庭网络和工作网络),该怎么办?现在,您必须尽快使用Dropbox服务器基础架构进行调解。 (最后,Dropbox尝试通过让每个Dropbox客户端在本地网络上进行广播来寻找其他客户端来解决问题。但是那些广播不会跨越NAT后面的任何路由器,这意味着它不是一个完整的解决方案, 特别是在CGN的情况下。)

静态IP

此外,由于第一次短缺(以及NAT的浪潮)发生在许多消费者连接并非总是在连接上(如拨号)时,ISP可以通过仅在实际连接时分配公共/外部IP地址来更好地利用其地址。这意味着当你连接时,你得到了任何可用的地址,而不是总是得到相同的地址。这使得运行自己的服务器变得更加困难,并且它使得开发点对点应用程序变得更加困难,因为他们需要处理同行移动而不是固定地址。

混淆恶意流量的来源

由于NAT重写传出连接就好像它们来自NAT设备本身一样,所有行为(好的或坏的)都被转换为一个外部IP地址。我没有看到任何默认情况下记录每个传出连接的NAT设备。这意味着默认情况下,过去恶意流量的来源只能追溯到它经历的NAT设备。虽然可以配置更多的企业级或运营商级设备来记录每个传出连接,但我还没有看到任何消费者路由器这样做。我当然认为,看看(以及多长时间)ISP是否会记录通过CGN进行的所有TCP和UDP连接的日志将会很有趣。处理滥用投诉和DMCA投诉需要这些记录。

有些人认为NAT增加了安全性。如果确实如此,那就是默默无闻。 NAT强制要求的传入流量的默认下降与具有状态防火墙的流量相同。我的理解是,任何能够进行NAT所需的连接跟踪的硬件都应该能够运行状态防火墙,因此NAT并不值得任何积分。

使用第二个连接的协议

FTP和SIP(VoIP)等协议倾向于使用单独的连接来控制和实际数据内容。执行此操作的每个协议必须在其通过的每个NAT设备上具有称为ALG(应用层网关)的辅助软件,或者通过某种中介或打孔来解决问题。根据我的经验,ALG很少有更新,并且至少是我处理涉及SIP的几个问题的原因。每当我听到有人报告说VoIP不能为他们工作因为音频只有一种方式,我立即怀疑某处,有一个NAT网关丢弃UDP数据包,它无法弄清楚该怎么做。

总之,NAT往往会破坏:

  • TCP或UDP的替代协议
  • 点对点系统
  • 访问NAT后面托管的东西
  • SIP和FTP之类的东西。解决这个问题的ALG今天仍会引起随机和奇怪的问题,尤其是SIP。

核心是,网络堆栈采用的分层方法相对简单而优雅。尝试向刚接触网络的人解释它,他们不可避免地认为他们的家庭网络可能是一个很好的,简单的网络,试图理解。在一些情况下,我已经看到了一些关于路由如何工作的非常有趣(过于复杂)的想法,因为外部地址和内部地址之间存在混淆。

我怀疑没有NAT,VoIP将无处不在并与PSTN集成,并且从手机或计算机拨打电话将是免费的(除了你已经支付的互联网)。毕竟,当你和我只能打开一个64K的VoIP流并且它的工作方式和PSTN一样好的时候,我为什么要付费?看起来今天,部署VoIP的第一个问题是通过NAT设备。

我怀疑如果我们有NAT破坏的端到端连接,我们通常不会意识到许多事情会变得多么简单。人们仍然通过电子邮件(或Dropbox)自己的文件,因为如果两个客户端在NAT后面需要调解器的核心问题。


129
2018-01-29 06:18



@supercat IPv6地址是全球唯一的, 但不平坦 (支持路由,需要分层)。在我看来,如果我们希望任何两个连接互联网的主机理论上能够进行通信,则需要某种形式的全球唯一地址。 - Jakob
@supercat遗憾的是,IPv6仍然没有足够的空间供所有人使用。你可以给地球上的每个人一个/ 48,但仍留有大量的空间。耗尽当前分配的 2000::/3 你将不得不重复这个练习超过4000次!或者给每个人一个/ 34。但是a / 48对于几乎每个人来说都足够好了,那些需要更多的人可以很容易地得到它。即使这还不够,仍然存在 4000::/3, 6000::/3等,可用。我们有很多空间;是时候使用它了。也可以看看 RFC 6177。 - Michael Hampton♦
@immibis你好像错过了什么。组织不仅限于获得/ 48或/ 32。他们可以得到几乎任何大小的块。它可以是/ 44或/ 40或/ 39或/ 47或其他。您还应该阅读RFC 6177。 - Michael Hampton♦
不幸的是,许多人已经开始使用NAT作为一种蹩脚的安全形式,并且许多设备(如chromecast和IoT设备)假设任何能够连接到它的设备都是可靠的设备,因此我见过的每个消费者路由器都会丢弃到ipv6设备的传入连接还有一些我见过无法禁用此功能,只有常规端口转发。 - Qwertie
...好吧我现在讨厌NAT;我该如何切换到IPv6? - Adam Barnes


在其他答案中我没有看到的IPv4耗尽的一个重要症状是一些 移动服务提供商 几年前才开始使用IPv6。您可能已经使用IPv6多年,甚至不知道它。移动提供商是互联网游戏的新手,并不一定拥有巨大的预先存在的IPv4分配。它们还需要比有线/ DSL /光纤更多的地址,因为您的手机无法与您家中的其他成员共享公共IP地址。

我猜测IaaS和PaaS提供商将成为下一个,因为它们的增长与客户的物理地址无关。我很不高兴看到IaaS提供商很快就能以折扣价提供IPv6。


20
2018-01-29 16:58



我已经看到一些小型提供商提供仅支持IPv6的虚拟机,并为IPv4收取高额费用。 - Michael Hampton♦


不久前,主要的RIR用完了正常分配的空间。因此,对于大多数提供商而言,IPv4地址的唯一来源是他们自己的库存和市场。

在某些情况下,最好使用专用的公共IPv4 IP,但这并非绝对必要。还有一堆公共IPv4地址已分配但目前尚未在公共互联网上使用(它们可能在私人网络上使用,或者根本不在使用中)。最后,有旧网络的地址分配比他们需要的松散得多。

现在,三个最大的RIR允许地址在其成员和其他成员之间销售。因此,我们在组织之间建立了一个市场,这些组织要么拥有他们没有使用的地址,要么拥有可以在一方面获得成本的地址以及真正需要更多IP地址的组织。

难以预测的是,每个价格点的供需量是多少,因此未来市场价格将会是多少。到目前为止,每个IP的价格似乎仍然低得惊人。


14
2018-01-28 19:30



AfriNIC的地址仍然不到八分之一,而且我已经看到很多非洲以外的组织的例子都抓住了这些地址。 - Michael Hampton♦


理想情况下,互联网上的每个主机都应该能够获得全局范围的IP地址,但实际上IPv4地址耗尽是真实的 ARIN已经在他们的免费池中用尽了地址

之所以每个人仍然能够正常访问互联网服务,是因为网络地址转换(NAT)技术允许多个主机共享公共IP地址。但是,这不是没有问题的。


7
2018-01-28 14:32



我不想知道在Napster,Gnutella,Gossip,Kazaa,BitTorrent,Kademlia,FastTrack,eDonkey,Freenet,Grokster,Skype,Threema,Spotify等之间浪费了多少工时,资源和数百万工作量,开发NAT穿孔技术。 - Jörg W Mittag
@JörgWMittag更不用说Skype在2010年12月的失败是多么壮观。 - kasperd
事实上,你必须首先使用NAT穿孔技术。如果机器X和机器Y都在普通连接上,则在没有中介的情况下它们不能相互通信。对于文件同步任务这样的事情很烦人。 - Loren Pechtel
@kasperd您能否详细说明“2010年12月Skype失败”?我能找到 由于某些未指明的原因,大量超级节点一次失败。并且没有看到这与IPv4地址耗尽有何关系。 - ivan_pozdeev
@ivan_pozdeev Supernodes是针对NAT引起的问题的一种解决方法。 NAT本身是解决IPv4地址短缺的一种方法。因此,Skype首先需要使用超级节点,这完全是由于IPv4地址不足所致。如果互联网以更合理的速度升级到IPv6,Skype将不需要超级节点,并且不会发生特定的中断。 - kasperd


ISP曾经向公司提供256个IP地址块。现在,ISP很吝啬,并给你(一家公司)像5.在当天(2003年),你家里的每台PC和连接设备都有自己的互联网IP地址。现在,有线/ DSN / Fios路由器有一个IP地址,并为您家中的所有PC提供10.0.0.x ip地址。摘要:ISP曾经浪费IP地址,现在他们不再浪费它们了。


5
2018-01-29 23:38



“在当天(2003年),您家中的每台PC和连接设备都有自己的互联网IP地址。“只有你支付了第二,第三,第四等等。 - RonJohn
RonJohn是对的。我是1997年有线互联网来到我所在地区的宽带早期采用者之一。我每月支付50美元(美国),我清楚地记得他们提供了第二个IP地址,每月额外收费20美元。即使我想要一个,我也不愿意付钱。第二年,当我发现NAT设备时,我的问题就解决了。它们没有很多功能(例如传入连接的端口转发),但是我解决了我的需求。 - Charles Burge
@CharlesBurge我也记得那个。我们现在看到一些提供商也试图用IPv6做同样的事情。 - Kevin Keane
@CharlesBurge:这取决于你的ISP。我在亚利桑那州凤凰城的同一时间有一个朋友,他有一个完全路由的子网,一个/ 29块,有8个地址,5个可用。我们使用gated运行了一个Linux服务器(我们不小心),有线网络实际上与它共享完整的BGP路由信息。那些和人们将他们的Windows PC和打印​​机放在网络上的完全开放的份额使生活变得有趣。 - Zan Lynx
哦,是的,我确实记得网络的可见性。我的循环中的其他人都可以在“网上邻居”中看到,我可以浏览他们拥有的任何共享。 - Charles Burge


你已经有了很多优秀的答案,但我想补充一些尚未提及的内容。

是的,IPv4地址耗尽很糟糕,具体取决于您如何衡量它。一些公司仍然拥有大量的IPv4地址,但我们开始看到像运营商级NAT这样的变通方法。

但是当他们转向IPv6时,许多答案都是错误的。

以下列出了可以帮助解决IPv4地址短缺问题的技术。每个都有自己的优点和缺点。

  • IPv6的

    • 优点:标准化,可在大多数操作系统中使用。
    • 缺点:尽管频繁发表相反的声明,严重的安全问题。 早在2005年,美国CERT 警告IPv6全球解决引起的安全问题。 IPv6的 能够 正确保护,但鉴于消费者路由器的状态,它可能不会发生。
    • 缺点:迁移需要时间,金钱和专业知识。
    • 缺点:许多消费级设备存在严重缺陷。例如,许多D-Link路由器通过简单转发支持IPv6 所有 没有提供任何防火墙的流量。

另一个考虑因素:即使IPv6今天完全流行,由于人们将在很长一段时间内使用的传统设备,仍需要20年左右才能逐步淘汰IPv4(我仍然看到Windows 2003服务器和Windows XP工作站偶尔!更不用说所有不支持IPv6的打印机和相机以及物联网小工具。

  • CGNat:
    • 优势:无需更改客户驻地即可运行。
    • 缺点:仅支持出站连接。
    • 缺点:可能不支持一些协议。

最终,CGNat还不够。也许IPv6会流行起来,但也很可能我们最终会看到国家级的NAT,或类似的东西。

目前,作为一名顾问,我经常要向我的客户指出他们在IPv6上暴露(通常感谢Teredo)。接下来的问题总是:“解决这个问题要花多少钱?”然后“阻止它需要多少钱?如果我们将其关闭,我们会失去什么?”猜猜每次都会做出什么决定。

一句话:回答你的问题,是的,IPv4耗尽是真的。我们将看到很多应对它的机制。 IPv6可能会也可能不会成为等式。

要明确:我不是说我 喜欢 这个情况。我希望IPv6能够成功(我希望看到IPv6的一些改进)。我只是看着现在的情况。


5
2018-02-01 01:54



与任何NAT一样,CGN仅适用于TCP,UDP和ICMP,而不适用于其他传输协议。它还打破了许多应用层协议。 NAT是一种试图扩展IPv4的丑陋解决方案,它实际上已经超过了它的实用性。 - Ron Maupin
@supercat,IP数据包没有DNS名称。这将是一个不同的协议。只有TCP,UDP和ICMP传输协议适用于NAPT,而其他协议则不适用。许多应用程序和应用程序层协议不适用于NAPT,并且它们需要在丑陋的NAPT黑客之上进行丑陋的攻击。 IP的前提是每个终端设备都有一个唯一的地址,并且围绕它设计了许多协议。 IPv6解决了这个问题,以及一些IPv4缺点。 - Ron Maupin
@supercat,如果它真的那么简单,那么IPX网络的巨大安装基础就没有理由转换为IPv4。你可以在IPX和IPv4之间做同样的事情,它已经做了一段时间,但它只是一个kludge。 - Ron Maupin
@supercat - 所以为了支持这样的网络,我们需要放弃现有标准,并重写直接连接到地址的所有现有应用程序?这对我来说听起来不是一个好方法。 - Jules
@KevinKeane对于2010年的古老消费者路由器存在IPv6问题,我并不感到非常惊讶。对搜索结果进行30秒浏览表明他们在几年前解决了这个问题。 - Michael Hampton♦