cloudpods
cloudpods copied to clipboard
[求助/Help]多VLAN网络模式下,虚拟机无法给其它同段虚拟机提供NAT服务
-
版本:高可用私有云集群 3.10.4至3.10.6均同现象。
-
网络:
listen_interface: team0.1001
networks:
- team0/br0/bcast0
- team2/br2/bcast2
- team0即是管理口也是业务口
- team1是业务口
- 现象描述: 虚拟机A与虚拟机B均位于同一物理节点(不同节点现象一样)
- 虚拟机A同时配置了内网ip和外网IP。并设置net.ipv4.ip_forward = 1,同时通过iptables启用SNAT。
- 虚拟机B只配置内网IP,并把默认网关指向VM A。
此时,在VM B与VM A是内网互通的,但在VM B上ping 任意公网IP,发现包在VM A所在的物理节点上被丢弃。
支持的。虚拟机-网络设置源/目的检查 @SlyChen
https://github.com/yunionio/cloudpods/issues/16840 @SlyChen 好像和这个是类似的问题
VM A和VM B任意一台关闭检查或两台全部关闭检查后现象还是一样。
请按如下流程检查: 1.验证证在A上能够ping通这个外网IP 2. 在B ping这个外网IP,如果不通,请在A上抓包
tcpdump -i <ifname_of_public_nic> -n -v icmp and host <ip_of_ping_destination>
确认从B ping报文被正确发送出去
请按如下流程检查: 1.验证证在A上能够ping通这个外网IP 2. 在B ping这个外网IP,如果不通,请在A上抓包
tcpdump -i <ifname_of_public_nic> -n -v icmp and host <ip_of_ping_destination>
确认从B ping报文被正确发送出去
抱歉,是我的测试环境被还原了。关闭“网络设置源/目的检查”后就可以了。
可以在虚拟机上挂一个物理机同段IP,然后给物理机做SNAT上网吗?测试时候,抓包发现包在物理机上就被直接丢了。
可以在虚拟机上挂一个物理机同段IP,然后给物理机做SNAT上网吗?测试时候,抓包发现包在物理机上就被直接丢了。 @SlyChen
理论上可以的,没有做限制。同样,发现丢包,则需要逐段排查问题,即先在虚拟机ping 物理机,物理机ping外网(如114.114.114.114),然后再在虚拟机ping外网(114.114.114.114),如果前两者通,最后不通,则需要tcpdump抓包看丢包在哪个环节发生,比如SNAT是否转换了正确的源IP?
@swordqiu 挂物理机同段的IP的NAT VM跟其所在物理机就不通,如下:
- 10.166.40.10是控制节点IP。
- 10.166.40.199(有带VLAN标记)是NAT VM IP,且位于10.166.40.10上。
示例为在10.166.40.10 PING 10.166.40.199。
在10.166.40.10上抓包如下:
15:11:49.472028 IP 10.166.40.10 > 10.166.40.10: ICMP host 10.166.40.199 unreachable, length 92
15:11:49.472043 IP 10.166.40.10 > 10.166.40.10: ICMP host 10.166.40.199 unreachable, length 92
15:11:49.472064 IP 10.166.40.10 > 10.166.40.10: ICMP host 10.166.40.199 unreachable, length 92
10.166.40.199未抓到任何ICMP报文。