IPV6知识的一些学习记录

1背景

网际协议第六版 IPv6(Internet Protocol version 6)是最新的互联网协议,协议标准最早诞生于 1998 年 12 月。IPv6 的出现解决了 IPv4 地址枯竭的问题和提升网络传输效率,不过由于开始时期 IPv6 的标准复杂以及需要硬件软件同时支持,运营商和用户对升级 IPv6 积极性并不高。

2017年11月,中 央 、 国 务 院发布《推进互联网协议第六版(IPv6)规模部署行动计划》。2018年4月,工业 和 信息化 部关于贯彻落实《推进互联网协议第六版(IPv6)规模部署行动计划》的通知(工信 部 通信〔2018〕77号),对LTE网络IPv6端到端贯通、固定网络基础设施改造、应用基础设施改造、强化网络安全保障等重点任务作出部署。

2018年底一部分地区可以用上IPv6,到2020年,基本普及IPv6,到2025年,全面支持IPv6。

根据2019年7月发布的《中 国 IPv6发展状况》白皮书

2基础知识(拷贝自lanyue1  的博客: https://blog.csdn.net/lanyue1/article/details/86128916

一、IPv6与IPv4的区别

主要有以下几点:

1.IPv6的地址空间更大。IPv4中规定IP地址长度为32,即有2^32-1个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。夸张点说就是,如果IPV6被广泛应用以后,全世界的每一粒沙子都会有相对应的一个IP地址。

2.IPv6的路由表更小。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。

3.IPv6的组播支持以及对流的支持增强。这使得网络上的多媒体应用有了长足发展的机会,为服务质量控制提供了良好的网络平台。

4.IPv6加入了对自动配置的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。

5.IPv6具有更高的安全性。在使用IPv6网络中,用户可以对网络层的数据进行加密并对IP报文进行校验,这极大地增强了网络安全。

二、IPv6的不足

1、IPv6的报文头部固定长度是40字节,是IPv4报文头部长度的两倍,如果有扩展头,最多可达120字节,这意味着在IPv6网络中,每转发一个IPv6报文,都需要携带一个IPv6报文头。单位长度内可传递的数据就少了。所以在相同的网络环境中,IPv6的数据传输效率是下降的,要为IPv6多做一些预留才行,最好在IPv6部署的时候增加一定网络带宽。
2、兼容性问题。IPv6开发人员承认,IPv6的最大失误在于没有提供对IPv4的向后兼容性,IPv6与IPv4是完全不同的两张网络。虽然后来设计了IPv4和IPv6两网融合技术如采用双栈和隧道机制,但这样不仅部署起来网络变得异常复杂,还带来了更多安全隐患。
3、安全性问题。IPv4的网络安全问题就较多,但IPv6在被设计为标准时,安全问题还不那么突出,所以IPv6虽然增加了安全方面的考虑设计,但并不完善。同时,因为IPv6全新的网络协议设计又带来了新的安全问题,这些在设计之初并没有充分考虑到,这使得IPv6面临的安全威胁比IPv4时代还要严重。
IPv6在实际应用中还有“天窗”的问题,就是当网页包含其它网站内容的链接,即使采取双栈技术路线,但被引用的其它网站未升级,IPv6用户访问该网站时会出现响应缓慢,部分内容无法显示,部分功能无法使用等情况。IPv6地址过长,不好记忆,实际是根本无法很好地记忆。IPv6的地址是海量的,实际分配给我国的并不多,中国拥有占世界20%的人口,却只分到IPv6地址的2%,比IPv4时好些,但依然不充裕。

三、IPv6表示方法

IPv6地址长度为128位,分成8段,每段4个字符,即X:X:X:X:X:X:X:X。直白的说,就是需要写32个字母,这个长度,在表示方法上,就需要好好的研究一下了:

1、冒分十六进制表示法
例如,一个IPV6的的IP为:0021:0D11:0000:0023:0008:0800:200C:417A,这种表示法中,每个X的前导0是可以省略的,即21:D11:0:23:8:800:200C:417A,这样无论在记忆IP地址录入IP都非常简便。

2、0位压缩表示法
有时候一个IPv6地址中问可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:FF01:0:0:0:0:0:0:1101 → FF01::1101、0:0:0:0:0:0:0:1 → ::1、0:0:0:0:0:0:0:0 → ::

3、内嵌IPv4地址表示法

为了实现IPv4-IPv6互通,IPv4地址可以嵌入IPv6地址中,可以表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.200.2与::FFFF:192.168.200.2就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用。

注意:双冒号只能出现一次。

 

四、IPv6常用命令

1、使用ifconfig指令,查看系统是否开启IPV6功能,如下:
 [root@PTZJ217 shell]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:13:0B:DA
          inet addr:10.120.152.217  Bcast:10.120.152.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe13:bda/64 Scope:Link
2、如未开启,则需修改/etc/sysctl.conf文件,在文件中将如下内容修改或者增加为“0”,然后执行sysctl -p命令
启用IPv6,之后再ifcofig查看,即可开启IPV6。
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
3、找到/etc/modprobe.d/disable_ipv6.conf配置文件,将如下信息改成“0”。
options ipv6 disable=0
4、找到/etc/sysconfig/network文件,将如下信息改成“yes”,然后重启service network restart。
NETWORKING_IPV6=YES
至此,设备就开启了IPV6功能。
5、配置IPV6地址,如图。
 
6、linux下添加默认路由。
ip -6 route add / via
ip -6 route add default via 2001:0db8:0:f101::1
route -A inet6 add / gw
route -A inet6 add default gw 2001:0db8:0:f101::1
7、查看路由
ip -6 route show
route -A 'inet6'
8、测试ipv6网络
 ping6  fe80::215:5dff:fe01:203%eth0
9、配置ipv6,无需重启
ip -6 addr add 2001:0db8:0:f101::5/64 dev eth0 或者 ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
10、移除IPv6地址:(不要用这个命令移除不存在的地址,较老的内核会因为不支持而挂掉)
ip -6 addr del fec0::6:55/112 dev eth1 或者 ifconfig eth1 inet6 del feco::6:55/112

五、支持IPv6应用改造

1、判断ip地址是ipv4还是ipv6方法
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IpUtil {
    private static String ipv4Regex = "^((25[0-5]|2[0-4]\\d|[0-1]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[0-1]?\\d\\d?)$";
    private static String ipv6Regex = "^([\\da-fA-F]{1,4}:){6}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^::([\\da-fA-F]{1,4}:){0,4}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:):([\\da-fA-F]{1,4}:){0,3}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){2}:([\\da-fA-F]{1,4}:){0,2}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){3}:([\\da-fA-F]{1,4}:){0,1}((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){4}:((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$|^([\\da-fA-F]{1,4}:){7}[\\da-fA-F]{1,4}$|^:((:[\\da-fA-F]{1,4}){1,6}|:)$|^[\\da-fA-F]{1,4}:((:[\\da-fA-F]{1,4}){1,5}|:)$|^([\\da-fA-F]{1,4}:){2}((:[\\da-fA-F]{1,4}){1,4}|:)$|^([\\da-fA-F]{1,4}:){3}((:[\\da-fA-F]{1,4}){1,3}|:)$|^([\\da-fA-F]{1,4}:){4}((:[\\da-fA-F]{1,4}){1,2}|:)$|^([\\da-fA-F]{1,4}:){5}:([\\da-fA-F]{1,4})?$|^([\\da-fA-F]{1,4}:){6}:$";
    public static Boolean isIPv4Address(String ip){
        Pattern pattern = Pattern.compile(ipv4Regex);
        Matcher matcher = pattern.matcher(ip);
        return matcher.matches();
    }
    
    public static Boolean isIPv6Address(String ip){
        Pattern pattern = Pattern.compile(ipv6Regex);
        Matcher matcher = pattern.matcher(ip);
        return matcher.matches();
    }
}

2、rest接口、activemq均是在原来的ip地址基础上加上[],如
String localIp = "[0:0:0:0:0:0:0:1]";
String ipAddress = InetAddress.getLocalHost().getHostAddress();
             
InetAddress inetAddress =InetAddress.getByName(ipAddress);            
if(inetAddress instanceof Inet4Address){
    localIp = "127.0.0.1";
}

3、jdbc支持ipv6的驱动
Mysql:
ipv4 Driver URL:  jdbc:mysql://127.0.0.1:3306/database 
ipv6 Driver URL:  jdbc:mysql://address=(protocol=tcp)(host=fe80::a00:27ff:fec3:87c7)(port=3306)/database 
连接localhost 的 URL:jdbc:mysql://address=(protocol=tcp)(host=::!)(port=3306)/database
驱动要求:jdbc连接驱动需要大于5.1.31以上,之前我没注意到这个问题,一直使用项目上统一的5.1.6,所以配置正确的情况下,tomcat启动后台会抛错,提示连接不到数据库端口,后来改为5.1.44解决报错问题。
Oracle:
ipv4 Driver URL: jdbc:oracle:thin:@//127.0.0.1:3306/orcl  
ipv6 Driver URL: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=[fe80::5cf:72])(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=fnstdb1))) 
驱动要求:ojdbc14+
DB2:
ipv4 Driver URL:jdbc:db2://192.168.10.10:50000/sample 
ipv6 Driver URL:jdbc:db2://[fec0:ffff:ffff:8000:20e:cff:fe50:39c8]:50000/sample 
驱动要求:db2jcc4

