前言
前不久打电话要来了运营商给的ipv6地址,然后使用DDNS-GO解析到了域名上。
按理来说,我应该可以使用域名+端口的方式访问NAS上的服务,但是实际上却无法访问。
问题排查
排查了一番之后,确定是docker的问题。
这是因为docker默认并没有开启ipv6的访问权限,在面板中可以到。
而且在网上查了一下,要给docker配置ipv6还是较为繁琐的。
而且公网ipv6是动态的,写进配置文件也不行。
但是在最后还是摸索出了两个解决方案
使用反向代理
使用群晖NAS自带反向代理。
控制面板→应用程序门户→反向代理服务器,新增一个服务,描述可以随便填。
来源:
- 协议,选择http,如果你想要设置https也可以,但要需要你对应用本身支持。
- 主机名,不用动,保持默认的”*“。
- 端口,选择你希望外网访问的端口,但不能写已经占用的端口。
目的地:
- 协议,一般选择http,如果你的应用是支持https,可以开启。
- 主机名,保持默认,“localhost”或者”127.0.0.1“。
- 端口,填docker部署时的映射端口。
然后点击确认即可,随后你就可以通过域名加端口访问你对服务了。
不使用反向代理
反向代理就已经可以解决无法访问的问题,但考虑到有一些服务是不支持反向代理,比如MC服务器之类的,因此这个问题还不算完全解决。
虽然Docker显示”ipv6已禁用“,但是如果你的NAS可以正常获取ipv6地址的话。
那么代表Docker是可以正常使用ipv6的,也就是使用域名+端口直接访问服务。
但需要你把docker应用的网络模式改为”host“模式,这代表着与群晖公用一个网络环境。
比如:
虽然显示已禁用,但是可以通过域名+端口直接访问。
如果你是使用docker-compose,那么你只需要在配置文件上添加这么一行。
network_mode: 'host'
然后重启docker服务即可。
小结
因为我是使用ipv6解析的域名,因此无法通过域名+端口,也就是ipv6的方式访问docker服务,但实际上只需要把docker的网络模式改为host,这个问题就解决了。如果不想端口被占用,那么可以使用群晖自带的反向代理服务,一样的效果。