多年来,新闻界一直在谈论有关现在可用的IPv4地址很少的问题。但是,另一方面,我使用的是服务器托管公司,它很乐意花少量钱提供公共IPv4地址。我的私人互联网连接带有一个公共IPv4地址。
那怎么可能?问题是否像媒体希望我们相信的那样严重?
多年来,新闻界一直在谈论有关现在可用的IPv4地址很少的问题。但是,另一方面,我使用的是服务器托管公司,它很乐意花少量钱提供公共IPv4地址。我的私人互联网连接带有一个公共IPv4地址。
那怎么可能?问题是否像媒体希望我们相信的那样严重?
Answers:
这很糟糕。以下是一些示例示例,这些示例说明了我在与消费者ISP对抗IP4地址短缺时所做的第一手经验:
所有这些都降低了ISP向其客户出售产品的质量。他们为什么要对客户这样做的唯一明智的解释是IPv4地址的短缺。
IPv4地址的短缺导致地址空间的碎片化,存在多个缺点:
如果没有NAT,今天就不可能拥有3700百万个可路由IPv4地址。但是NAT是一种脆弱的解决方案,它为您提供了可靠性较差的连接和难以调试的问题。NAT的层数越多,效果越差。经过二十年的艰苦努力,单层NAT几乎可以正常工作,但是我们已经越过了一点,即单层NAT足以解决IPv4地址短缺的问题。
在我们开始用尽IPv4地址之前,我们没有(广泛地)使用NAT。每台连接互联网的计算机都有其自己的全局唯一地址。首次引入NAT时,是从为客户使用/拥有的每个设备给ISP的客户1个真实地址转变为给1个客户1个真实地址。这个问题解决了一段时间(几年),而我们原本应该改用IPv6。而不是切换到IPv6,(大多数)每个人都等待其他人进行切换,因此(大多数)没有人推出IPv6。现在,我们再次遇到相同的问题,但是这次,正在部署第二层NAT(CGN),以便ISP可以在多个客户之间共享1个真实地址。
如果NAT并不糟糕,那么IP地址用尽并不是什么大问题,包括在最终用户无法控制它的情况下(运营商级NAT或CGN)。
但是我认为NAT很糟糕,特别是在最终用户无法控制NAT 的情况下。并且(作为一个工作是网络工程/管理但具有软件工程学位的人),我认为通过部署NAT而不是IPv6,网络管理员将解决地址耗尽的重担从他们的领域转移到了最终用户身上。和应用程序开发人员。
因此(我认为),为什么NAT是应当避免的可怕的邪恶之举?
让我们看看我是否可以在解释其中断(以及导致其导致我们已经习惯了以至于我们什至没有意识到它会更好的问题)的问题上做到公义:
让我们看看我是否可以解释每个项目。
ISP应该只传递第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之后的服务器基础结构以引入两个经过NAT的客户端。这通常会花费开发时间,并使开发人员有可能维护以前不需要的服务器基础结构。
(还记得我所说的关于部署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设备的来源。连接。如果您的NAT实现不支持发夹,那么您将无法实现预期的目标。
一旦使用DNS,此问题就会变得更加严重。突然,如果您想让NAT背后托管的某些东西正常工作,您将想根据谁在询问NAT内部托管的服务地址(AKA跨域DNS,IIRC)给出不同的答案。uck
所有这些都假设您拥有有关端口转发,发夹式NAT和水平分割DNS的知识。最终用户呢?当他们购买消费类路由器和一些IP安全摄像机并希望其“正常工作”时,他们有什么机会完成所有这些设置?
这导致我:
如我们所见,即使使用高级发夹式NAT流量也不会始终通过最佳路径。即使在知识渊博的管理员设置服务器并具有发夹式NAT的情况下,也是如此。(允许的,水平分割的DNS可以在网络管理员的手中实现内部流量的最佳路由。)
当应用程序开发人员创建像Dropbox这样的程序并将其分发给不专门配置网络设备的最终用户时,会发生什么情况?具体来说,当我在共享文件中放入4GB文件,然后尝试在下一台计算机上进行访问时,会发生什么情况?它是在机器之间直接传输,还是我必须等待它通过慢速WAN连接上传到云服务器,然后再等待第二次通过相同的慢速WAN连接下载?
对于幼稚的实现,将使用不位于NAT后面的Dropbox的服务器基础结构作为中介来上载然后下载。但是,如果两台计算机只能意识到它们位于同一网络上,那么它们就可以直接更快地直接传输文件。因此,对于我们的首次尝试,我们可能会询问操作系统该机器具有的IP(v4)地址,然后对照在同一Dropbox帐户上注册的其他机器进行检查。如果与我们在同一范围内,则直接传输文件。在很多情况下这可能会起作用。但是即使那样,仍然存在一个问题:NAT只起作用,因为我们可以重用地址。那么,如果192.168.0.23地址和192.168.0呢?在同一个Dropbox帐户上注册的42个地址实际上在不同的网络上(例如您的家庭网络和工作网络)?现在,您必须重新使用Dropbox服务器基础结构进行调解。(最后,Dropbox试图通过让每个Dropbox客户端在本地网络上广播以希望找到其他客户端来解决该问题。但是这些广播没有穿越您在NAT后面可能拥有的任何路由器,这意味着它不是一个完整的解决方案,尤其是在CGN的情况下。)
此外,由于第一次短缺(和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倾向于打破:
从根本上讲,网络堆栈采用的分层方法相对简单而优雅。尝试向刚接触网络的人解释它,他们不可避免地认为自己的家庭网络可能是一个易于理解的好简单网络。在一些情况下,我已经看到这种情况导致了一些非常有趣(过于复杂)的想法,这些想法是由于内部和外部地址之间的混淆而导致的路由工作方式。
我怀疑如果没有NAT,VoIP将无处不在并与PSTN集成在一起,并且使用手机或计算机拨打电话是免费的(您已经付费的互联网除外)。毕竟,当您和我只能打开64K VoIP流并且与PSTN一样好用时,为什么还要为电话付费?如今看来,部署VoIP的第一大问题是通过NAT设备。
我怀疑,如果我们拥有NAT中断的端到端连接能力,那么我们通常不会意识到可以简单得多的事情。人们仍然通过电子邮件(或Dropbox)自己发送文件,因为核心问题是当两个客户端位于NAT之后时需要中介者。
不久前,主要的RIR空间不足,无法进行正常分配。因此,对于大多数提供商而言,IPv4地址的唯一来源是他们自己的库存和市场。
在某些情况下,最好拥有专用的公共IPv4 IP,但这并不是绝对必要的。还有一堆已分配但尚未在公共Internet上使用的公共IPv4地址(它们可能已在专用网络上使用,或者可能根本没有使用)。最后,还有一些较旧的网络,其地址分配得比所需的宽松得多。
现在,三个最大的RIR允许在其成员之间以及彼此之间出售地址。因此,我们之间存在着一个市场,在组织中要么拥有自己不使用的地址,要么拥有一方面可以释放费用的地址,而另一方面却确实需要更多IP地址的组织。
很难预测的是,每个价格点将有多少供求关系,因此市场价格将来会做什么。到目前为止,每个IP的价格似乎仍然低得惊人。
理想情况下,Internet上的每个主机都应该能够获取全球范围内的IP地址,但是IPv4地址耗尽是真实的,事实上ARIN已经耗尽了其免费池中的地址。
每个人仍然可以很好地访问Internet服务的原因在于网络地址转换(NAT)技术,该技术允许多个主机共享公共IP地址。但是,这并非没有问题。
ISP曾经向公司提供256个IP地址的块。现在,ISP显得很st,给您(一家公司)一个5。回到2003年,您家里的每台PC和连接的设备都有自己的Internet IP地址。现在,电缆/ DSN / Fios路由器具有一个IP地址,并为您家中的所有PC提供了10.0.0.x ip地址。简介:ISP曾经浪费IP地址,现在不再浪费IP地址。
您已经获得了许多出色的答案,但是我想补充一下尚未提及的内容。
是的,IPv4地址耗尽很糟糕,具体取决于您的测量方式。一些公司仍然拥有大量的IPv4地址,但是我们开始看到诸如运营商级NAT之类的解决方法。
但是当转向IPv6时,许多答案都是错误的。
这是可以帮助解决IPv4地址短缺的技术的列表。每种都有自己的优点和缺点。
IPv6
另一个考虑因素:即使IPv6在今天完全流行,由于人们将使用很长一段时间的旧设备,淘汰IPv4仍需要20年左右的时间(我仍然看到Windows 2003服务器和Windows XP工作站偶尔!更不用说所有不支持IPv6的打印机和相机以及IoT小工具了。
最终,CGNat还远远不够。也许IPv6会流行起来,但是我们很有可能最终会看到国家级NAT,或者类似的东西。
当前,作为顾问,我经常不得不向我的客户指出他们暴露在IPv6上(这要感谢Teredo)。下一个问题始终是:“修复该问题需要花费多少钱?” 然后说“封锁它要花费多少?如果关闭它,我们会损失什么?” 猜猜每次都会做出什么样的决定。
底线:回答您的问题,是的,IPv4耗尽是真实的。我们将看到许多应对它的机制。IPv6可能会或可能不会最终成为方程式。
明确一点:我并不是说我喜欢这种情况。我希望IPv6能够成功(而且我希望看到IPv6的许多改进)。我只是看着目前的情况。
NAT是当IPv6成为一个主意时才发生的事情,当时它才成为现实,并且IP地址分配已成为一个现实问题(有人记得他们当时基本上是出于要求而发放C类的吗?),而现实世界在此期间需要一个解决方案。
NAT不足以用于物联网。如果物联网将要发生,那么它将与IPv6一起发生。物联网的性质与拨号世界的工作方式更加紧密一致,不同的是,同时会连接多个数量级的设备。
整个IPv4地址问题相当复杂。您可能会发现某些文章报道它已经用尽,而另一篇文章则谈到大量多余(从未使用过)的地址正在从一方出售给另一方。问题是,为什么缺少这些服务的人(发达国家的新兴地区和农村地区)无法使用这些服务?
以下是我们偶然冒险进行的一项研究的结果。它仅利用原始的IPv4协议RFC791和长期保留但几乎未使用的240/4地址块将IPv4池扩展256M。我们已经向IETF提交了一份名为EzIP(易于IPv4的语音)的提案草案:
https://tools.ietf.org/html/draft-chen-ati-adaptive-ipv4-address-space-03
基本上,EzIP方法不仅可以解决IPv4地址短缺问题,而且可以在很大程度上缓解IPv4域范围内网络安全漏洞的根源,并为Internet开辟新的可能性。实际上,该方案可以在需要的地方“秘密”部署到偏远地区。这些应该减轻在相当长的时间内部署IPv6的紧迫性,并使IPv4地址的交易市场无效。
任何想法或评论将不胜感激。
安倍晋三(2018-07-15 17:29)
老实说,我认为这没有人们想象的那么糟糕。是的,也许在某些地方,但是因为地址不足而没有那么多。这是因为它们都是所有人。也许是我的所在地,但是在过去七年左右的时间里,我已经为许多中小型企业完成了IT工作,而您所谈论的所有事情通常只是标准设置。除非您的设备很笨拙,否则首先很容易,否则首先要对网络进行不良设置。
就个人而言,我对NAT没问题。一般来说,它是附加的保护层。至少他们要么必须通过一个额外的设备,要么找到一种间接劫持我的连接的方法。就运行服务器而言,除非您为此付费,否则通常不属于您和/或与您的ISP违反合同。当然,您可以做到,他们可能不会打扰您,但是可以。
端口转发以及所有这些并不完全复杂。现在,也许有些设备不容易配置,但这不是因为IPv4。仅仅因为它无处不在,它仍然提供了最大的兼容性。
如今,实际上没有人需要自己发送电子邮件,并且向Drop-box或Google Drive或其他百万种其他类似服务发送东西并不是火箭科学,也不是慢事。我的意思是一切都同步。您将其放在文件夹中。除非您像我一样讨厌,否则您将通过ssh / sftp来完成所有操作(好的不是所有操作)。而且,如果出于某些原因您确实想运行自己的服务器,则云托管很便宜-我有一个专用的虚拟服务器,可以在ssd上运行linux。带宽太快了。它的启动速度比我键入向上箭头并按Enter的速度快。且可扩展整个安装每月花费5至10美元,带有免费备份且无电费。
确实不需要对等网络解决方案。如今,即使是大多数多用户游戏,也都可以通过中介服务器进行设置,交互和设置。另一方面,如果我在这篇文章中所读内容完全正确,那么当/当IPv6起飞时,IT将会人满为患且价格便宜。甚至手机也在接近类似光纤的速度。或至少是电缆。
如果您确实运行内部服务器,并且需要在网络内部或外部使用相同的域名打它,则始终可以使用基于Linux的路由器和dnsmasq或主机中的任何自定义条目来欺骗其地址。文件,以将您重定向到本地地址(如果在内部)。
真的,我不认为让每台设备都直接拥有自己的地址并在网上公开浮动是不现实的。如果有人想在攻击你时自卑,那就不管了。但是,如果您只是坐在开放的微风中,那么您就是坐鸭。不,我每天都会使用IPv4和NAT。但是很好,在那里。
Anywa,现在睡着了……也许还有更多话要说,但是明天我会检查一下,以防错过任何事情。我敢肯定还有更多。