设置:
路由器:在 RTN16 路由器上运行的 TomatoUSB 正在将多个端口转发到我的服务器。
服务器:Windows Server 2012 是多个 VirtualBox Ubuntu VM 的主机。
一个虚拟机,使用 NAT 效果很好。
另一台虚拟机,使用 Bridged,在内部网络上运行良好。
但是,当我尝试从外部网络访问同一位置时,我看到的却是托管在 IIS 中的站点,而不是我的 VM。
笔记:
改变不是一种选择,这是一种学习,而不是放弃。
我考虑过 TomatoUSB 是罪魁祸首的可能性,但没有技术专长来证明这一点,所以如果你能解释它是如何出错的,那就是一个有效的答案。
Tomato 配置为将外部端口转发到桥接 IP () 上的8081
内部端口,因此我看到的是该端口给我服务器 IP ( ) 上的端口。80
192.168.1.124
8081
80
192.168.1.200
根据评论,我尝试8.8.8.8
从桥接的 VM 进行 ping 操作,结果返回正常,每次响应时间约为 40 毫秒。
根据要求,这是我的 TomatoUSB 上的端口转发屏幕的屏幕截图。
屏幕截图表明我测试的结果属实。如果我关闭虚拟机,然后尝试定位端口,则8081
找不到该站点。没有重定向。因此,Tomato 指向了正确的 IP。无论是从路由器的角度来看还是从虚拟机的角度来看,这里的罪魁祸首肯定是桥接网络。
为了进一步说明,Tomato 清楚地显示了服务器盒和桥接的 VM 具有单独的 IP 和单独的 MAC 地址。这是另一个屏幕截图。
我通过 IRC 进行了进一步测试。我禁用了 NAT VM 的端口转发,结果没有变化。这进一步证明 Tomato 有问题,而不是 VirtualBox 有问题。
编辑:
我从一台尝试访问端口的机器上运行了 fiddler 8081
,它将响应标头显示为301
重定向。这似乎是后遗症。我猜8081
这实际上是发送到服务器 IP(192.168.1.200
)的内容,而 IIS 正在重定向到80
。
我有 pcap 文件。
答案1
目前,这个问题的答案很难找到:我们还没有找到罪魁祸首,更不用说补救措施了。
你能跑吗tcpdump在路由器和虚拟机上?如果您能确认数据包正在离开/到达路由器/服务器(如果有的话),那将会很有帮助,但您也可以检查离开 Tomato 路由器的数据包的目的地,以确认它是发往 192.168.1.124。
使用的命令很简单:在路由器上,
tcpdump -i any -nn dst 192.168.1.124 and port 80
在虚拟机上
sudo tcpdump -i any -nn port 80
与此同时,尝试从其他 PC/shell 访问端口 8081。这样,您应该可以很好地了解数据包的流动情况。我不确定 Windows 防火墙是否仍然没有问题,这是一个怀疑。
如果你看不到任何东西离开路由器,请放宽命令的条件,改为发出
tcpdump -i any -nn port 80