侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux route命令教程:管理内核的 IP 路由表(附实例详解和注意事项)

Linux route 命令介绍

route(路由)命令是用于查看和修改内核的 IP 路由表的命令。它的主要用途是在一个接口被 ifconfig 程序配置后,设置静态路由到特定的主机或网络。当添加或删除选项被使用时,route 命令会修改路由表。没有这些选项时,route 命令会显示当前的路由表内容。

Linux route 命令适用的 Linux 版本

route 命令在大多数 Linux 发行版中都是可用的,但有些发行版可能没有预装 route 命令。如果您的系统没有 route 命令,您可以根据您的 Linux 发行版使用以下命令进行安装:

  • Debian/Ubuntu: sudo apt-get install net-tools
  • CentOS/RedHat: sudo dnf install net-tools
  • Fedora: sudo dnf install net-tools

Linux route 命令的基本语法

route 命令的基本语法格式如下:

route [-CFvnee]
route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] If]
route [-v] [-A family] del [-net|-host] target [gw Gw] [netmask Nm] [metric N] [[dev] If]
route [-V] [--version] [-h] [--help]

Linux route 命令的常用选项或参数说明

route 命令有很多选项或参数,可以用来控制路由表的显示或修改。以下是一些常用的选项或参数的说明,按照字母顺序排序:

选项或参数说明
-A family使用指定的地址族(例如 inet),使用 route --help 查看完整的列表
-C操作内核的路由缓存
-F操作内核的 FIB(转发信息基础)路由表,这是默认的
-h, --help显示帮助信息
-n显示数字地址,而不是尝试确定符号主机名,这在您需要确定为什么到您的域名服务器的路由消失了时很有用
-v选择详细的操作模式
-V, --version显示版本信息
-net目标是一个网络
-host目标是一个主机
target目标网络或主机,可以是点分十进制的 IP 地址或主机/网络名
netmask Nm设置目标网络的子网掩码
gw Gw设置目标网络或主机的网关地址
metric N设置目标网络或主机的跃点数
mss M设置 TCP 最大分段大小
window W设置 TCP 窗口大小
irtt I设置初始往返时间
reject拒绝路由到目标网络或主机
mod设置动态路由的修改标志
dyn设置动态路由的动态标志
reinstate设置动态路由的恢复标志
dev If设置目标网络或主机的出口接口

Linux route 命令实例详解

以下是一些使用 route 命令的实例,结合了最常搜索的关键词,例如显示、添加、删除、拒绝路由等。每个实例都给出了相关的解释和输出。

实例1:显示当前的路由表

命令:

[linux@bashcommandnotfound.cn ~]$ route

解释:

这个命令会显示当前的路由表内容,包括目标网络或主机、网关、子网掩码、标志、跃点数、引用数、使用数和出口接口等信息。

输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.2     0.0.0.0         UG    1024   0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

实例2:显示当前的路由表(数字形式)

命令:

[linux@bashcommandnotfound.cn ~]$ route -n

解释:

这个命令会显示当前的路由表内容,但是不会尝试确定符号主机名,而是直接显示数字地址。这在您需要确定为什么到您的域名服务器的路由消失了时很有用。

输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.2     0.0.0.0         UG    1024   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

实例3:添加一个默认网关

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add default gw 169.254.0.0

解释:

这个命令会给路由表添加一个默认网关,即所有不属于本地网络的数据包都会被转发到这个网关地址。在这个例子中,我们选择 169.254.0.0 作为默认网关,您可以根据您的需要选择其他地址。

输出:

SIOCADDRT: Network is unreachable

注意:

这个输出表示添加默认网关失败,因为 169.254.0.0 是一个无效或不存在的目的地。您应该选择一个有效的网关地址,例如您的路由器的 IP 地址。

实例4:删除一个默认网关

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route del default

解释:

