Ubuntu 14.04 和 VirtualBox 上的 IP 转发的路由问题

Ubuntu 14.04 和 VirtualBox 上的 IP 转发的路由问题

我的 ubuntu 服务器上的 IP 转发存在路由问题。

在我的 ubuntu 服务器(一台旧笔记本电脑)上,我安装了 VirtualBox 和许多虚拟机。每个虚拟机都有其虚拟网卡桥接到服务器上的物理 wlan0 适配器,如果设置为使用 DHCP,它们会很乐意从我的家庭无线路由器获取 IP 地址。所以桥接似乎工作得很好。

无线路由器在子网 172.17.17.0/24 上运行。

某些虚拟机在不同的子网上设置了静态 IP,由于在其上运行的应用程序,这些静态 IP 很难更改。我有两个虚拟机子网:

172.17.40.0/24 192.168.195.0/24

我认为通过为我的笔记本电脑主机提供每个子网上的 IP 地址,将虚拟机指向适当的 IP 作为其网关,然后在主机上启用 IP 转发,我想我可以让他们愉快地交谈。因此主机将以下 IP 分配给 wlan0:

172.17.17.100 172.19.40.1 192.168.195.1

通过此设置,子网 172.19.40.0 上的虚拟机可以 ping 通 192.168.195.0 子网上的虚拟机,反之亦然。主机愉快地在这两个子网之间转发 IP。这些子网上的虚拟机还可以 ping 通 172.17.17.100 上的服务器。

但是,子网 172.19.40.0 或 192.168.195.0 上的虚拟机均无法 ping 通 172.17.17.254 上的无线路由器。

我猜主机上的配置缺少某些东西,但我看不出每个子网中的虚拟机互相 ping 通,以及任一子网上的虚拟机 ping 第三个子网上的路由器之间有什么区别 - 除了它是物理设备之外- 我仍然只是要求主机将 IP 从一个子网转发到另一个子网。我想念的有什么区别?!

感谢提供的任何帮助。

为了清楚起见,编辑下面的图表。它显示虚拟机、主机和路由器之间尝试的 ping 操作。路由图

答案1

您需要让桥接主机有 rp_filter 来接受不属于自己的 IP 本地 IP 地址范围的输出数据包。

net.ipv4.conf.all.rp_filter=0

至于路由,问题在于路由器不知道172.19.40.x网络,当数据包到达路由器时,答案会通过默认网关(即未知网络,而不是返回)。

您需要在路由器中定义路由(例如)

172.19.40.0 255.255.255.0 gw 172.17.17.100

这样做,答案将返回给您的主机。

再想一想,这可能不是正确的答案,因为它是桥接的,所以您必须为路由器提供 172.19.40.0 网络的辅助 IP。

答案2

您需要在无线路由器上添加一些路由。

  • 172.19.40.0/24 通过 172.17.17.100
  • 192.168.195.0/24 通过 172.17.17.100

进入无线路由器手册并了解如何进行静态路由。我遇到了同样的问题,路由器不知道如何将流量发送回服务器,因为它们位于不同的子网上。您需要创建从路由器返回到每个子网的路径。

相关内容