偶然发现家里用的宽带已经支持IPv6, 折腾下看看……
这两天偶然发现家里用的浙江联通宽带已经支持IPv6,虽然我的无线路由器还不支持,但是网线直连光猫的电脑已经可以看到分配的IPv6地址。
什么是IPv6
自己看维基百科 https://zh.wikipedia.org/wiki/IPv6
我的IPv6网络信息
出于安全隐私考虑,本文中的IP地址都被“修饰”过
通过https://test-ipv6.com/这个网站可以查看自己网络对于ipv6的支持情况,下图是我的网络测试情况:
再看下以太网适配器的配置信息:
1 | 连接特定的 DNS 后缀 . . . . . . . : |
值得注意的是,这台设备被分配了2个全球单播地址(IPv6地址和临时IPv6地址)和1个链路本地地址,并有如下特征:
- IPv6地址和临时IPv6地址的前缀是一样的
2408:8360:729:a000
- 本地链接 IPv6前缀为
fe80::
,后缀和IPv6地址是一样的b512:46b1:420c:9da
- 在test-ipv6网站中显示的地址是临时IPv6地址
再来看下光猫里的配置信息:
注意这里面的获取前缀2408:8360:729:a000::/60
,表明着运营商分配的前缀长度是60位,剩余的68位地址就是我们的子网容量,这也就意味着在这个光猫下可以容纳2的68次方个地址!给家里每一粒灰层分配一个估计都用不完。
深入理解IPv6
现在我们对IPv6有了直观的认识,接下来看看这128位地址究竟是如何生成的,以及三个不同的IPv6地址分别有什么作用。
IPv6地址格式
IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位十六进制方式表示。例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344
是一个合法的IPv6地址。
IPv6地址生成方法
IPv6支持无状态配置(SLAAC),网络接口接上后能自动生成若干个地址,地址一般分为网络段和主机段,各占64位。IPv6地址分配机制只管高64位的分配,低64位的标识符(主机段)则由主机自己来保证唯一性。
标识符的生成算法包括但不限于:
- EUI-64规则根据MAC地址生成,用于一般局域网或者物联网(Windows XP, Windows Server 2003及大多数Linux发行版都采用这种方式生成)
- 低碰撞的随机数算法随机生成,用于生成临时地址实现隐私扩展(出于安全考虑,Windows Vista及之后的Windows系统都默认采用随机算法)
- 人工配置保证唯一,用于配置一个服务器集群
- anycast地址,全0,本来就可以多路访问
IPv6隐私扩展
当一个客户端使用SLAAC配置其IPv6时,它会使用网络前缀和网卡的MAC地址构造地址。这会引起安全问题:计算机的MAC地址可以轻松通过其IPv6地址推算出,即使漫游到其他物理位置,由于MAC地址的全球唯一性,依然可以定位到客户端的设备。
IPv6实现了一种使用临时地址访问服务器的方式:在连接远程服务器时,内核会从原本的IPv6地址计算生成一个“临时地址”,系统会优先选择这个地址以隐藏原来的地址。每一个时刻只有一个临时地址是有效的,在一个地址过期时会立刻生成一个新的地址作为新的临时地址。
三个地址的作用
- 本地链路地址:用于本地网络通信和网络配置
- 临时全球地址:用于对外访问
- 固定全球地址:可用于固定监听外部对你的访问
有什么用呢
有了IPv6地址,意味着联网的设备不再是隐藏在NAT后面,而是全都具有公网IP。有了公网IP,那是不是可以直接在电脑上搭建提供Web服务呢?
启动个简单的web服务来试一下
看到这个打印信息就觉得不太行,似乎只支持IPv4,通过浏览器分别访问下IPv6地址果然不行
换成Caddy试试
服务启动好了,浏览器里访问试一下,可以了
在本机上三种IPv6地址都能访问,通过手机4G测试在外网IPv6地址和临时IPv6地址均能访问成功。
看起来ISP还没有针对80端口进行封禁,不过经过这两天观察,光猫上分配的前缀是会变化的,如果想搭建网站或者服务需要采用DDNS等手段,有空了再试。
安全性问题
通过上面的测试我意识到一个问题,那就是我的设备端口现在等于直接暴露在公网环境中,我随便起了个Web服务就能在公网中访问到,如果有什么漏洞真是不堪设想。那是不是以后开发本地启动项目暴露的端口,也直接在公网上可以访问,不过现在Win10默认自带防火墙,开启如下设置即可。
按理说阻止入站连接应该是路由器的默认防火墙安全级别,很遗憾联通的这个光猫似乎并没有防火墙。