大家好,今天蓝胖子花了100多块搞懂了 ipv6的用户如何访问ipv4 服务器,将收获与大家分享下。

ipv4和ipv6的协议栈不同,这意味着,其对应的ip包的封装和解析不同,那么只支持ipv4的机器就无法直接与ipv6的服务器进行通信。但目前已经有越来越多人使用ipv6进行通信,如果仅仅让服务器支持ipv4,这无疑会损失一大部分用户,特别是针对于海外业务。

如何让服务器便捷支持ipv4和ipv6都能同时进行访问,就成了我们需要思考的问题。这里我给出几个靠谱方案来解决此类问题。

首先要知道一个http网络请求的流程,我们获取到网站域名后通过DNS协议向DNS服务商请求网站的ip地址,接着才开始向这个ip发送真正的http请求。

在向DNS服务商发出请求过程中,如果用户客户端只支持ipv6,那么它会去DNS服务器查询域名的AAAA记录,如果用户只支持ipv4,那么会去DNS服务器查询A记录

AAAA类型的DNS记录里配置的是域名对应的ipv6地址,A类型记录里则是配置域名的ipv4地址。

linux服务器配置ipv6地址

目前,云服务厂商创建的服务器实例,默认是不分配ipv6的,我们可以通过配置,让其拥有一个ipv6公网ip,接着配置一条AAAA类型的DNS记录,指向这个ip,那么ipv6的用户就可以通过域名访问到服务器了。

我们可以将AAAA记录的域名 和 A记录类型的域名配置成一样。如下,

假设,我有个lanpangzi.org 的域名,配置其子域名为www.lanpangzi.org ,并且这个子域名需要同时有ipv4和ipv6的地址,我们就可以对其分别配置A类型和AAAA类型的DNS记录,其中content是对应的公网ip。

这样无论用户是用那种ip协议,都能找到www.lanpangzi.org的对应ip协议的ip地址。

只要得到了域名背后正确的ip地址,那么用户就能正常访问到服务器了。

但让linux开启ipv6的支持,还是比较繁琐,无论是在厂商侧设置公网ipv6还是本地linux服务器需要改动配置都比较复杂,所以我着重介绍下第二种方式

通过网络代理厂商透明进行协议转换

其实,既然ipv6的用户直接访问ipv4的服务器行不通,那么我们可以加个中间层来转发用户ipv6请求,如下所示,代理商与用户是通过ipv6协议,而与服务器则是通过ipv4。

注意下,用户的请求无论是DNS请求,还是http请求,都应该先通过代理商,DNS请求后代理商返回自己的服务器节点ip,用户再向服务器节点ip发出http请求时,再由该节点对http请求进行转发。

考察了市面上比较主流的网络代理商后,我选择cloudflare ,接下来,我来演示下如何通过cloudflare 来实现请求代理。

因为我本地的计算还是只支持ipv4,所以我将linux服务器配置成ipv6,演示下ipv4的机器如何访问只支持ipv6的服务器。原理是一致的,都是靠网络代理商转发请求。关于云服务商的服务器如何开启ipv6,我以阿里云为例,其官方文档在下方,

https://help.aliyun.com/zh/ecs/user-guide/step-1-create-a-vpc-that-supports-ipv6-addressing?spm=a2c4g.11186623.0.0.341a5048uktqgP#4fbf8a7026p05

ECS 开启ipv6

因为主机默认会有个网卡,我直接去网卡处新增一个ipv6的地址。

但默认生成的ipv6还不支持访问公网的能力,如下提示,还需要去交换机处开通公网带宽。

开通后的效果如下,

接着再配置下实例的安全组,配置成运行任何ipv6的地址访问,因为默认ipv6的包是进不来的。

这下才完成了服务器ECS的配置,我们目前的ECS实例已经拥有了一个公网ip了。

域名配置

接着,我们为ipv6公网ip配置一个域名lanpangzi.org,来作为应用程序的域名,用户应该通过www.lanpangzi.org这个域名来访问应用服务

通过dynadot ,我买了一个域名lanpangzi.org

接着,在cloudflare 上进行了账号注册,添加自己的域名



cloudflare 提供了免费版本,这对于我来说,再好不过了。

然后在 cloudflare 界面配置对域名的解析, 需要在域名注册商dynadot那里注册NS记录,来将lanpangzi.org的域名解析交由 cloudflare 。 NS记录的节点是在 cloudflare 配置域名时告诉给开发的。

NS类型的DNS记录,其作用是指明特定域名应该由哪台服务器去解析,这里是将lanpangzi.org 的域名解析交给了 cloudflare 自己的服务器节点。

dynadot 的DNS settings处配置NS记录指向 cloudflare 的ns节点 。

接着,就是在 cloudflare 上对子域名www进行配置,注意www.lanpangzi.org 我只配置了AAAA记录类型也就是 ipv6的地址。

如果仅仅是配置了这样一条AAAA的记录类型,不开启 cloudflare 的代理功能,在ipv4用户发出DNS请求去询问www.lanpangzi.org的ip地址时会因为找不到 ipv4的地址而造成请求失败。如下,我进行了测试,

