imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
作者蒂姆,译者大余若之
来源:ETH钱包无法从苹果下载:infoq
为了庆祝一年一度的世界 IPv6 日(2011 年 6 月 6 日开始),我们希望以一种有意义的方式纪念这一天。 在过去的几个月里,我们一直忙于在数据中心启用 IPv6。 为此,我们针对苹果无法下载的ETH钱包设计了全新的架构,并在网络、系统、工具等方面做了充分的准备,最终于6月5月6日在()环境中成功启用了IPv6 。 此举是在所有数据中心实现全功能 IPv4/IPv6 双栈的重要里程碑。 成功实现这一目标后,下一步将是彻底放弃IPv4。
在本系列文章中,我们将介绍从 IPv4 迁移到 IPv6 时需要考虑的问题,特别是像这样的大型企业在迁移过程中可能遇到的挑战。 但首先我们要介绍有关 IPv4 和 IPv6 的一些基本信息,以及迁移过程中要考虑的基本原则。
IPv6简史
IPv6的整个发展历史是与IPv4的发展密不可分的。 IPv4由互联网工程任务组(IETF)于1981年正式建立,并于1992年,互联网社区提出了IPv4寻址方案的扩展。 IETF 为此创建了一个工作组; 1996年,一系列名为请求注释(RFC)的文档正式确立了IPv6(每个文档名称以RFC开头,后面跟着一个数字以区分不同的文档)。
同时,为了缓解IPv4地址空间耗尽的问题,他们为内部专用网络保留了3个公共IPv4地址段()。 大多数组织只需要向互联网公开少量服务,因此对公共IP空间的需求实际上并不大。 通过在组织内使用私有 IPv4 地址块可以减少所需的 IPv4 地址数量,从而最大限度地减少对公共 IP 空间的需求。 这样,业界就将公共IPv4地址空间耗尽的那一天推迟了很多年。
1996年,IETF正式颁布了一份文件,该文件是对该标准的改进,其中谈到了使用私有或公共地址空间相互通信的设备的不同需求。 三年后,1999年提出的网络地址转换(NAT)技术可以自动翻译来自专用网络的互联网数据包,将其转发到公共互联网,并将从公共互联网收到的响应转换到专用网络。 网络。 内部设备可以通过NAT与公网设备进行通信,但无法进行反向通信。 但 NAT 带来了一些新问题。 例如,当两家公司合并时,有时可能需要解决内部路由冲突,因为合并前使用了相同的私有IPv4地址段。 所有私有 IPv4 流量有时看起来都来自同一个公共 IPv4 地址,因此作为公共服务提供商,如果阻止来自某个 IPv4 地址的通信,可能会影响数千台设备或用户。
1995年底的发布意味着IPv6时代正式开始。 IPv6最初仅部署在实验室的某些操作系统和路由器中,后来基于它建立了一些公共实验网络。 随着越来越多的RFC陆续发布,越来越多的实施等问题得到解决,IPv6网络逐渐达到了生产环境使用的质量要求,但直到2008年2月,互联网号码分配机构(IANA)才正式批准IPv6加入域名系统(DNS)根区后正式登场,随后IETF在同年3月的会议上进行了IPv4停用实验。 在大约一个小时的实验过程中,工程师们测试了在不使用 IPv4 的情况下可以在互联网上完成哪些操作。 经过这次实验,很多软件都发布了相应的补丁。
2011年6月6日,“世界IPv6日”活动启动。 在24小时的活动中,许多大公司测试了其网站在IPv6(作为IPv4的补充)环境中的性能。 该事件一年后的同一天被称为“IPv6 发布日”。 在这一天,许多公司将其网站切换到 IPv6,并至今仍在使用。 该网站自 2014 年起正式通过 IPv6 访问。
如今,IPv6流量占全球互联网流量的10%以上,部分国家比例甚至更高,如美国已达到30%以上,比利时已超过50%。 一些移动网络已经以IPv6为主,占总流量的80%以上。 苹果还宣布,所有移动应用程序必须能够支持纯 IPv6 网络,并使用 NAT64(类似于 NAT,但用于将 IPv6 数据包转换为 IPv4 格式)来访问仍然使用 IPv4 的互联网部分。 ,并且还分别发现在IPv6环境下使用应用程序(尤其是移动应用程序)的端到端速度也得到了很大的提升。
IPv4 和 IPv6 之间的主要区别
IPv4 地址包含 32 位,IPv6 地址包含 128 位。 由于地址“更大”,因此IPv6报头也更大,但其长度是固定的,而IPv4报头数据包长度是可变的。 更重要的是IPv6不再需要验证。 一般来说,验证工作是在硬件层面或者上层实现的。 这种设计有助于减轻路由器的负载。 最后,在IPv6中,路由器不需要分割数据包。 如果需要发送的数据包太大,路由器会向发送方发送Too Big(PTB)消息,允许发送方重新发送合适大小的数据包。 这些改进减少了路由器处理每个数据包时的负载,从而使路由器更加高效。
IPv6的架构保证设备可以通过无状态地址自动配置(SLAAC)技术获得自己的IPv6地址,而无需集中服务。 IPv6 有两种主要类型:链路范围和全局范围。 本地IPv6地址只能在当前网段内使用。 全局地址通常来自路由器公布的网络并与接口的MAC地址组合。 IPv6 中还有一种集中式服务:该服务基于动态主机配置协议 (DHCP),但经过轻微修改以与 SLAAC 共存。
迁移到 IPv6
迁移到 IPv6 的过程产生了一个有趣的“Catch-22”:最受欢迎的网站必须迁移到 IPv6 才能成功迁移,但通常将小型网站迁移到 IPv6 的过程比迁移大型网站容易得多。 IPv6网络上的服务器可以手动快速配置,但大型网站往往包含许多面向IPv4的路由器、负载均衡器、防火墙、监控工具以及各种设备和软件,需要进行相应的更改才能使用。 IPv6。
世界IPv6日和世界IPv6发布日帮助互联网社区解决了很多问题,顺利迁移了大型网站经常需要的各种专用设备和软件。 路由器、负载平衡器和防火墙正在逐渐进行各种修复,并且地理分段正在得到改进。 支持 IPv6 的 Web 缓存服务数量不断增加,安全过滤器已可以处理过大 (PTB) 消息,支持 IPv6 的 DNS 基础设施可实现更快的响应,并且还有许多其他改进。
然而,将内部网络转换为 IPv6 是一个完全不同的故事:该过程需要许多其他组件协同工作,并且需要能够扩展。 对于大规模部署,即使空间也不足以满足所有内部网络需求。 每个国家的办公室都需要自己的网络,云平台也需要大量的计算机。 因此,对于大型网络来说,即使是10.0.0.0/8也不够大,地址空间重叠会成为一个麻烦的问题。 使用 NAT 等解决方案转换地址空间可以缓解此类问题,但该解决方案也带来了一系列新问题,例如应用程序中嵌入的 IP 地址、通过缩放处理大量转换以及由于各种安全问题而导致的问题。通过引入“NAT防火墙”。
在真实环境中,可以直接关闭路由器的IPv4功能并启用IPv6,但大多数情况下这是不可行的。 我们认为,过渡内部网络的最佳策略是首先迁移到双栈环境,并通过完善的“逐步淘汰”策略完全弃用 IPv4。 这样大家就可以有更多的时间来熟悉IPv6,并逐步将自己的工具、软件和流程迁移到IPv6。 经过这些步骤后,只有一小部分流量需要通过 IPv4 进行处理。 但这种方式的最大缺点是,不仅支持双栈环境比较复杂,而且维护两个网络需要大量的运维工作,会减慢新业务的部署速度,并可能导致如果两个协议无法同步,就会出现新的问题。 。 IP地址的管理也成为一项复杂的任务,因为IPv4和IPv6地址空间的映射通常需要许多其他功能,例如ACL的实现、路由聚合、负载均衡器等。
因此,有必要为未来做好准备,尽快启动IPv6迁移,然后逐步将越来越多的流量成功迁移到IPv6。 由于提供对两个网络堆栈的支持将使工作复杂度增加近一倍,因此一旦迁移到IPv6,就需要尽快彻底放弃IPv4。
IPv6迁移
双栈环境可以帮助您逐步将服务器迁移到IPv6。 部分应用的迁移难度可能会稍低一些。 例如,一些核心 UNIX 服务的迁移是一项简单的任务。
6 月 6 日,我们决定开始迁移我们的临时环境之一,特别是在发布“新”服务之前用于测试的环境。 我们计划通过为环境中的所有系统添加全局 IPv6 地址并迁移尽可能多的核心服务来提高 IPv6 网络流量的比例。
我们需要确保迁移不会破坏未经测试的服务,并且为了实现必要的控制,我们利用了 IP 双栈环境的一些基本功能。 例如,我们大部分的软件都是通过Java开发的。 默认情况下,Java应用程序在运行时需要通过()来声明自己正在使用IPv6。 因此,我们无需担心软件突然发现 IPv6 并开始自行使用该环境。 我们还决定不为任何使用全球 IPv6 地址的计算机的主机名添加 AAAA DNS 记录,以便以其他语言发起的连接不会在 IPv6 上运行。 这确保其他软件、工具和实用程序可以像以前一样继续在 IPv4 上运行,而不会对整个环境造成任何干扰。
从当天下午开始,我们在几分钟内就向 1500 多个系统添加了静态全局 IPv6 地址。 对于任何这种规模的系统来说,自动化非常重要,可以帮助我们快速部署整个系统的变更。 在验证通过 IPv6 运行时没有遇到错误后,我们为这些主机添加了 AAAA 记录,以便这些操作系统优先选择 IPv6 而不是 IPv4。 所有这些工作完成后,开始将某些核心基础设施服务(DNS、SMTP、NTP、集中式身份验证等)的流量从 IPv4 迁移到 IPv6。 在大约一个小时内,我们以受控方式将基础设施内的多项服务切换到 IPv6。 在接下来的几个月里,我们将继续将更多的基础设施服务迁移到IPv6,我们还将努力让Rest.li等自主开发的软件框架更喜欢IPv6而不是IPv4。
除了上述工作外,我们目前正在建设一个新的数据中心imToken官网,以便为我们的会员提供服务。 该数据中心的设计充分考虑了IPv4和IPv6双栈,还包含了许多其他先进技术。 这个数据中心是内部调用的,在之前的很多博文中都有介绍过。
借助支持 IPv6 的临时和生产环境,我们可以将越来越多的内部流量迁移到 IPv6。 6月6日第一轮工作顺利完成后,我们对内部其他环境迁移到IPv6更有信心了。
一旦您适应了 IPv6 流量,就该开始考虑弃用 IPv4 并在纯 IPv6 环境中运行您的数据中心了。 这个目标并不遥远,我们计划在2017年全面实现。同时提供对IPv4和IPv6的支持意味着近两倍的工作量,因此一旦决定采用IPv6,您需要确保过渡过程如下尽可能短。 然而,目前许多供应商和软件产品并不完全支持IPv6。 为了实现我们的最终移民目标,需要采取必要措施来解决这种情况。
内部成立了由“IPv4处理专家”组成的“AAAA团队”。 这是一个伟大的技术项目,我们也希望更多像我们这样的组织将他们的数据中心迁移到IPv6。 只有通过这种集体合作,我们才能成功解决阻碍 IPv6 在数据中心和云环境中全面采用的障碍。 剩余问题。 请加入我们,为最终目标做出贡献。
在本系列的第 1 部分(见上文)中,我们介绍了将内部网络迁移到 IPv6 的原因。 网站自 2014 年起就可以通过 IPv6 公开访问,而我们的员工早在这之前就已经能够通过 IPv6 访问公共互联网。 虽然我们网络中的大多数组件长期以来都支持 IPv6,但直到最近内部数据中心仍在 IPv4 下运行。 在这篇文章中,我们将从网络运维的角度介绍为什么我们需要创建一个同时包含IPv4和IPv6的全球网络,并开始在自己的数据中心启用双栈环境,并期待有一天彻底放弃IPv4。 挑战。
网页设计:回到未来
除了链路本地地址和现已弃用的站点本地地址等例外情况,所有 IPv6 地址都是全局可路由的。 我们已经从 IPv4 空间知道,使用此类地址的专用网络不会“泄漏”到互联网。 然而,这在 IPv6 网络中并不能得到保证,因为所有全局 IPv6 空间都是全局可路由的。 现在,数据中心的设计需要采用更强大的安全策略,因为流量可能来自内部和外部来源。 不再可能通过一些简单的策略来允许或拒绝地址。
当所有地址均可全局路由时,数据包可能会采用不同的路径到达同一目的地。 如果转发路径(path)设计不够仔细,可能会导致数据包从一个防火墙出去,又从另一台防火墙返回。 防火墙是有状态的,这意味着它们会记住内部计算机和外部计算机之间的连接状态,以便自动允许返回流量通过防火墙。 但跨防火墙共享状态很难实现,而且可能不够安全。 此外,路径的某些部分可能会通过安全性较低的公共互联网而不是内部网络传输。
对于 IPv6,无法通过查看空间中是否包含目标 IP 地址来轻松确定流量是内部流量还是外部流量。 内部和外部流量仍然需要隔离,即使是虚拟的。 为了实现这种隔离,必须重用NAT技术诞生之前的网络设计思想。 换句话说,我们“回到了未来”。
NAT允许隐藏在数据中心的计算机直接访问,这本质上需要建立一对一的NAT连接。 我们决定在我们的数据中心设置一个不向互联网公布的 IPv6 地址段。 这也意味着位于该地址段的所有计算机都必须通过在DMZ中设置的一系列代理或网关来访问。 为了使整体架构尽可能简单,如果内部计算机无法通过 IPv6 直接访问互联网,我们不希望通过 IPv4 直接访问内部计算机。 由于我打算实现双栈,因此需要禁用 IPv4 上的所有 NAT。 这样,里面的所有计算机都必须成为多宿主计算机,无论它们使用 IPv4 还是 IPv6。
通过使用边界网关协议 (BGP),一台路由器已知的 IPv4 和 IPv6 路由可以通过 IPv4 或 IPv6 连接通告给周围的其他路由器。 由于 的最终目标是完全弃用 IPv4,因此我们决定不在网络堆栈上发布公告,并且我们所有的 IPv6 路由公告将仅通过 IPv6 上的 BGP 会话来发布。
添加新的网络堆栈需要至少与原始 IPv4 环境相当的安全性。 此时的一种方法是使用过滤器拒绝所有 IPv6 流量并从那里开始。 然而,一旦设备支持 IPv6,当设备无法通过 IPv6 到达目的地且应用程序无法“优雅”回退到 IPv4 或无法及时实施回退时,服务可能会中断。 所以我们选择了另一种方法。
另一种方法是将现有的访问控制列表 (ACL) 直接从 IPv4 转换为 IPv6。 这种方法的效果有何不同? ETH钱包苹果无法下载? 例如,将 ICMP 过滤器转换为过滤器可以让 Ping 数据包直接到达目标计算机,但正如本系列第 1 部分中提到的,Too Big (PTB) 信息是 IPv6 特有的,该信息对于通过封装进行通信至关重要隧道 ( ) 或使用巨型帧。 以太网 IP 数据包的最大大小通常限制为 1,500 字节,但隧道技术将一个数据包封装在另一个数据包内(例如 NAT64),并且为了通过高速链路实现更快的传输,可能需要巨型数据包。 帧(超过 1,500 字节)数据包。 为了避免遇到难以诊断的网络连接问题,必须保证PTB信息能够顺利生成、接收和处理。 由于IPv4(以及其他类似情况)没有PTB的概念,现有的ACL无法直接转换为IPv6版本,否则将无法提供授权PTB信息的规则。
最终,我们成功地实现了通过访问控制列表 (ACL) 保护环境、计算机等的目标。 在启用IPv6网络中的两台设备并创建双栈之前,如果没有创建与IPv4规则等效的IPv6 ACL规则,可能会导致设备之间的通信中断。
此外,我们还使用虚拟IP(VIP)将客户端通过一个IP地址连接到多个服务器。 这些 VIP 的配置在 IPv4 和 IPv6 网络中略有不同。 例如,一些处理 VIP 的负载平衡器配置为重写数据包的以太网部分,以便正确发送到最终目标服务器。 无论 IPv4 还是 IPv6,服务器都必须能够使用自己的本机协议处理数据包。 因此,如果 VIP 是双堆栈的,则意味着该 VIP 代表的所有计算机都必须是双堆栈的。 在负载均衡器的配置中,IPv4和IPv6的VIP配置是两个不同的配置选项,但我们不希望在DNS中为VIP设置不同的名称。 同样,为了避免产生其他技术债务,由于最终目标是使用纯 IPv6 环境,因此我们不想使用诸如 -v6 之类的主机名。 因此,在 DNS 端,当服务器可以开始处理 IPv6 流量时,AAAA 记录将添加到 VIP 名称中。
通过上述问题,我们意识到,当并非所有计算机的主机名都具有 DNS AAAA 记录(或反向 DNS 记录,如果需要)时,为设备创建 IPv6 地址模式可以帮助我们实现很多目标,例如在不同机器之间定义 IP 规则相互访问的要求。
为设备提供的 IPv6 地址是什么?
我们不想为主机名添加 DNS AAAA 记录,因为添加该记录后,与这些服务器的连接将首选 IPv6。 我们首先要确保所有软件都支持IPv6,然后才能启用双栈服务器。
另外,我们不想将 IPv4 地址嵌入到 IPv6 地址中(例如:2620:abcd:efef::192.168.1.1),因为:
上例中的地址将在接口上表示为 2620:abcd:efef::c0a8:0101;
IPv4地址空间耗尽问题尚未成功解决;
弃用 IPv4 将产生技术债务。
为了轻松地将 IPv4 ACL 转换为 IPv6 ACL,我们仍然需要能够从计算机的 IPv4 地址知道其 IPv6 地址,而无需为主机名添加 AAAA 记录。 (ACL 确定哪些计算机有权访问特定计算机。)
我们解决这个问题的方法是将每个 IPv4 网络与 IPv6 网络配对,并使用 IPv4 地址的最后两个字节 ( ) 的十六进制格式作为 IPv6 地址的最后一个(IPv6 地址表示为 4 字节/16 位,用冒号分隔)。 选择使用最后 2 位组的原因是,我们的一些最小的 IPv4 网络可以使用 /23 掩码与 IPv6 网络配对(大多数这些网络是 /24,以便适应同一个机柜)或 / 25 级)。 我们使用与 IP 地址管理系统 (IPAM) 中相同的子网配对选项。 通过这种方式,可以根据当前为特定 VLAN 分配的 IPv4 子网获取 IPv6 子网。
为了简化 ACL、路由聚合以及内部和外部网络边界等问题,我们决定为当前和未来的所有数据中心使用足够大的 IPv6 网络。 这样做还可以简化内部IPv6流量的识别,因为只需地址的源块(Block)就足够了。
为了进一步简化此过程,我们还决定将 fe80::1 设置为连接到服务器的所有路由器接口的链路本地 IPv6 地址。 在所有数据中心中,服务器总是会使用eth0接口来访问默认网关,所以默认网关始终可以通过eth0接口的fe80::1地址来访问,即“fe80::1%eth0 ”。 建立默认网关不需要路由器通告信息。 我们所有的 IPv6 地址都是静态的(因为动态 IPv6 地址需要在 DNS 中维护),因此客户端始终可以找到要连接的服务器。 由于服务器数量众多,全天都会发生多个(大多数是静态的)服务器更新。 通过使用FE80::1作为网关,并使用专门的脚本或工具解析路由表,可以知道任何网段都不需要默认网关。 对于 IPv6 地址或默认网关,任何动态架构都必须通过持续广播有关网络的信息来使系统保持动态状态。 但对于静态,您不必确保信息必须及时广播到服务器和设备以允许它们维护自己的网络状态。 我们的服务器IP就是采用这样的结构。 我们的网络设备采用更传统的架构,点对点链路通过较大的地址块形成独特的网络,而()地址是从专用的IPv6地址空间中提取的。
对于服务器,我们使用静态 IPv4 和 IPv6 IP 地址。 我们将使用上面提到的 IPAM 工具记录所有网络和主机名。 这样,在调配设备时,就可以知道每台主机位于哪个机柜,用哪个端口连接。 IPAM 信息将包含在 DNS 中,因此无需使用动态 DNS 将 IP 映射到主机名。 此外,我们的应用程序堆栈通过服务发现将服务映射到主机名。 考虑到这些因素,使用静态 IP 地址更有意义,确保我们可以控制 IP 的分配,并且应用程序堆栈可以使用持久的名称到 IP 地址的对应关系。
与IPv4策略的区别在于,无需使用NAT66提供代理等DMZ功能的支持,即可通过IPv6访问互联网。 DMZ 中的所有主机都将使用多宿主连接来提供数据中心的内部 IPv6 连接以及通过防火墙到 的外部 IPv6 连接。
为了支持 纯 IPv6 数据中心的最终目标,我们需要确保端点访问控制器访问控制系统 ( 、 )、网络时间协议 (NTP)、 ( )、简单网络管理协议 (SNMP) 和 sFlow 等服务例如IPv6可以支持IPv6源地址,并且在功能上可以与IPv4看齐。 这意味着应用层需要支持IPv6,并且用于管理所有这些设备的工具也需要支持IPv6。 最终所有设备都需要通过纯 IPv6 网络进行配置。 面对IPv6,零接触配置(ZTP)技术仍然需要完善,因为它仍然使用大量遗留组件。 在本系列的第三篇文章中,我们将从高层次的角度介绍如何使软件或应用程序在IPv6网络中正常运行。
致谢
AAAA团队的以下成员在本文的写作过程中得到了很大的帮助:
Zaid Ali, Bibik, Bo Feng, David, David Hoa, KB, Henry Ku, Kumar, Vikas Kumar, Tommy Lee, Leigh, Ved, Shah, , Shawn Zandi, Zaugg, David Paul, Paul .
作者:Tim,阅读英文原文:IPv6 at Part I, "'" Away at IPv4
感谢陈兴禄审阅本文。
版权声明
本文仅代表作者观点,不代表xx立场。
本文系作者授权xx发表,未经许可,不得转载。