docker nginx网站 ipv6改造方案和步骤

2 篇文章 0 订阅
1 篇文章 0 订阅

整体概况

改造原因

最近公司在做ipv6的系统改造,从网络到程序都需要制作ipv4和ipv6的支持。一、保证用户可以在仅支持ipv6的网络下进行正常访问。二、为以后全面扩展ipv6实施做基础工作。因为ipv6将全面取代ipv4.

ipv6和ipv4基础知识

  1. IPv4可提供4,294,967,296个地址,IPv6将原来的32位地址空间增du大到128位,数目是2的128次方。能够对地球上每平dao方米提供6×1023个网络地址,在可预见的将来是不会耗尽的。
  2. IPv4 使用地址解析通讯协议 (ARP) IPv6使用用多点传播 Neighbor Solicitation消息取代地址解析通讯协议 (ARP) 。
  3. IPv4 中路由器不能识别用于服务质量的QoS 处理的payload。IPv6中路由器使用 Flow Label 字段可以识别用于服务质量的 QoS 处理的 payload
  4. IPv4的回路地址为: 127.0.0.1, IPv6的回路地址为 :
    000:0000:0000:0000:0000:0000:0000:0001 可以简写为 ::1。
  5. 在IPv4中,动态主机配置协议( Dynamic Host
    ConfigurationProtocol,DHCP)实现了主机IP地址及其相关配置的自动设置。一个DHCP服务器拥有一个IP地址池,主机从DHCP服务器租借IP地址并获得有关的配置信息(如缺省网关、DNS服务器等),由此达到自动设置主机IP地址的目的。IPv6继承了IPv4的这种自动配置服务,并将其称为全状态自动配置(stateful autoconfiguration)
  6. Pv4使用 Internet 群组管理通讯协议 (IGMP) 管理本机子网络群组成员身份,IPv6使用 Multicast Listener Discovery (MLD) 消息取代 IGMP
  7. 内置的安全性。IPSec由IETF开发是确保秘密、完整、真实的信息穿越公共IP网的一种工业标准。IPsec不再是IP协议的补充部分,在IPv6中IPsec是IPv6自身所具有的功能。IPv4选择性支持IPSec,IPv6自动支持IPSec
  8. 更好的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的防火墙需要分别关
关闭具体步骤如下

  1. Linux7.x系统关闭防火墙iptables命令如下:
    查看防火墙的状态:firewall-cmd --state或者使用iptables -L

关闭防火墙:systemctl stop firewalld.service,但是开机之后还会启动防火墙

systemctl disable firewalld.service #禁止firewall开机启动

查看防火墙配置:cat /etc/sysconfig/iptables-config

  1. Linux6.x系统关闭防火墙iptables命令如下:
    查看防火墙的状态:service iptables status 或者使用iptables -L

关闭防火墙:service iptables stop ,但是开机之后还会启动防火墙

chkconfig iptables off #禁止firewall开机启动

查看防火墙配置:cat /etc/sysconfig/iptables

  1. 介绍如何使用在Ubuntu16.04中开启和关闭防火墙
    开启防火墙 :ufw enable

关闭防火墙: ufw disable

备注说明:

  1. iptables在Linux6和7系统,开启或者关闭命令和配置文件名都发生变化

  2. ipv6的防火墙,将对应的命令进行修改比如,将iptables改成ip6tables就是开启或者关闭ipv6的防火墙
    关闭之后再测一下 链接通畅。外网地址测一下
    在这里插入图片描述
    在这里插入图片描述

结束语

整体改造的难度不大,但是对整个网络架构和部署架构要有一定的了解,对linux的基本命令操作要有一定了解。再改造前查了很多资料,但是都觉得不是很详细,也就零零散散的找了一些资料,出现问题接着查资料,然后再尝试。做完之后对整个服务链路有进一步的认识。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Docker中配置Nginx以使用HTTPS,可以按照以下步骤进行操作: 1. 生成SSL证书和密钥文件: - 首先,确保你已经安装了openssl工具。 - 执行以下命令生成私钥文件: ``` openssl genrsa -out server.key 2048 ``` - 然后,执行以下命令生成证书签名请求(CSR)文件: ``` openssl req -new -key server.key -out server.csr ``` - 最后,执行以下命令自签名生成证书文件: ``` openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt ``` 2. 创建Nginx配置文件: - 在宿主机上创建一个目录,用于存放Nginx的配置文件和SSL证书文件。 - 创建一个名为 `nginx.conf` 的Nginx配置文件,示例配置如下: ```nginx events { worker_connections 1024; } http { server { listen 80; server_name example.com; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; location / { root /usr/share/nginx/html; index index.html; } } } ``` - 将生成的证书文件 `server.crt` 和私钥文件 `server.key` 复制到上述配置文件中指定的路径 `/etc/nginx/ssl/`。 3. 构建并运行Nginx容器: - 使用以下命令构建Nginx容器: ```shell docker build -t my-nginx . ``` - 使用以下命令运行Nginx容器: ```shell docker run --name nginx -p 80:80 -p 443:443 \ -v /path/to/nginx.conf:/etc/nginx/nginx.conf \ -v /path/to/ssl:/etc/nginx/ssl \ -v /path/to/html:/usr/share/nginx/html \ -d --restart=always my-nginx ``` 其中,将 `/path/to/nginx.conf` 替换为你的配置文件所在的路径,将 `/path/to/ssl` 替换为存放SSL证书的路径,将 `/path/to/html` 替换为存放网站内容的路径。 4. 确保防火墙允许流量通过80端口和443端口: - 如果你使用的是Linux系统,可以使用以下命令开启端口: ```shell sudo ufw allow 80 sudo ufw allow 443 ``` 现在,你的Nginx容器已经配置为使用HTTPS。你可以通过访问 `https://example.com` 来测试是否成功。记得将 `example.com` 替换为你的域名或IP地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值