SQLserver or sysbase:
ipv4 Driver URL: jdbc:jtds:sqlserver://127.0.0.1:1433/master 
ipv6 Driver URL: jdbc:jtds:sqlserver://
驱动要求:jtds1.2.4

PostgreSQL:
ipv4 Driver URL:jdbc:postgresql://192.168.10.10:50000/sample 
ipv6 Driver URL:jdbc:postgresql://[fec0:ffff:ffff:8000:20e:cff:fe50:39c8]:50000/sample 

赋予mysql支持ipv6
create user 'ipv6test'@'2001:0db8:0:f101::5' IDENTIFIED BY '123456';
赋权所有的GRANT ALL PRIVILEGES ON *.* TO 'ipv6test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
 

3 IPv6技术升级具体改造方法(摘抄自 ‘小飞№侠’的博客  https://www.cnblogs.com/CattaC/p/10237753.html

一、如何对网站进行 IPv6 改造

(一)网站 IPv6 改造条件

1、域名支持 AAAA 解析

AAAA 解析是将域名解析为 IPv6 地址。目前几乎主流的域名商和提供的 DNS 解析服务都支持 AAAA 解析。

2、服务器系统软件支持 IPv6

目前几乎所有的操作系统和服务器软件都支持 IPv6。在软件上几乎不存在问题。

3、主机运营商提供 IPv6 地址

目前网站 IPv6 改造最主要的还是需要主机运营商的支持,需要提供和分配 IPv6 的地址。

(二)服务商提供的 IPv6 方式

目前国内的云主机服务商(2018年)主要有以下几种实现方法:

(1)IPv6 双栈

主要是华为云和景安云,同时为主机服务器提供 IPv6 和 IPv4 双地址,主机可以直接和 IPv6 和 IPv4 网络进行通信。

华为云 IPv6 解决方案
国外大部分的服务器也是使用类似的方案。

(2)IPv6 转换
主要是阿里云和百度云在用。运营商为服务器提供一个 IPv6 地址,但不是配置在主机网卡上,而是统一管理,在前端上对 IPv6 流量(TCP、UPD)转换成 IPv4 流量,再转发到后端的服务器,有点像于端口转发的应用层代理。

百度云 IPv6 终结

优点是不需要改变主机原有结构,特备是对于 HTTP 服务器可以做到快速实现。缺点是服务器不能主动的进行 IPv6 通信,同时一些软件会有异常,如 HTTP 服务器日志记录根本不到 IPv6 地址

三、IPv6 改造实例

某网站一共使用了两台服务器,分别进行了网站 IPv6 支持改造,步骤如下:

(一)百度云 IPv6 改造步骤

某网站托管于百度云中,目前百度云为客户提供了名为 IPv6 终结功能,就是上述所说的 IPv6 转换服务。目前还在内测阶段。经过申请,说明了使用目的后,客服为网站分配了一个 IPv6 地址。详细的使用方法请参照IPv6终结者配置说明:IPv6终结功能

根据百度云IPv6 终结者服务说明,所有通过 IPv6 的流量,协议和目的端口不变,源地址转换为固定地址段内的IPv4地址(106.12.248.0/21)再转发到网站的服务器上。

对于 7 层 HTTP 应用,会加入 X-Forwarded-For 来标注真实的 IPv6 地址,不然在自己的服务器看来,都是来自 106.12.248.0/21 这些地址。

不过由于网站使用了 HTTPS, X-Forwarded-For 这个 http 头不能正常写入。所有 IPv6 来的流量在网站看来都是来自106.12.248.0/21 这个网段。最后只要将 DNS 的国内 AAAA 记录解析到这个地址即完成了网站 IPv6 的改造升级。

 

(二)Vultr 服务器 ipv6 改造步骤

对于 vultr 服务器为网站提供加速。vultr 使用的技术是 IPv6 双栈,并且给了网站一个 /64 的子网,原则上为网站分配了2的64次方的 IP 地址,这些 ipv6 地址默认是可用的。

简单通过配置为网卡指定了上述子网中任意的 IPv6 地址后,只要将 DNS 配置海外访客的 AAAA 解析结果配置到这个 IPv6 地址即可完成网站 IPv6 改造。

需要注意的是 IPv6 防火墙和 IPv4 防火墙不同,需要单独配置,请一定要尽早配置,以免内部服务暴露在 IPv6 公网上。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值