我有一台 Centos8 主机,安装了 libvirt(KVM)和 podman(1.6)。
libvirt 带来了一个名为“virbr0”的桥,客户机将连接到一个范围为 192.168.122.0/24 的地址。virbr0 本身有 192.168.122.1。客户机可以相互通信、与主机通信以及与互联网通信。到目前为止没有什么特别的...
除了 libvirt 之外,我们还有附带 CNI 的 podman,它反过来提供了一个名为“cni-podman0”的桥梁并启动范围为 10.88.0.0/16 的网络。
当我生成一个容器(使用自己的网络 ns)时,比如说一个 wordpress 实例,我能够使用容器的 ip 地址从主机和 libvirt 客户机访问此服务,例如curl -L 10.88.0.10。
但另一方面,当我尝试从 podman 容器访问 libvirt 客户机时,我总是收到“curl:(7)无法连接到 192.168.122.14 端口 8443:连接被拒绝”。 (<-不,这不是忘记的防火墙设置)
当我使用 tcpdump 时,我可以看到数据包不会到达容器桥“cni-podman0”。 (经过两次“重新传输”后,它放弃了)
iptables 对我来说看起来很正常:
iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 1540 packets, 192K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 75 packets, 6929 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1412 packets, 86218 bytes)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24
0 0 RETURN all -- * * 192.168.122.0/24 255.255.255.255
3 180 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
0 0 CNI-df70ac6052cc3121e6aed9de all -- * * 10.88.0.16 0.0.0.0/0 /* name: "podman" id: "ae18985e3e1a0905bc04be8021bcacdd61436e682be24c08e2e53b0705baad33" */
Chain OUTPUT (policy ACCEPT 1412 packets, 86218 bytes)
pkts bytes target prot opt in out source destination
Chain CNI-df70ac6052cc3121e6aed9de (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 10.88.0.0/16 /* name: "podman" id: "ae18985e3e1a0905bc04be8021bcacdd61436e682be24c08e2e53b0705baad33" */
0 0 MASQUERADE all -- * * 0.0.0.0/0 !224.0.0.0/4 /* name: "podman" id: "ae18985e3e1a0905bc04be8021bcacdd61436e682be24c08e2e53b0705baad33" */
...如果我理解正确的话,最后一行告诉我们要拦截所有不属于多播地址的目标的流量。
请有人能让我回到正轨吗?谢谢!