TL;DR:即使在内核中启用路由后,全新安装的 Ubuntu 16.04.01 也无法路由。
长版本:我正在使用各种虚拟机作为路由器进行路由。我已经加载了一个新的虚拟机(VMware Workstation 12.5;主机运行 Win7)和 Ubuntu Server 16.4.1 并对其进行了完全更新。它有 2 个 VMware NIC。我在配置网络时做了以下操作:
- 配置网络(ens33 是“互联网”或“外部”接口,分配 192.168.5.5;ens34 是“内部”接口,分配 10.0.0.1。
- 通过编辑 /etc/sysctl.conf 并删除 ipv4_forwarding 行前面的标签来启用 ipv4 路由
- 使用“ufw disable”禁用 Ubuntu 防火墙(此虚拟机背后有许多其他保护措施;目前没有防火墙的风险很小)
- 重新启动了虚拟机。
(我没有使用网络管理器)
路由器 VM 后面有另一个运行 14.04 的 Ubuntu VM,位于 10.0.0.2。
一切都应该很顺利,对吧?只是路由器没有路由来自 14.04 工作站的数据包。
路由器虚拟机本身能与互联网通信。它可以 ping 通互联网和其后面的工作站,也可以 apt-get 等。工作站可以 ping 通路由器,但无法通过路由器。
在故障排除方面,我有:
- 检查 /proc/sys/net/ipv4/ip_forward = 1。确实如此。
- 检查防火墙是否已禁用。确实已禁用。
- 对路由器上的两个接口执行 tcpdump。我可以看到工作站的 ping 从内部接口转发到外部接口并继续发送,但我还可以看到响应到达外部接口,并没有转发回来。
- 尝试了不同的虚拟接口
- 尝试了不同的 IP 寻址方案
- 甚至尝试加载具有不同发行版(Debian 8)的不同 VM 作为路由器。结果相同。
问题是,我做有其他较旧的路由器虚拟机做可以工作。我有一个配置了路由的 Debian 7 VM,它可以工作。只是这个新的不行。
有人有什么想法吗?谢谢!