这个命令会从路由表中删除一个默认网关,即取消所有不属于本地网络的数据包的转发规则。注意:这可能会导致您的互联网连接出现故障。在执行这个命令之前,您应该记下您的默认网关地址,以便恢复。

输出:

[linux@bashcommandnotfound.cn ~]$

实例5:显示内核的路由缓存信息

命令:

[linux@bashcommandnotfound.cn ~]$ route -Cn

解释:

这个命令会显示内核的路由缓存信息,即内核为了加快数据包的转发而维护的一些路由记录。这个命令会输出目标地址、源地址、网关、标志、跃点数、使用数、确认数、窗口大小、初始往返时间和接口等信息。

输出:

Kernel IP routing cache
Source          Destination     Gateway         Flags Metric Ref    Use Iface
192.168.1.100   192.168.1.2     192.168.1.2     C     0      0        0 eth0

实例6:添加一个静态路由到特定的主机

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -host 192.168.1.100 gw 192.168.1.2

解释:

这个命令会给路由表添加一个静态路由,即所有目的地为 192.168.1.100 的数据包都会被转发到 192.168.1.2 这个网关。这在您需要通过一个特定的网关访问某个主机时很有用。在这个例子中,我们选择 192.168.1.100 作为目标主机,192.168.1.2 作为网关,您可以根据您的需要选择其他地址。

输出:

[linux@bashcommandnotfound.cn ~]$

实例7:删除一个静态路由到特定的主机

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route del -host 192.168.1.100

解释:

这个命令会从路由表中删除一个静态路由,即取消对目的地为 192.168.1.100 的数据包的转发规则。这在您不再需要通过一个特定的网关访问某个主机时很有用。在这个例子中,我们选择 192.168.1.100 作为目标主机,您可以根据您的需要选择其他地址。

输出:

[linux@bashcommandnotfound.cn ~]$

实例8:添加一个静态路由到特定的网络

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.2

解释:

这个命令会给路由表添加一个静态路由,即所有目的地为 192.168.2.0/24 网段的数据包都会被转发到 192.168.1.2 这个网关。这在您需要通过一个特定的网关访问某个网络时很有用。在这个例子中,我们选择 192.168.2.0/24 作为目标网络,192.168.1.2 作为网关,您可以根据您的需要选择其他地址。

输出:

[linux@bashcommandnotfound.cn ~]$

实例9:删除一个静态路由到特定的网络

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route del -net 192.168.2.0 netmask 255.255.255.0

解释:

这个命令会从路由表中删除一个静态路由,即取消对目的地为 192.168.2.0/24 网段的数据包的转发规则。这在您不再需要通过一个特定的网关访问某个网络时很有用。在这个例子中,我们选择 192.168.2.0/24 作为目标网络,您可以根据您的需要选择其他地址。

输出:

[linux@bashcommandnotfound.cn ~]$

实例10:拒绝路由到特定的主机

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -host 192.168.1.100 reject

解释:

这个命令会给路由表添加一个拒绝路由,即所有目的地为 192.168.1.100 的数据包都会被丢弃,并返回一个 ICMP 目的地不可达的消息。这在您需要阻止某个主机的访问时很有用。在这个例子中,我们选择 192.168.1.100 作为目标主机,您可以根据您的需要选择其他地址。

输出:

[linux@bashcommandnotfound.cn ~]$

实例11:拒绝路由到特定的网络

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -net 192.168.2.0 netmask 255.255.255.0 reject

解释:

这个命令会给路由表添加一个拒绝路由,即所有目的地为 192.168.2.0/24 网段的数据包都会被丢弃,并返回一个 ICMP 目的地不可达的消息。这在您需要阻止某个网络的访问时很有用。在这个例子中,我们选择 192.168.2.0/24 作为目标网络,您可以根据您的需要选择其他地址。

输出:

[linux@bashcommandnotfound.cn ~]$

实例12:设置目标主机的跃点数

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -host 192.168.1.100 metric 5

解释:

