[我完全搞不懂了,完全迷路了。我不确定这是一个一般的网络问题、Linux 问题还是 Docker 问题。]
我正在为我的家庭网络构建一个监控解决方案。我有两个调制解调器(出于无关的原因),它们连接到网关以进行负载平衡,该网关为我的网络提供服务。
我正在尝试运行一个 Docker 映像(在两个容器中),该映像通过 HTTP 端点查询每个调制解调器的统计信息。基本上...是这样的:
该图片比我的文字效果更好,但基本上,我试图设置一个带有多个 NIC 的单个 Raspberry Pi(出于成本和“简单性”考虑,只设置一个):一个直接连接到一个调制解调器,另一个直接连接到另一个调制解调器,第三个连接到家庭网络。但我很难让图像在两个容器中运行,每个容器都通过各自的接口进行连接。
但还有一个问题:每个调制解调器都硬编码有一个特定的 IP 地址 - 192.168.12.1 - 该地址无法更改。
因此,我想设置容器#1,以便当它调用该 IP,它会通过 NIC #1 和容器 #2 进行路由,以便它通过 NIC #2。
我一直在 Docker 中使用 IPvlan 和 MACvlan 网络,尝试过这样的选项(Docker Compose):
networks:
network-eth1:
driver: macvlan
driver_opts:
parent: eth1
ipam:
config:
- subnet: 192.168.12.0/24
gateway: 192.168.12.1
network-eth2:
driver: macvlan
driver_opts:
parent: eth2
ipam:
config:
- subnet: 192.168.12.0/24
gateway: 192.168.12.1
但是,正如一些人可能猜到的那样,子网不允许重叠:
守护进程的错误响应:池与此地址空间上的其他池重叠
显然,Docker 正在尝试超越其所构建的网络类型……
- 我不需要容器能够互相交谈。
- 我不需要它们能够绑定到入站端口。
- 我不需要它们接入家庭网络。
- 我甚至不关心查询调制解调器局域网上的任何其他东西。
理想情况下,容器就像连接到各自的 NIC 一样,仅此而已。
通过研究我发现我最终可能需要使用 iptables 来做一些事情,而且我之前也尝试过,但我认为我做得不对,即便如此,我还是希望 Docker Compose 在内部进行管理。
我曾尝试使用 vlan 语法(eth1.20
)等,但正如我在第一行中所说,我已经完全理解了,并且真的不知道它到底是干什么的——但我知道它似乎不符合我的要求,因为子网仍然存在冲突。
感觉好像我只需要包含一个设置,这样 Docker 就不会尝试在它们之间构建自己的网络?这几乎就像我想要一个主机网络,但带有特定的 NIC。
我会想象从本质上来说,这并不是一个非常困难的问题,但我只是不知道该搜索什么。我遇到的多个调制解调器具有相同的 IP 地址的情况很奇怪,但我猜想有人想要类似的东西,只是为了明确测试多个 NIC 的完整性,即使是在同一个网络上。