前言
之前说过我现在这个项目技术上其实并不复杂,复杂的是网络。因为我们系统和外部系统交互,而无论是外部系统还是内部系统都有各种安全限制,其中不乏通过防火墙、IP白名单等来进行限制的。当然这是常规操作,然而集团有个系统需要我们提供H5页面嵌入到他们的app上,坑爹的是他们要求你必须支持IPv6。
好啦!坑爹事情就开始了,测试环境不提供公网IP,集团要求我们提供公网IPv6地址。没办法了只能用厂商那边的测试环境了,因为他们提供公网IP,但是他们提供的测试环境不支持IPv6。我度娘了一下,我草IPv6要找运营商申请...
于是就想了一下是否自费申请一个阿里云ECS服务器IPv6公网IP,然后使用nginx代理出去,于是就开始造。
操作
前提
已经购买的ECS服务器
操作系统CentOS 7.6
操作参考
搜索了好一阵没有看到配置公网IPv6的文档,只找到配置ECS实例的IPv6地址 文档。幸运的在步骤三中是开通IPv6公网带宽 的内容,地址如下:help.aliyun.com/zh/ecs/user...
实际操作
1、为已有实例分配IPv6地址时
检查自己的实例支持IPv6后,VPC开通IPv6和交换机开通IPv6。
进入控制台-专有网络,我们选择自己ECS所在的地域后发现专有网络已经存在,这一步可以跳过。
直接进入下一步,为已有VPC开通IPv6网段 ,直接开通IPv6。
点击开通IPv6
确定后专有网络IPv6网段字段信息如下:
2、为已有实例分配IPv6地址
登录ECS管理控制台,进入实例,选择地域后,在需要开通IPv6的实例后打开网络和安全组
找到其下的管理辅助私网IP
进入找到IPv6地址,点击分配新IP
默认自动分配,直接确定
分配完了怎么查看你的IPv6地址?ECS管理控制台,选择实例与镜像 > 实例 ,找到目标实例,单击实例ID进入实例详情 页面,在绑定资源区域。
3、开通IPv6公网带宽
专有网络管理控制台,公网访问 > IPv6网关,点击id
进入IPv6网关的详情页面,点击开通公网带宽
按自己需要进行购买带宽流量
开通后这里显示就变了
4、配置IPv6地址
远程登录你自己的ecs服务,使用阿里云提供工具命令的自动配置IPv6地址(非CentOS参考文档自行获取相应的地址)
bash
wget https://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/ipv6/rhel/ecs-utils-ipv6
#使用管理员权限执行以下命令,运行ecs-util-ipv6工具。
chmod +x ./ecs-utils-ipv6
./ecs-utils-ipv6
执行后结果如下
检查是否安装了多网卡配置工具,如果没安装就不用管了,如果安装了参照文档操作即可
bash
#以下命令二选一
ls /sbin/eni-ifscan
systemctl cat eni.service
结果我的没有安装
5、添加IPv6安全组规则
ECS管理控制台,选择网络与安全 > 安全组 ,在操作 列中,单击管理规则 ,选择入方向 或出方向
配置安全组
添加80端口和8080端口的出入安全组,一般配入就行
6、测试IPv6的连通性
使用ipv6访问外部测试
ping -6 aliyun.com
使用ipv6从外部访问
从外部使用telent访问ipv6和端口
按照结果连通性是没问题了,接下来测试一下安全组的端口80和8080,找一台能访问公网支持IPV6的ecs。
端口不通,各种方法试了一天,突然找到一条信息"端口需要监听"。
然后发现是因为对应的端口没有服务监听,然后马上安装nginx将80和8080端口配置上。
ini
server {
listen 8080;
#这个是配置ipv6端口监听的配置,80也一样
listen [::]:8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
安装后再使用telnet -6结果就通了
ipv6网站访问
上述我们配置好了IPv6已经相应的端口,但是当我们使用本地想要访问IPV6的ip地址时需要注意格式为:
ruby
http(s)://[ipv6]:port/path1/path2
当然,这还不是最主要的,你可能使用了上述的格式也访问不了。
因为能否使用ipv6的地址访问网站还需要你所在的网络和系统都支持ipv6,检测方式如下:
objectivec
要判断本地电脑是否支持IPv6的网站访问,可以采取以下几种方法:
1、使用第三方测试网站:可以访问一些专门用于测试IPv6支持的网站,如http://test-ipv6.com/,如果能够正常访问并显示测试结果,则说明本地电脑支持IPv6。
2、使用命令行工具:在Windows系统中,可以打开命令提示符(CMD),然后输入"ping6 ::1",如果能够正常响应,则说明本地电脑支持IPv6。在Linux或Mac OS系统中,可以使用"ping6"命令进行类似的测试。
3、检查网络适配器设置:在Windows系统中,可以打开网络和共享中心,查看本地网络连接的状态,如果IPv6协议已经启用,则说明本地电脑支持IPv6。
4、使用浏览器测试:可以在浏览器地址栏输入"http://ipv6test.google.com/",如果能够正常访问并显示测试结果,则说明本地电脑支持IPv6。
***需要注意的是,即使本地电脑支持IPv6,也需要相应的网络设备和ISP提供IPv6服务才能正常使用。因此,在进行测试时需要确保网络连接正常,并且ISP已经提供了IPv6服务。***
访问test-ipv6.com/结论是网络都不支持
打开我的mac电脑系统偏好设置查看
markdown
1、打开"系统偏好设置"并选择"网络"。
2、在左侧栏中选择你的网络接口(例如以太网或Wi-Fi),然后点击"高级"按钮。
3、在弹出的窗口中选择"TCP/IP"选项卡。
4、查找"IPv6地址"或"IPv6 配置"部分,这里会显示你的Mac的IPv6地址。
***也可以在终端使用命令ipconfig getifaddr en0***
呵呵,没戏!
收获
其实ipv6这个东西早好几年就听说过了,最近在这个公司做项目也遇到过好几次分配资源的给我们弄了个IPv6的服务器。然后被我果断拒绝了,引入从来没有接触过的东西绝对坑爹,毕竟我是菜鸡。
没想到这次因为一个bug,各种环境不相通导致自己不得不尝试接触ipv6,果然又让自己踩了个坑。
这样也好至少自己对ipv6这东西有点底了,反正后面有人想再让我ipv4转成ipv6,我肯定会弄死他。
这东西还没完全普及,在没有强大团队和领导支持下,不要轻易在生产上尝试很危险。
总结
1、阿里云的IPv6配置和申请,照着文档来就行,仔细点就不会错;
2、阿里云的服务器看型号,大多都是支持IPv6的,配置后使用另外一台测试可以测试连通性;
3、如果要telnet端口需要启动对应服务监听,监听IPv6的端口这里用nginx做了个简单的演示,确实可行;
4、就算部署了IPv6的网站,想要访问需要客户端的系统和网络以及其运营商支持;
5、如非必要,生产上"不要轻易尝试放纵的滋味,你可知这样会让你心碎";
虽然因为各种原因,公司提供给人集团不合规,但也算是一种学习。
本文只是粗浅的记录了一下自己遇到的 ipv6 的情况,如果你觉得本文描述不对或者你对 ipv6 有更好的理解,也希望能指正或者指教一下,感谢!