总结
我有两个本地网络(一个是 VirtualBox 内部 LAN)和一个充当它们之间路由器的 Win2K VM。我可以从一个网络 ping 通另一个网络的主机,但反之则不行。
概括
我正在运行 VirtualBox 4.3.6,在内部的网络 (10.0.42.x)。所有虚拟机都是 Windows 2000 Server SP4(不是我的首选,但可以凑合着用)。我的笔记本电脑运行的是 Windows 7 Home Premium。我正在尝试配置其中一台服务器以在 VirtualBox 的内部网络和物理 LAN 之间路由(192.168.1.x)我将其称为外部的这个问题的答案是肯定的。路由器有第二个桥接网卡(因此看起来好像是在外部 LAN 上)。
在任何人询问之前(他们不可避免地会问),这是一个学习练习。
现在
- 路由器虚拟机可以 ping 两个网络中的任何目的地。
- 我的笔记本电脑可以 ping 虚拟网络中的任何客户机。我确实必须手动添加路由才能实现此目的:
route add 10.0.42.0 MASK 255.255.255.0 192.168.1.42
。路由器似乎正常工作,以便从进入内部网络。 - 访客可以 ping 内部网络中的任何目标以及路由器的外部接口。但是,他们无法访问外部网络中的任何主机,例如我的笔记本电脑或 DSL 路由器(它们都不会阻止 ping 请求)。
Ping 请求失败,Request timed out.
结果为tracert
:
跟踪到 192.168.1.69 的路由,最多 30 个跳数 1 <10毫秒 <10毫秒 <10毫秒 10.0.42.1 2 * * * 请求超时。 3 * * * 请求超时。 ...
192.168.1.69
我的笔记本电脑在哪里10.0.42.1
?是路由器外部接口的地址。这说明路由器配置有问题,但我所做的只是为 LAN 路由配置 RRAS 并保持原样,但这并没有阻止我 ping进入内部网络。
我思考我可以排除
- 防火墙(涉及的每个主机都会响应来自某处)。
- 错别字(为了避免错误,我大量复制粘贴,甚至到了偏执的地步)。
我尝试过的方法
- 删除并重新配置 RRAS。
- 为访客添加了默认路线(
route add 192.168.1.0 MASK 255.255.255.0 10.0.42.1
)。 - 向路由器的 NIC 添加了默认网关(没想到它会有帮助,而且事实也确实如此)。
具体内容
更多详细信息请咨询;这个问题可能已经够长了。
笔记本电脑
IP 192.168.1.69/24
默认网关(DSL 路由器)
路由器
IP 192.168.1.42/24
IP 10.0.42.1/24
客人
IP 10.0.42.128/24
默认网关 10.0.42.1
路由表
我已经包含了无法 ping 通自己网络外部的访客的路由表(这实际上是另一个访客(10.0.42.254),但和路由器之外的所有客人一样,它也有同样的问题):
网络目标网络掩码网关接口指标 0.0.0.0 0.0.0.0 10.0.42.1 10.0.42.254 1 10.0.42.0 255.255.255.0 10.0.42.254 10.0.42.254 1 10.0.42.254 255.255.255.255 127.0.0.1 127.0.0.1 1 10.255.255.255 255.255.255.255 10.0.42.254 10.0.42.254 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.1.0 255.255.255.0 10.0.42.1 10.0.42.254 1 224.0.0.0 224.0.0.0 10.0.42.254 10.0.42.254 1 255.255.255.255 255.255.255.255 10.0.42.254 10.0.42.254 1 默认网关:10.0.42.1
答案1
当一个主机成功 ping 通另一个主机时:
ICMP Echo Request
发起者组装数据包,查阅路由表,选择接口,然后将数据包发送到较低的 OSI 层,到达目标主机。
目标主机接收一个ICMP Echo Request
发往自身的 IP 地址,记下请求者的 IP 地址,并制定一个ICMP Echo Reply
,查阅其路由表,选择一个接口,然后将该 IP 地址发Reply
回给请求者。
请求者收到ICMP Echo Reply
,记录完成发送-接收循环所花费的时间,并将其记录给用户。
此时,一个数据包已从 A 成功传输到 B,另一个数据包也已从 B 成功传输到 A。
这证实了 A 可以到达 B,并且 B 可以到达 A。
事情本该就此结束了,但是由于某种原因,B 无法向 A 发送,或者 A 无法向 BEcho Request
发送。Echo Reply
验证 A 成功 ping B 时使用的 IP 地址,并确保它们就是 B 尝试 ping A 时使用的 IP 地址。
是不是程序出了问题ping
?两个系统可以通过 TCP 互相访问吗?(telnet B 25 连接被拒绝;挂起意味着数据在传输过程中丢失。