令人费解的路由问题 - 公共接口和嵌套虚拟机之间的数据包无法转发

令人费解的路由问题 - 公共接口和嵌套虚拟机之间的数据包无法转发

这是我有点令人费解的路由问题。

图示

以下是文字描述。我有一台 Windows 笔记本电脑(蓝色),上面运行着 VMWare Workstation(橙色)。VMWare Workstation 有一个 Ubuntu 14.04 VM(绿色)。它有一个 NIC,即 VMWare NAT 接口。从 Windows 上可以看到,VMWare 在网络上有一个接口(ipconfig 输出)。VMWare VM(绿色)的 IP 为 192.168.115.10/24。Windows 接口(网关)为 192.168.115.1。

在绿色虚拟机中,我有一个红色虚拟机 (KVM)。它的 IP 地址为 10.0.0.2。

以下是一些有效的东西。

从 Windows:

  • ping 192.168.115.1:有效
  • ping 192.168.115.10: 成功
  • ssh 192.168.115.10:有效
  • ping www.google.com: 有效

从 Green VM (192.168.115.10) 进行以下工作。

  • ping 192.168.115.1:有效
  • ping 192.168.115.10: 成功
  • ping 10.0.0.2:有效
  • ping www.google.com: 有效

从红色虚拟机(10.0.0.2)进行以下工作。

  • ping 192.168.115.1:有效
  • ping 192.168.115.10: 成功
  • ping 10.0.0.2:有效
  • ping www.google.com: 有效

不起作用的是:

  • 从 Windows ping 10.0.0.2。

在绿色虚拟机(192.168.115.10)上,我已启用 IP 转发。

cat /proc/sys/net/ipv4/ip_forward
1

在 Windows 机器上,我有一条路由表条目,内容如下:

Active Routes: Network Destination        Netmask          Gateway    
Interface  Metric
          0.0.0.0          0.0.0.0        10.40.2.1      10.40.2.192     10
          0.0.0.0          0.0.0.0        10.40.2.1      10.40.2.186     25
         10.0.0.0    255.255.255.0   192.168.115.10    192.168.115.1     21 [...]

我也做过这个。

在绿色虚拟机和红色虚拟机上同时运行 tcpdump。

tcpdump -n -vvv -ieth0icmp

当它运行时,从 Windows 执行:

ping 10.0.0.2

在绿色虚拟机(192.168.115.10)上,我看到

21:48:45.985686 IP (tos 0x0, ttl 128, id 9541, offset 0, flags [none], proto ICMP (1), length 60)
     192.168.115.1 > 10.0.0.2: ICMP echo request, id 1, seq 145, length 40 21:48:50.987085 IP (tos 0x0, ttl 128, id 9543, offset 0, flags [none], proto ICMP (1), length 60)
     192.168.115.1 > 10.0.0.2: ICMP echo request, id 1, seq 146, length 40

在红色虚拟机(10.0.0.2)上我什么也看不到。

另一方面,如果我在 192.168.115.10 上运行 ping(ping 10.0.0.2),我会在 tcpdump 中看到以下内容。

在绿色虚拟机 (192.168.115.10) 上,我看到接口 br100 上的内容,该接口的 IP 为 10.0.0.1,是嵌套虚拟机的网关。

tcpdump -n icmp -vvvv -i br100
tcpdump: listening on br100, link-type EN10MB (Ethernet), capture size 65535 bytes 
22:16:35.310287 IP (tos 0x0, ttl 64, id 43787, offset 0, flags [DF], proto ICMP (1), length 84)
     10.0.0.1 > 10.0.0.2: ICMP echo request, id 30901, seq 1, length 64 
22:16:35.310678 IP (tos 0x0, ttl 64, id 26368, offset 0, flags [none],  proto ICMP (1), length 84)
     10.0.0.2 > 10.0.0.1: ICMP echo reply, id 30901, seq 1, length 64

在红色虚拟机(10.0.0.2)上我看到

tcpdump -vvv -n icmp 
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 
02:16:14.710411 IP (tos 0x0, ttl 64, id 42447, offset 0, flags [DF], proto ICMP (1), length 84)
     10.0.0.1 > 10.0.0.2: ICMP echo request, id 30888, seq 1, length 64 
02:16:14.710690 IP (tos 0x0, ttl 64, id 21880, offset 0, flags [none], proto ICMP (1), length 84)
     10.0.0.2 > 10.0.0.1: ICMP echo reply, id 30888, seq 1, length 64

因此,由于某种原因,从 Windows ping 时,数据包到达 192.168.115.10(绿色虚拟机)但无法到达 10.0.0.2(红色虚拟机)。

我不确定在 iptables 中要寻找什么,或者也许在其他地方。

相关内容