这个命令会给路由表添加一个路由,即所有目的地为 192.168.1.100 的数据包都会被转发到默认网关,并设置跃点数为 5。跃点数是指从源到目的地的路由器数量,它可以影响路由的优先级,跃点数越小,优先级越高。这在您需要调整路由的优先级时很有用。在这个例子中,我们选择 192.168.1.100 作为目标主机,5 作为跃点数,您可以根据您的需要选择其他地址和数字。

输出:

[linux@bashcommandnotfound.cn ~]$

实例13:设置目标网络的跃点数

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -net 192.168.2.0 netmask 255.255.255.0 metric 10

解释:

这个命令会给路由表添加一个路由,即所有目的地为 192.168.2.0/24 网段的数据包都会被转发到默认网关,并设置跃点数为 10。跃点数是指从源到目的地的路由器数量,它可以影响路由的优先级,跃点数越小,优先级越高。这在您需要调整路由的优先级时很有用。在这个例子中,我们选择 192.168.2.0/24 作为目标网络,10 作为跃点数,您可以根据您的需要选择其他地址和数字。

输出:

[linux@bashcommandnotfound.cn ~]$

实例14:设置目标主机的出口接口

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -host 192.168.1.100 dev eth1

解释:

这个命令会给路由表添加一个路由,即所有目的地为 192.168.1.100 的数据包都会被转发到 eth1 这个出口接口。出口接口是指数据包从本地主机发送到目的地的网络设备,它可以影响路由的效率和安全性。这在您需要指定某个接口来访问某个主机时很有用。在这个例子中,我们选择 192.168.1.100 作为目标主机,eth1 作为出口接口,您可以根据您的需要选择其他地址和设备。

输出:

[linux@bashcommandnotfound.cn ~]$

实例15:设置目标网络的出口接口

命令:

[linux@bashcommandnotfound.cn ~]$ sudo route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1

解释:

这个命令会给路由表添加一个路由,即所有目的地为 192.168.2.0/24 网段的数据包都会被转发到 eth1 这个出口接口。出口接口是指数据包从本地主机发送到目的地的网络设备,它可以影响路由的效率和安全性。这在您需要指定某个接口来访问某个网络时很有用。在这个例子中,我们选择 192.168.2.0/24 作为目标网络,eth1 作为出口接口,您可以根据您的需要选择其他地址和设备。

输出:

[linux@bashcommandnotfound.cn ~]$

Linux route 命令的注意事项

在使用 route 命令时,您应该注意以下几点:

  • route 命令是一个过时的命令,它已经被 ip 命令所取代。ip 命令提供了更多的功能和灵活性,您可以使用 ip route 来代替 route
  • route 命令需要 root 权限才能修改路由表,您可以使用 sudo 命令来提升权限。
  • route 命令修改的路由表是临时的,它会在系统重启后失效。如果您想要永久保存您的路由设置,您需要将 route 命令写入 /etc/rc.local 文件或其他适合您的 Linux 发行版的启动脚本中。
  • route 命令可能会导致您的网络连接出现问题,例如无法访问互联网或某些主机或网络。在使用 route 命令之前,您应该备份您的当前的路由表,以便恢复。您可以使用 route -n > route.bak 命令来保存您的路由表到一个文件中。
  • route 命令可能会与您的网络管理器或防火墙产生冲突,导致您的路由设置被覆盖或拒绝。在使用 route 命令之前,您应该检查您的网络管理器或防火墙的配置,以避免不必要的麻烦。
  • 如果您尝试添加或删除一个不存在或无效的目的地或网关,route 命令会返回一个错误信息,例如 SIOCADDRT: No such processSIOCADDRT: Network is unreachable。您应该检查您的输入是否正确,或者使用 ping 命令来测试您的目的地或网关是否可达。

如果您在使用 route 命令时遇到了 bash: route: command not found 的错误,您可以按照上面的方法安装 net-tools 包,或者使用 ip 命令来代替 route 命令。

0

评论区