![令人费解的路由问题 - 公共接口和嵌套虚拟机之间的数据包无法转发](https://linux22.com/image/1138747/%E4%BB%A4%E4%BA%BA%E8%B4%B9%E8%A7%A3%E7%9A%84%E8%B7%AF%E7%94%B1%E9%97%AE%E9%A2%98%20-%20%E5%85%AC%E5%85%B1%E6%8E%A5%E5%8F%A3%E5%92%8C%E5%B5%8C%E5%A5%97%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B9%8B%E9%97%B4%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%E6%97%A0%E6%B3%95%E8%BD%AC%E5%8F%91.png)
这是我有点令人费解的路由问题。
以下是文字描述。我有一台 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 中要寻找什么,或者也许在其他地方。