我在 Centos 7 VM 主机(qemu-kvm)上遇到了一个奇怪的问题。
我有两台虚拟机,直到一周前,它们在桥接网络中运行良好。现在它们无法再访问网络或互联网上的任何东西(主机本身除外)。让它们与外界通信的唯一方法是将网络源更改为虚拟/NAT。这显然不是理想的选择,因为它们不再直接连接到我的网络。
例外情况是 ICMP 流量。桥接时我可以 ping 网络上(和互联网)的其他设备,但所有 TCP/UDP 流量都被阻止。
回想一下我的步骤,发生这种情况之前我做的最后一件事是在主机上启动 docker 服务(由于某种原因该服务已停止),但网络连接问题在此之后大约 10-20 秒才开始出现。我应该在这里指出,我没有在主机上设置任何容器。
我的直觉告诉我,某个地方的 iptables 规则把事情搞砸了,但老实说,我不知道这样的规则是如何创建的(除了由 docker 自动创建),而且我不知道我到底应该寻找什么。
顺便说一下,我有两个网络(192.168.0.0
、192.168.1.0
),它们被隔离在不同的 VLAN 上。主机有两个 NIC,一个连接到每个 VLAN,虚拟机桥接到两个网络。0.0
连接到互联网,而 则1.0
没有。VM 主机不充当网关。
这些是我的 iptables 转储:
- 筛选:https://pastebin.com/xBLY2Kad
- NAT:https://pastebin.com/PFTCA80u
- 损坏:https://pastebin.com/PSEH5ubY
- 生的:https://pastebin.com/T1x2Xe3H
- 安全:https://pastebin.com/GbPmCA3E
这是我的防火墙配置:
internal (active)
target: default
icmp-block-inversion: no
interfaces: bridge0
sources:
services: ssh mdns samba-client dhcpv6-client samba mountd rpc-bind nfs ntp dns
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
cameras (active)
target: default
icmp-block-inversion: no
interfaces: bridge1
sources: 192.168.1.4/32
services: ntp
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[编辑]
我添加了这里的输出,iptables -S
因为它显然更有用:
https://pastebin.com/wKAtSKPG
此外,我确认这是一个防火墙问题,在我停止了防火墙之后,我能够从虚拟机连接到外部世界
答案1
我的直觉告诉我,某个地方的 iptables 规则搞砸了事情,但我真的不知道这样的规则是怎么创建的(除了由docker自动执行的以外),我不知道我到底应该寻找什么。
我猜你的直觉是完全正确的。Docker 使用 IPtables用于其内部路由,并将您现有的规则与其自己的规则混合。我过去曾通过比较 Docker 守护程序启动前后的 IPtables 状态来调试此设置的问题(您遇到的延迟可能是设置时间)。
如果您发现 Docker 确实扰乱了您的设置,您可能需要手动插入 Docker 规则或将 Docker 守护进程移动到另一台机器上。