好不容易才把onlyoffice连接成功,你竟然还给我来这个错误,实在是不应该呀,都最后一公里了,可不能放弃,必须得把它给解决。
现在不妨从开始说起:
在Docker容器内部,宿主机相当于一个网关,宿主机根据不同的端口给每个容器分配一个独立的IP地址。这时所有Docker上所有容器的IP都是基于DNAT和SNAT技术自动实现对内网的接入,本质上都是用宿主机的内网IP地址+宿主机端口,只是映射的端口号不同而以。此时宿主机与外界通信的接口是路由器,其使用的IP是内网IP,还不能直接上网,必须经过路由器(路由器的一端连内网,一端连公网)的端口映射,再次把宿主机的端口映射到路由器的独立端口上(具体根据路由器设置),使用路由器的端口与公网连接,其本质也是利用路由器的公网IP+路由器的端口号。
所以容器在接入公网之前是经过了两层映射(套娃的既视感),两次端口转换:容器----宿主机----路由器。
宿主机内部各级映射,每级都有一个网关
现在安装Nextcloud和Onlyoffice容器,它们是两个不同的服务器,要连接成功,必须是两边都是互通的,才可以互访。前几天都是把NC和OO都部署在NAS服务器上,妄想基于Docker容器来实现两服务器的互访,虽然内网是没有问题的,但是外网却不一直连接不上,为啥呢?
这是因为我犯了个低级错误:因为对于DNS服务器来说来说,要将域名转换为IP地址,这个IP地址必须是公网地址,前面说到如果以回环的方式实现互访在内网是没有问题的,但是外网就显然不可能了。
既然不能直连,那我们可以用其它方法来实现,方案有三种:
方案一:能不能再增加一台以上设备来实现“下一跳”,这样就可以“欺骗”路由器了。