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

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

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

$ 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

man 文件route明确指出 CIDR 格式应该有效:

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

[...]

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

那么我错过了什么?

注意:此外,详细选项对此命令似乎没有用。

答案1

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

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

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

无论如何,我建议使用 ip 命令,使用它您可以通过以下方式添加路由:

$ ip route add <IP>/32 via <gateway>

或者

$ ip route add <IP> via <gateway>

答案2

我认为有一个令人困惑的地方:

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

host/network名字似乎表明CIDR,但我认为他们应该写主机名或网络名称正如人们会发现的那样/etc/hosts and /etc/networks

相关内容