容器端口/服务可从所有主机 IP 访问,并且 Docker 自定义桥接器链接到 Synology NAS 上的 IPv4 别名

容器端口/服务可从所有主机 IP 访问,并且 Docker 自定义桥接器链接到 Synology NAS 上的 IPv4 别名

大家好。

我对 Synology NAS(Linux)上的 Docker 有疑问。

我有一个 Ubiquity Unifi 控制器容器运行在此 NAS 上。(jacobalberti/unifi)此映像需要特定端口才能在网络上使用,以便与 Unifi 硬件进行通信。我们的想法是让此容器通过一个不同于所有 NAS 服务运行所在 IP 地址的 IP 地址来使用。

我不是网络工程师,对网络的可能性和陷阱了解有限,但我做了一些研究,发现有几种可能性:

-将端口 1:1 映射到主机 IP 地址,例如:

docker run-p 192.168.1.3:8443:8443

-创建一个docker桥接网络并将其绑定到特定的主机IP地址,例如:

docker network create --driver=bridge --gateway=10.0.0.1 \
--subnet=10.0.0.0/24 --ip-range=10.0.0.2/24 \
-o "com.docker.network.bridge.name"="br_UUC" \
-o "com.docker.network.bridge.host_binding_ipv4"="192.168.1.3" UUC_bridge

我选择创建一个桥接网络,因为这个网络出现在 Synology Docker GUI 中,这样我仍然可以在这个 GUI 中管理容器。

创建新网络后,我可以将容器链接到桥接网络 UUC_bridge 并进行 1:1 端口映射。

我希望能够访问 IP 地址 192.168.1.3 后面的容器端口 8443,而 NAS 主机 IP 地址 192.168.1.2 的端口 8443 仍然空闲,或者被另一个服务使用。

现在我需要一种方法来在主机 NIC 上获得第二个 IP 地址 192.169.1.3。由于我不需要隔离网络,我认为 VLAN 不是解决方案。我读到他们也需要不同的 docker 网络驱动程序。(macvlan)

我通过执行以下命令在 NAS 的 NIC 上创建了一个别名:

ifconfig eth0:0 192.168.1.3 up netmask 255.255.252.0 name UUC

(我在创建 docker bridge 之前做了这个)

我知道还有其他方法可以做到这一点ip address add,但旧方法仍然有效。

网络显示为: eth0 和 eth0:0 ifconfig
UUC_bridge ifconfig

桥接配置为: docker 网络检查 UUC_bridge

现在我面临的问题:

netstat发现一个如下条目:tcp6 0 0 :::8443 :::* LISTEN 0 6783321 -

现在看来,查看 ifconfig 输出,网桥是 IPv6。我不知道 IPv4 <> IPv6 链接如何工作,但我认为这应该不是问题,因为我告诉 Docker 它应该将网桥链接到那个 IPv4 地址 192.168.1.3。

我现在可以通过 192.168.1.3:8443 访问 UUC 接口。问题是,我也可以通过 192.168.1.2:8443 访问相同的 UUC 接口。我不想这样,我也不明白它为什么要这样做。

也许 UUC 容器内部使用 0.0.0.0 向所有(容器)主机接口公开 8443,但我将桥接器配置为仅链接到 192.168.1.3 IPv4 地址。

有人知道我在这里可能会遗漏什么吗?

我面临的另一个问题是,所有 Synology 服务似乎都使用 0.0.0.0 作为端口绑定 IP,因此所有 Synology 服务也都位于 192.168.1.3 后面。有没有办法从 NAS 的 0.0.0.0 地址链接到的主机 IP 地址组中删除 192.168.1.3 地址?

提前谢谢了!

相关内容