docker nginx网站 ipv6改造方案和步骤
docker nginx网站 ipv6改造方案和步骤整体概况改造原因ipv6和ipv4基础知识部署详情改造方案具体实施实施步骤结束语整体概况改造原因最近公司在做ipv6的系统改造,从网络到程序都需要制作ipv4和ipv6的支持。一、保证用户可以在仅支持ipv6的网络下进行正常访问。二、为以后全面扩展ipv6实施做基础工作。因为ipv6将全面取代ipv4.ipv6和ipv4基础知识IPv4可提供4,
整体概况
改造原因
最近公司在做ipv6的系统改造,从网络到程序都需要制作ipv4和ipv6的支持。一、保证用户可以在仅支持ipv6的网络下进行正常访问。二、为以后全面扩展ipv6实施做基础工作。因为ipv6将全面取代ipv4.
ipv6和ipv4基础知识
- IPv4可提供4,294,967,296个地址,IPv6将原来的32位地址空间增du大到128位,数目是2的128次方。能够对地球上每平dao方米提供6×1023个网络地址,在可预见的将来是不会耗尽的。
- IPv4 使用地址解析通讯协议 (ARP) IPv6使用用多点传播 Neighbor Solicitation消息取代地址解析通讯协议 (ARP) 。
- IPv4 中路由器不能识别用于服务质量的QoS 处理的payload。IPv6中路由器使用 Flow Label 字段可以识别用于服务质量的 QoS 处理的 payload
- IPv4的回路地址为: 127.0.0.1, IPv6的回路地址为 :
000:0000:0000:0000:0000:0000:0000:0001 可以简写为 ::1。 - 在IPv4中,动态主机配置协议( Dynamic Host
ConfigurationProtocol,DHCP)实现了主机IP地址及其相关配置的自动设置。一个DHCP服务器拥有一个IP地址池,主机从DHCP服务器租借IP地址并获得有关的配置信息(如缺省网关、DNS服务器等),由此达到自动设置主机IP地址的目的。IPv6继承了IPv4的这种自动配置服务,并将其称为全状态自动配置(stateful autoconfiguration) - Pv4使用 Internet 群组管理通讯协议 (IGMP) 管理本机子网络群组成员身份,IPv6使用 Multicast Listener Discovery (MLD) 消息取代 IGMP
- 内置的安全性。IPSec由IETF开发是确保秘密、完整、真实的信息穿越公共IP网的一种工业标准。IPsec不再是IP协议的补充部分,在IPv6中IPsec是IPv6自身所具有的功能。IPv4选择性支持IPSec,IPv6自动支持IPSec
- 更好的QoS支持。QoS是网络的一种安全机制,通常情况下不需要QoS,但是对关键应用和多媒体应用就十分必要。当网络过载或拥塞时,QoS 能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。在IPv6 的包头中定义了如何处理与识别传输, IPv6 包头中使用 Flow Label 来识别传输,可使路由器标识和特殊处理属于一个流量的封包。流量是指来源和目的之间的一系列封包,因为是在 IPv6包头中识别传输,所以即使透过 IPSec 加密的封包 payload,仍可实现对 QoS 的支持
详细对比请看 ipv6和ipv4史上最全对比
部署详情
应用层:
现在部署的网站用docker启动nginx容器,使用服务器800端口映射nginx内部80端口,供外部访问
网络层:
1.外网ip(v4)映射内网ip(v4),让用户通过ip访问
2.域名映射到外网ip(v4)地址,让用户通过域名进行访问
以上也是最常见的一套网站部署方案。现需要加一个ipv6地址供用户访问
改造方案
刚开始总觉得ipv4升到ipv6 这一块应该是网络层更新就好了,查阅资料后发现不管网络层需要新增ipv6,启动的服务应用层也需要做配置,就那docker来说。默认是不启动ipv6映射带容器内部的,需要自己手动配置,具体操作见下文。
因此改造要分两步走
1.申请外网ipv6地址、和内网ipv6地址。若公司网络之前只支持ipv4的就需要联系三大网络运营商拉专线,
2.之前的域名进行再加一个外网ipv6的指向地址。一个域名是可以同时指向不同类型的ip的
3.应用程序开启ipv6的支持。
具体实施
实施步骤
通过上面的整改方案大致可以分为以下走
一、内网ip访问
1.网络资源申请 (一个内网ipv6 一个外网ipv6)
2.域名添加ipv6映射
3.服务器本地网络配置
经过1 2两步后我们得到了ipv6内网地址,然后我们需要将ip和网关在服务器上配置一下,目前服务器为linux,配置部署如下
①修改/etc/sysconfig/network-scripts/ifcfg-ens数字 (根据服务器的网口数)
②重启网络
执行命令 service network restart
重启好了测试一下内网ipv6是否可以访问
执行ping -6 ipv6地址
可以ping通说明ipv6内网地址可以访问
二、内网程序访问
程序基于docker部署的,docker本身对ipv6是支持的,但是需要手动进行配置
目前只做到所有的容器都指定到服务器申请的内网ipv6上。没有对每个容器单独分ipv6地址
①修改/etc/docker/daemon.json文件
添加
"ipv6": true,
"fixed-cidr-v6": "内网ipv6地址/64",
②重启docker
执行systemctl reload docker
③有些服务可能没有自动启动 用docker ps
查看一下,没启动的话用docker start
容器名启动一下
④验证容器内部是否支持ipv6
执行docker inspect 容器名
⑤验证内网服务是否支持ipv6
使用curl "http://\[内网ip\]:800"
注意地址加 " " 和 [] 前加\进行转义
因为是网站,curl后可以看到html信息说明内网的ipv6访问已经通了
三、程序的外网ipv6访问
内网已经通了,应该问题不大了
先测试一下外网通不通,测试工具分享一下,因为现在办公网络还不支持ipv6。
ipv6测试验证
测一下外网ip如下就是不通的
具体原因就是ipv6的防火墙没关,ipv4和ipv6的防火墙需要分别关
关闭具体步骤如下
- Linux7.x系统关闭防火墙iptables命令如下:
查看防火墙的状态:firewall-cmd --state或者使用iptables -L
关闭防火墙:systemctl stop firewalld.service,但是开机之后还会启动防火墙
systemctl disable firewalld.service #禁止firewall开机启动
查看防火墙配置:cat /etc/sysconfig/iptables-config
- Linux6.x系统关闭防火墙iptables命令如下:
查看防火墙的状态:service iptables status 或者使用iptables -L
关闭防火墙:service iptables stop ,但是开机之后还会启动防火墙
chkconfig iptables off #禁止firewall开机启动
查看防火墙配置:cat /etc/sysconfig/iptables
- 介绍如何使用在Ubuntu16.04中开启和关闭防火墙
开启防火墙 :ufw enable
关闭防火墙: ufw disable
备注说明:
-
iptables在Linux6和7系统,开启或者关闭命令和配置文件名都发生变化
-
ipv6的防火墙,将对应的命令进行修改比如,将iptables改成ip6tables就是开启或者关闭ipv6的防火墙
关闭之后再测一下 链接通畅。外网地址测一下
结束语
整体改造的难度不大,但是对整个网络架构和部署架构要有一定的了解,对linux的基本命令操作要有一定了解。再改造前查了很多资料,但是都觉得不是很详细,也就零零散散的找了一些资料,出现问题接着查资料,然后再尝试。做完之后对整个服务链路有进一步的认识。
更多推荐
所有评论(0)