大家好。
我对 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 地址?
提前谢谢了!