AI摘要:GPT-4o AI摘要 DeepSeek
作者在腾讯云轻量服务器上成功开启IPV6支持,包括后台一键配置、Nginx监听设置,并通过修改Docker网络配置使容器应用支持IPV6访问,最终实现博客和Adguard Home的IPV6访问功能。

去年12月份的时候趁活动入手了腾讯云的轻量服务器,入手后很快发现轻量服务器支持开启IPV6,不过我服务器所在的北京地区还是内测的,本着我是菜鸟,有问题不会搞的心理,当时就没搞。近期登录腾讯云后台时,发现这个功能已经正式上线了,下图放上腾讯云帮助页面供大家参考。

服务器开启IPV6-1.png

家里的宽带已经支持IPV6很久了,而且很多网站都支持IPV6,自认为使用上来体验跟IPV4也没差,于是激动的搓起小手手打算搞一搞给我的服务器开启IPV6支持。

腾讯云后台开启IPV6

根据官方文档提示,可以自动配置开启需满足两个条件,实例的操作系统支持+自动化助手服务在线,我的服务器系统是OpenCloudOS,刚好支持且我也未关闭自动化助手,这样在实例列表就可以看到一键开启IPV6的选项,直接点击系统就配置完毕了。

服务器开启IPV6-2..png

开启后页面上就会显示IPV6的服务器地址了,然后去域名服务商的解析页面配置一下AAAA解析就算开启IPV6成功了。

博客开启IPV6

我以为只要服务器开启了IPV6并配置好解析,我的博客就直接支持IPV6访问了,然而增加了AAAA解析后,实际访问博客还是会一直显示 IPv4 的地址,关闭电脑IPV4后访问网站会拒绝连接,后来研究了一下发现是当时在配置Nginx代理服务时,只监听了IPV4端口,所以还需要配置一下Nginx的代理。

我这边用的是1Panel面板,只需要在网站设置的【其他】选项卡中勾选【监听IPV6】并保存即可通过IPV6访问博客了~

服务器开启IPV6-3..png

Docker应用开启IPV6支持

博客是Nginx代理的,只需要勾选一下就支持IPV6访问了,那我的Adguard Home咋整?这个服务直接在1Panel面板中容器化部署的,安装时是一键安装的,也没配置代理什么的,遂去询问AI该如何操作。

询问过程中我了解到,Docker有多种网络模式,常用的有Bridge模式和Host模式。

Bridge模式是默认模式,其相当于在宿主机中创建了一个虚拟的交换机,命名为网卡【docker0】,所有容器中也有一个自己的网卡【eth0】,容器通过自己的网卡和交换机连接在一个二层网络中,容器和外部的通信都需要这个虚拟交换机进行端口转发,在1Panel里创建应用时,就会自动配置上端口转发规则,其本身也有点类似于Nginx的反向代理。

Host 模式的容器则没有自己的虚拟网卡,其直接共享宿主机的网络信息,主机网络能干啥,容器就能干啥,但是除网络外的文件系统进程还是独立的。

服务器中的Nginx也是docker部署,但因为它的网络模式是Host模式,所以当我的服务器主机网卡开启IPV6后,Nginx就可以直接配置代理IPV6端口了,而其他的应用例如Adguard Home是Bridge模式,虽然宿主机支持IPV6了,但是其自己的虚拟网卡并没有开启IPV6功能,所以仍旧是不可用状态。

因此我们需要为非Host网络模式的应用,单独开启虚拟网卡eth0的IPV6支持。我在1Panel的Docker设置页面找到了IPV6的开关选项,并查看1Panel的相关文档,发现文档中描述的和实际的情况还是有差异的,主要差异点在于,1Panel默认用户都有一个公网的IPV6地址段,然而腾讯云只给我分配了一个128位前缀的公网地址,也就是说我这个IPV6地址是唯一的,没有子网可以配置使用,我的Docker中的应用没办法获得单独的IPV6地址供外部使用,均只能使用这唯一的一个IPV6地址与外部通信。

当然没有公网IPV6地址段也没关系,IPV4不是也有没有嘛,咱们可以本地配置一个IPV6段,然后使用NAT6转换,最后从我们的公网地址出去,这里需要了解到,我们可以使用fd00::/8为前缀的地址,因为这个是规定好的私有IPV6地址,类似于192或172开头的IPV4地址。

1Panel的Docker配置里修改全局配置

我们找到容器的配置页面,开启【IPV6】功能,这时候就需要配置私有的IPV6地址了,我这里填写了fd00:db8:1::/64​这个地址,然后勾选【高级设置】,开启ip6tables和experimental,这个是为了让系统能够帮我们自动配置NAT规则。然后点击确认保存,等待服务重启。

服务器开启IPV6-4..png

配置Docker网络

刚才修改的配置只是全局配置,或者说只是不指定网络情况下的默认配置,也就是安装Docker后自动创建的Bridge的配置,但是我这个1Panel里的应用不走这个网络呀,1Panel默认都会创建一个名为"1panel-network"的Bridge网络,而"1panel-network"创建的时候,默认也是没有开启IPV6的,所以我们还需要调整一个这个网络。

不过Docker里的网络创建后是不支持修改的,所以没办法,我们只能删除它重新创建一个了,我们在【容器】-【网络】选项里找到这个网络,删除掉。

服务器开启IPV6-5..png

然后重新创建一个新的网络,名字我还用"1panel-network",这样后面安装的新应用还会使用这个网络,填写IPV4和IPV6的子网信息,应该是要和默认Bridge的不一样,不过我直接填了不一样的也没试,填写完毕就保存。

服务器开启IPV6-6..png

重新安装Docker应用

我时候有些强迫症,在了解了这个IPV6需要在Docker里专门配置并还需要删除啥再建立啥后我就直接把我的所有应用和网站都删掉了,所以在我配置好后,我只能再重新安装了。这次安装完毕Adguard Home后,初始化的时候就自动识别到IPV6地址了,感觉这次还是很有戏的。

网站可以使用这个ipw工具来检测一下是不是支持IPV6访问了,结果如图是OK的:

服务器开启IPV6-7..png

Adguard Home直接用电脑试一下,DNS服务器确实是我的IPV6地址了。

服务器开启IPV6-8..png

最后

也是又瞎折腾了一波,迷迷糊糊的搞定了,这个IPV6的地址感觉好复杂啊,有时间还是好好了解一下。路漫漫其修远兮,还需要多学习啊~