Windows 7 主机 A 有两个物理适配器,每个适配器都有一个 IP:10.20.157.10/24 10.20.159.10/24
Windows 7 主机 B 有两个物理适配器,每个适配器都有一个 IP:10.20.156.10/24 10.20.158.10/24
Windows 7 主机 A 有两条静态路由: 通过 10.20.157.1 的 10.20.156.0/24 通过 10.20.157.1 的 10.20.158.0/24
Windows 7 主机 B 有两条静态路由: 通过 10.20.156.1 的 10.20.157.0/24 通过 10.20.156.1 的 10.20.159.0/24
在主机 A 上,我 ping 10.20.158.10。回显请求从 IP 为 10.20.157.10 的适配器发出,并到达网关 10.20.157.1 进行路由。数据包捕获显示回显请求成功到达主机 B 的 10.20.158.10 接口。
应生成一个回显回复,其目标 IP 地址为 10.20.157.10(回显请求来自该地址)。这将从 IP 地址为 10.20.156.10 的接口发出,并转到网关 10.20.156.1 进行路由。数据包捕获显示未生成此类回显回复。
这种情况的显著特征是主机 B 上的入口和出口接口不同。
我无法找到任何证据表明在这种情况下不应生成回声答复。
不允许回显应答从除回显请求所进入的接口之外的其他接口传出的行为,根据 RFC 来说,是否正确或不正确,还是 RFC 是否将决定权留给实现?
如果将决定权留给实施,有没有办法强制 Windows 7 允许回显答复出去?
答案1
需要在相关接口上使用“弱主机”模型。
首先,获取红色接口的索引:
netsh interface ipv4 show interface
接下来,发出以下命令(使用接口索引 13 和 15 作为示例):
netsh interface ipv4 set interface 13 weakhostsend=enabled
netsh interface ipv4 set interface 15 weakhostsend=enabled
netsh interface ipv4 set interface 13 weakhostreceive=enabled
netsh interface ipv4 set interface 15 weakhostreceive=enabled
要检查此设置,请发出以下命令(使用接口索引 13 作为示例):
netsh interface ipv4 show interface 13