在ECS上运行了一个go程序,监听80端口,并且将其收到的http请求头打印出来,在未开启代理时,在我本地浏览器对该域名进行访问(我本地的机器只支持ipv4),出现域名解析失败的错误。

在开启代理后,则http请求正常,且请求头中有 cloudflare 加的一些自定义头部。



综上,通过 cloudflare 代理http请求,可以透明的实现用户和服务器间ipv4和ipv6请求的转换,这也是我推荐的方式。

最后,整个域名和服务器的购买,我花了100多块,你们说这个钱,蓝胖子花的值不值。

花了100块大洋搞懂 ipv6的用户如何访问ipv4 服务器的更多相关文章

  1. [转]我花了一个五一终于搞懂了OpenLDAP

    轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的 ...

  2. 一文搞懂CDN加速原理

    开源Linux 长按二维码加关注~ 一.什么是 CDN CDN的全称是(Content Delivery Network),即内容分发网络.其目的是通过在现有的Internet中增加一层新的CACHE ...

  3. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  4. 机器学习:让我们彻底搞懂CNN【转】

    本文转载自:http://115.com/182920/T1266078.html 机器学习:让我们彻底搞懂CNN 上世纪科学家们发现了几个视觉神经特点,视神经具有局部感受眼,一整张图的识别由多个局部 ...

  5. 搞懂分布式技术10:LVS实现负载均衡的原理与实践

    搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...

  6. hiho一下 第二十九周 最小生成树三·堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】

    题目1 : 最小生成树三·堆优化的Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 回到两个星期之前,在成功的使用Kruscal算法解决了问题之后,小Ho产生 ...

  7. 真正“搞”懂HTTPS协议之目录和一点啰嗦

    说实话,我写完这个系列之后,或者说抄完这个系列之后,唯一的脑海里浮现的词叫做"惭愧".如果你读过罗剑锋老师的<透视HTTP协议>的话,就能察觉到本系列越往后面的部分,几 ...

  8. 一文带你搞懂java中的变量的定义是什么意思

    前言 在之前的文章中,壹哥给大家讲解了Java的第一个案例HelloWorld,并详细给大家介绍了Java的标识符,而且现在我们也已经知道该使用什么样的工具进行Java开发.那么接下来,壹哥会集中精力 ...

  9. 来一轮带注释的demo,彻底搞懂javascript中的replace函数

    javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...

  10. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

随机推荐

  1. VMWare“Could not get vmci driver version:句柄无效”的错误

    这几天都不顺,从周一接手数据仓库的事,本来以为很简单,很快都能搞定,结果搞了一天没搞定,主要原因,自己觉得是系统底层搭建缺失个别库文件, 想换一个高一点版本的虚拟系统centos6.2结果又把虚拟机搞 ...

  2. "explicit" 的使用

    今天在编译项目时,代码审查提示 "Single-parameter constructors should be marked explicit" 于是就在构造函数前加上 expl ...

  3. 2021-07-20 value!==value,JavaScript中NaN

    关于NaN NaN 属性代表一个"不是数字"的number类型的字面量值.这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字. NaN的出现场 ...

  4. 关于谷歌浏览器出现“错误代码:net::ERR_UNSAFE_PORT”的解决办法

    搭建项目时需要自己配置端口信息,但是有人搭建之后会出现如下情况 但是换用edge等浏览器没有问题,这是因为chorme浏览器有自己的默认非安全端口, 若访问这些端口就会出现这个错误,并且所有采用cho ...

  5. 解决Spring boot 单元测试,无法读取配置文件问题。

    1.启动类上加上@EnableConfigurationProperties 2.springboot版本springboot 2.X版本在单元测试中读取不到yml配置文件的值这是个大坑,在项目中写单 ...

  6. zlib开发笔记(一):zlib库介绍、编译和工程模板

    前言   Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库.   zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可 ...

  7. C C++结构体四种方式

    第一种语法表示 struct 结构体名称 {     数据类型 member1:     数据类型 member2;  };  #include<iostream> using names ...

  8. 【Azure 应用服务】如何让App Service 支持 Delete 方法 

    问题描述 如何让webapp 支持 delete 方法? 在不修改设置的情况下,调用DELETE方法出现405错误 - 方法不被允许 问题解决 基于当前App Service在Windows的环境中运 ...

  9. 图数据库认证考试 NGCP 错题解析 vol.02:这 10 道题竟无一人全部答对

    如果你读过「NebulaGraph 错题解析第一期」,大概知道在错题解析未出来之前,NebulaGraph 专业技能认证 NGCP(全称 NebulaGraph Certified Professio ...

  10. Zabbix“专家坐诊”第179期问答汇总

    欢迎大家加入乐维社区zabbix问答专栏,除了在论坛发帖求问外,还可以在QQ群里交流进步,并且每周三我们会进行免费的技术答疑活动. 问题一: Q:Zabbix alert syncer process ...