为什么`route` 不接受 CIDR 格式的目标参数?

mbl*_*ley 2 networking routing

我注意到这两种命令格式给出了不同的结果:

$ sudo route -v add -net <IP> netmask 255.255.255.255 gw <gateway>
# succeeds without outputting text

$ sudo route -v add -net <IP>/32 gw <gateway>
SIOCADDRT: Invalid argument
Run Code Online (Sandbox Code Playgroud)

man 文件route清楚地说明 CIDR 格式应该可以工作:

路由 [-v] [-A family] 添加 [-net|-host] 目标 [网络掩码 Nm] [gw Gw]...

[...]

目标:目标网络或主机。您可以提供点分十进制或主机/网络名称中的 IP 地址。

那么我错过了什么?

注意:此外,verbose 选项在此命令上似乎无用。

小智 6

区别应该在于 route 命令所做的参数分析。在我看来,第一个命令的结果不是您在第二个命令中得到的错误可能是不合适的,因为您正在尝试设置到主机的路由,指定该路由是到网络的路由。

如果将 -net 替换为 -host,则将接受第二个命令:

$ route -v add -host <IP>/32 gw <gateway>

在任何情况下,我都会建议使用 ip 命令,您可以通过以下方式添加路由:

$ ip route add <IP>/32 via <gateway>
Run Code Online (Sandbox Code Playgroud)

或者

$ ip route add <IP> via <gateway>
Run Code Online (Sandbox Code Playgroud)