目录一、需求背景二、第一次尝试使用 ICSInternet Connection Sharing三、第二次尝试关闭 ICS开启 Windows 路由转发1. 关闭 ICS2. 开启 IPEnableRouter3. 在物理网络主机添加静态路由四、关键突破抓包发现 95 收到请求但不回包五、最终解决方案开启每个接口的 forwarding六、ICS 与 Windows 路由转发的本质区别七、最终效果在使用 eNSP 做网络实验时我们经常希望让 eNSP 内的虚拟设备交换机、路由器、防护墙与真实物理网络互通。例如让物理机访问 eNSP 内的主机让物理网络中的其他电脑访问 eNSP 的 防火墙让 eNSP 内的设备访问外网看似简单但真正做起来会遇到各种坑。在我之前使用eNSP的过程中我曾经让物理网络中的设备访问虚拟环境中的防火墙比如通过浏览器访问防火墙的web页面。当时磕磕碰碰的不太顺利主要是我强行绑定到桥接口网络不稳定。今天我按照官方做法加上自己的一些理解终于把 eNSP实验环境和物理网络彻底打通了。我们都知道eNSP中提供网云cloud可以和物理世界打通但是普遍的是只能和运行eNSP的物理机打通不能连接外部。因为在添加通道的时候只能添加host-only网卡不能添加桥接网卡。关于eNSP中的cloud设置按照下图设置即可。本片文章就是在添加host-only网卡的基础上打通网络连接。希望能帮到同样在折腾 eNSP 的你。一、需求背景我的实验环境如下物理网络172.16.13.0/24物理机172.16.13.95eNSP Host-Only 网段192.168.56.0/24eNSP 主机192.168.56.94eNSP 交换机 VLAN 接口192.168.56.93目标非常明确让物理网络中的任意主机如 172.16.13.91能够访问 eNSP 内的设备如 192.168.56.1、192.168.56.94 等。二、第一次尝试使用 ICSInternet Connection Sharing我最开始使用 Windows 的 ICS共享网络功能希望让 eNSP 访问外网。结果 ICS 自动把 Host-Only 网卡改成了192.168.137.1这样的话要不你把网卡改回192.168.56.1要不改变实验环境中的地址规划。但是这样只能够实现实验环境中的设备访问外部网络无法让外部网络访问实验环境中的设备。原因很简单ICS 是单向 NAT只允许内部访问外部不允许外部访问内部。也就是说eNSP → 物理网络可以物理网络 → eNSP不行不过这种情况想实验拓扑中的设备可以直接上互联网因为ICS已经做了NAT转换。不需要上层网关参与路由和NAT。三、第二次尝试关闭 ICS开启 Windows 路由转发既然 ICS 不行那就让 Windows 变成真正的路由器。我做了以下操作1. 关闭 ICS恢复 Host-Only 网卡为192.168.56.12. 开启 IPEnableRouterreg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f3. 在物理网络主机添加静态路由route add 192.168.56.0 mask 255.255.255.0 172.16.13.95理论上这样 91 → 95 → 56.1 就应该通了。但实际情况是172.16.13.91 ping 192.168.56.1 不通。四、关键突破抓包发现 95 收到请求但不回包我在 172.16.13.95 上抓包发现95收到了来自 91 的 ICMP Echo Request但 95没有发送Echo Reply这说明Windows 收到了包但没有把它当成“本机包”处理。为什么因为 Windows 的逻辑是如果目标 IP 属于同一网卡 → 直接回包如果目标 IP 属于另一块网卡 → 需要“跨接口处理”如果 forwarding 没开 → 丢弃不回包也就是说95 虽然有 192.168.56.1但来自 172.16.13.x 的包要跨网卡处理必须开启 forwarding。五、最终解决方案开启每个接口的 forwardingWindows 的 IPEnableRouter1 只是“允许路由” 但真正的转发需要对每个接口单独开启。我执行了两条命令netsh interface ipv4 set interface 3 forwardingenabled netsh interface ipv4 set interface 17 forwardingenabled其中Interface 3 172.16.13.95物理网卡Interface 17 192.168.56.1Host-Only 网卡执行完这两条命令后——不需要重启——奇迹发生了172.16.13.91 能 ping 通 192.168.56.1 了这说明Windows 已经开始跨网卡处理数据包真正变成了一台路由器。六、ICS 与 Windows 路由转发的本质区别功能ICS共享网络Windows 路由转发IP forwarding工作模式NAT路由L3 转发内部访问外部✔✔外部访问内部❌✔多网段互通❌✔可控性低完全可控适合场景家庭上网共享实验室、企业网络、eNSP、GNS3一句话总结ICS 是 NAT只能让内部访问外部Windows 路由转发是三层路由可以让所有网段互通。七、最终效果现在我的网络实现了物理网络 → eNSP 主机物理网络 → eNSP 交换机eNSP → 物理网络eNSP → 互联网需要上层设备额外设置上图是我的实验拓扑中的PC1 在ICS和路由情况下ping 1.1.1.1的不同结果。也就是说把物理机当成一台路由器可以实现网络连通。但是想让实验拓扑中的设备上互联网可能需要额外的设置比如让互联网网关172.16.13.1知道192.168.56.0网段的存在需要设置NAT和回城路由。在没有这个条件的情况下其他主机想要访问实验拓扑需要单独设置静态路由。