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 process
或SIOCADDRT: Network is unreachable
。您应该检查您的输入是否正确,或者使用ping
命令来测试您的目的地或网关是否可达。
如果您在使用 route 命令时遇到了 bash: route: command not found
的错误,您可以按照上面的方法安装 net-tools 包,或者使用 ip 命令来代替 route 命令。
评论区