Libvirt默认NAT网络部分TCP数据包未正确完成MASQUERADE转换问题求助
Libvirt默认NAT网络部分TCP数据包未正确完成MASQUERADE转换问题求助
我遇到一个特别棘手的问题:部分经过Libvirt默认NAT网络的数据包居然跳过了MASQUERADE地址转换,折腾了好久都没搞明白原因,来这里求助各位大佬!
我的环境配置如下:
- 有多台宿主机都在**10.254.1.0/24(OpenStack)**网段
- 其中部分宿主机上部署了单独的虚拟机,虚拟机网段是192.11.x.x/24——这里的x对应宿主机IP的最后一段,比如宿主机IP是10.254.1.3,它上面的虚拟机IP就是192.11.3.3,这个虚拟机用的是Libvirt默认的virbr0网桥
- virbr0采用NAT模式,桥接到宿主机的ens3物理网卡
- 我在所有宿主机上配置了路由规则:凡是目标地址为192.11.x.x的数据包,都会被路由到对应的宿主机上
- 宿主机上保留了Libvirt默认NAT网络的标准MASQUERADE规则——理论上所有从虚拟机发出的数据包,在通过ens3网卡离开宿主机前,源IP都会被替换成宿主机自身的IP
在这个配置下,我碰到了完全无法理解的异常行为,实在不知道该怎么解决。举个具体例子:
拿两台宿主机来说,一台是没有部署虚拟机的10.254.1.10,另一台是部署了虚拟机的10.254.1.3(对应虚拟机IP192.11.3.3)。当10.254.1.10尝试访问192.11.3.3时,部分TCP数据包没有被宿主机10.254.1.3执行MASQUERADE转换——虚拟机回包的源IP依然是192.11.3.3,而不是被替换成宿主机的10.254.1.3,这就导致10.254.1.10收到回包后,不知道该把响应发给谁,最终连接出现异常。
我反复检查了路由规则和iptables的MASQUERADE规则,看起来都是符合Libvirt默认配置的,但就是有部分数据包不按预期走转换流程,实在摸不着头脑,有没有大佬能帮我分析下可能的原因,或者给点排查方向?
备注:内容来源于stack exchange,提问作者Vin Cent
相关产品推荐
相关产品推荐

