未指定网关(下一跳)的 Windows 静态路由

未指定网关(下一跳)的 Windows 静态路由

我有以下情况:

计算机 A:,198.51.100.8网络掩码255.255.255.0
计算机 B:,203.0.113.9网络掩码255.255.255.0
两台计算机位于同一 LAN 段上;两种情况下均未指定默认网关。

为了让这两台计算机相互通信,我添加了两个静态路由,如下所示:

route add 203.0.113.9 mask 255.255.255.255 198.51.100.8

不过,我更愿意通过指定网络接口,而不是通过指定网关 IP 地址

在 Linux 中可以使用以下命令来实现:

ip route add 203.0.113.9 dev eth0

在 FreeBSD 中也类似:

route add 203.0.113.9/32 -iface fxp0 -cloning

但是,我不知道如何在 Windows 上执行此操作。理想情况下,我想执行如下操作:

route add 203.0.113.9 mask 255.255.255.255 if 2

但这只会打印出命令的用法route,这告诉我我做错了。我也尝试过使用netsh,它告诉我:

> netsh routing ip add persistentroute 203.0.113.9 255.255.255.255 "Local Area Connection"
Specify the next-hop for non point-to-point interfaces.

有什么想法或建议吗?


更新:当我最初发布这个问题时,我正在使用 Windows XP。但我忘了提到这一点。

我将保留 Grizly 的原始答案,因为它对我的原始问题是正确的。但如果您使用的 Windows 版本比 XP/2003 更新,请尝试其他答案之一。

答案1

在 Windows 上可能无法实现

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/route.mspx

引用:对于本地连接的子网路由,网关地址是分配给连接到子网的接口的 IP 地址。

答案2

在 Windows 中,您可以根据接口添加路由,而无需通过传递网关0.0.0.0来了解网关

这给出了如下结果:

route add <IPtoRoute> mask <MaskOfTheIp> 0.0.0.0 IF <InterfaceNumber>

route add 203.0.113.9 mask 255.255.255.255 0.0.0.0 IF 2

答案3

我在 Windows 7 Enterprise 中使用 Juniper Junos Pulse VPN 客户端也遇到了同样的问题。
我遇到了一个问题,因为它捕获了所有可能的 IPv4 地址并将它们路由到拨号连接:

Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          1.0.0.0        255.0.0.0         On-link       XX.XX.XX.XX     11
          2.0.0.0        254.0.0.0         On-link       XX.XX.XX.XX     11
          4.0.0.0        252.0.0.0         On-link       XX.XX.XX.XX     11
          8.0.0.0        248.0.0.0         On-link       XX.XX.XX.XX     11
         16.0.0.0        240.0.0.0         On-link       XX.XX.XX.XX     11
         32.0.0.0        224.0.0.0         On-link       XX.XX.XX.XX     11
         64.0.0.0        192.0.0.0         On-link       XX.XX.XX.XX     11
        128.0.0.0        128.0.0.0         On-link       XX.XX.XX.XX     11

我不想让所有流量都通过 VPN,因此,如果有人需要,我编写了一个小的 cmd 文件来删除这些路由,然后通过指定正确的接口来安装我唯一需要的路由 (10.0.0.0),而无需指定网关。
您可以使用它来动态检索接口号。

@rem Get the interface number
set IF=
for /f "tokens=1,8 delims=. " %%A in ('route print') do @if /i "%%B" equ "Juniper" set IF=%%A
@rem If interface is not found, terminate quietly
if not defined IF exit /b
for %%A in (1 2 4 8 16 32 64 128) do @route delete %%A.0.0.0
route add 10.0.0.0 mask 255.0.0.0 0.0.0.0 IF %IF%

答案4

您不能在永久表中省略网关。有些人建议将接口卡 IP(用户端)放在那里,这在 Windows XP 中是可以接受的。但它不再有效。在这种情况下,操作系统将继续敲击每个网络接口,至少直到缓存被填充;这不是一个好的行为,并且与空路由表没有区别。

我发现将目标 IP 作为网关至少在 Windows 10 上可以解决问题。但目前我没有足够的统计数据来确认其 100.1% 的真实性。

相关内容