我正在尝试创建一个虚拟机和容器的私有网络Hetzner 云。我已经在我的本地家庭网络上测试了这个设置并且一切运行正常。
计划是为虚拟机建立一个私有网络(10.0.0.0/8
仅用于测试)。为了进行测试,我使用10.10.0.1
和10.10.0.2
作为虚拟机。并且每个虚拟机都将有一个 CNI 桥接网络(例如:172.20.0.0/16
用于容器)。我希望使用静态路由使网络上的任何虚拟机都可以访问桥接网络10.0.0.0/8
。
在 Hetzner 上,我配置了静态路由172.20.0.0/16 to 10.10.0.1
。在 上,10.10.0.1
我为 Podman 配置了一个 CNI 桥接网络,配置在同一范围内172.20.0.0/16
。
放置在该网络上的任何容器都可以轻松 ping 或连接本地、其他容器、主机或互联网,并且主机 ( 10.10.0.1
) 可以轻松连接容器 ( 172.20.0.X
)。
问题是当我想从 ping 容器时。我已经监控了和10.10.0.2
的流量,并且 Hetzner 路由似乎工作正常,因为连接到达( ) 上的 VM。这让我怀疑这是否是和桥接接口之间的路由问题?tcpdump
iftop
10.10.0.1
ens10
ens10
podman-vlan
以下是从10.10.0.1
default via 172.31.1.1 dev eth0 proto dhcp src X.Y.Z.W metric 100
10.0.0.0/8 via 10.0.0.1 dev ens10
10.0.0.1 dev ens10 scope link
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.20.0.0/16 dev podman-vlan proto kernel scope link src 172.20.0.1
172.31.1.1 dev eth0 proto dhcp scope link src X.Y.Z.W metric 100
在10.10.0.2
虚拟机上,我只做了一个ip r add 172.20.0.0/16 via 10.0.0.1
(似乎可以工作)。
我的期望是得到10.10.0.2 -> 10.0.0.1 -> 10.10.0.1 -> 172.20.0.1 -> 172.20.0.X
。相反,一切似乎都迷失了10.10.0.1
,包括如果我尝试ping -I ens10 172.20.0.X
这是 CNI 配置:
{
"cniVersion": "0.4.0",
"name": "podman",
"plugins": [
{
"type": "bridge",
"bridge": "podman-vlan",
"isGateway": true,
"ipMasq": true,
"promiscMode": true,
"ipam": {
"type": "host-local",
"routes": [{ "dst": "0.0.0.0/0" }],
"ranges": [
[
{
"subnet": "172.20.0.0/16",
"gateway": "172.20.0.1"
}
]
]
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
},
{
"type": "firewall"
},
{
"type": "tuning"
}
]
}
提前致谢。
答案1
这是该 VM 和 iptables 上存在的 Docker 的问题。
检查iptables -L
虚拟机
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
CNI-FORWARD all -- anywhere anywhere
Docker 优先。因此,要么配置规则以将正确的接口转发到 CNI/Podman/Docker,要么根据需要进行配置。
就我的情况而言,删除 Docker 是一个选择,这样就可以解决所有问题。