手把手教你 Linux 平台的路由表配置
坑边闲话:Windows 平台现在是两套命令控制体系,一套是向后兼容的 CMD 窗口,另一套是 PowerShell Core. 非 Core 版本的 PowerShell 我们今天不谈。与之类似,Linux 平台的网络命令也是分了两代,一代是
net-tools,另一代是iproute2. 紧随时尚潮流的你,赶紧跟我学起iproute2命令套装!
1. net-tools 已是烈士暮年·
首先来介绍一下老一代的 net-tools 套装。
net-tools 是一个程序的集合,专门为 Linux 系统实现,而且构成了 NET-3 网络的基础。
传统的 net-tools 具体包括以下的若干程序:
arphostnameifconfignetstatrarprouteplipconfigslattachmii-tooliptunnelipmaddr
注意,OpenWrt 21.02 并没有囊括 net-tools 所有的命令,只有部分依旧比较常用的命令得到支持。比如 ifconfig,netstat,route,miit-tool 等。这是因为这些命令已经比较老了,继续支持的原因是好多用户离不开他们。比较少见的老命令自然就直接被拿掉了。
net-tools 目前正在逐渐被淘汰。如果你像我一样热爱最新的技术,那就跳过这一节,直接看 iproute2 命令吧!
2. iproute2 接过大旗·
iproute2 能做 net-tools 能做的所有事情。
iproute2 是一个命令套装,其中的命令都以 ip 开头。如 ip addr,ip route,ip link 等。
那么问题来了,我们该如何学习 iproute2 命令集合呢?一般而言有两种思路,一是在 net-tools 的基础上学习,通过类比迁移掌握新的命令。另一种是直接从 iproute2 本身出发,理解这个命令套装的构建原理和思路。
当然后者逼格更高~~
不过逼格不能当饭吃,还是从一般应用场景出发吧。循序渐进~~
iproute2 中的命令都以 ip 加空格开头,看起来好像后面的都是 ip 命令的参数。但是实际上 ip 命令绝不会单独使用。这一点要牢记~
另外,iproute2 的命令非常多,也特别复杂,一篇文章就讲得明明白白并不是不可能,只是会很枯燥。这篇博客会尽力写得详细一点,但主要目的还是希望帮大家入门。入门之后,某些具体配置可以直接看 help 输出。
2.0. 警告·
iproute2 命令是严格依赖内核版本的,因此如果你的 OpenWrt 是下载的某个 snapshot 版本,也就是并非稳定版,那么有可能因为内核版本问题而无法 opkg install 某些 iproute2 的命令。
所以,要么弄个稳定版系统,要么在编译的时候就把 iproute2 都选择好。
2.1 引子:查看网络接口的状态·
net-tools:ifconfig(Interface Configration)iproute2:ip addr show
一般而言,ath 指的是无线网卡,eth 指的是有线以太网卡,lo 指的是本机回环地址。
网络设备也可能使用其他名称,如 wlan0.
讲到这里我们要点明 ip 命令的构成。
2.2 ip 命令格式与子命令·
iproute2 命令的样式:
ip + 指定的对象(如 address,可简写为 addr 甚至 a)+ 操作(如 show)
如 ip addr show.
ip 后面不一定要紧跟一个指定的操作对象,还可以先加一个过滤器、显示参数等。其写法如下所示:
1 | -0 -- link protocol, no networking |
其中 -color 选项非常有用,它可以高亮某些字段,让我们阅读起来更方便一些。如图 1 所示。

2.3 ip 的操作对象字段·
常见的 ip 命令操作对象如图 2 所示。

这里我们着重解释一下几个常用的作用对象。
addr,即address,用来管理地址link,即网卡管理。这个就比较偏硬件了,我一般用来设置MTU或混杂模式,其他倒是很少用。monitor,监控连接的设备。简单运行ip monitor即可查看当前可建立连接的所有设备neigh,即查看网络邻居,简单可理解ARP表。如果你是局域网中的设备,那么能看到局域网中所有的电脑;如果在路由器上运行这个命令,则还可以看到上一级路由器。route,这就是我们见天要讲的最终要的一个作用对象,即路由表
以上这些作用对象,在后面不加任何动作、参数的情况下,默认调用查看动作。如图 3 所示。

2.4 ip route 配置路由表·
ip route 命令是操作路由表的核心命令。我们举个例子。
输入 ip route 并执行,将得到所有的 IPv4 路由表。如果要查看 ipv6 路由表,可执行 ip -6 route 命令。

为了好理解,我把 Windows 上通过 PowerShell 配置新路由表的命令与 iproute2 命令写在一起,大家对照着看。可以看到 iproute2 的命令更加精简,在没有提示的情况下输入更快;Windows PowerShell 的命令看上去更漂亮一致,参数与参数名保持对,十分满足强迫症。
1 | # Linux iproute2 |
1 | // Windows powershell |
在 iproute2 里,via 关键字和 nexthop 关键字均为预定义字段。如图 5 所示。

一般我们认为在静态路由配置里,via 就是下一跳的意思。但是 Linux 把这个 nexthop 单独拎出来用,其实主要是为了弄多路径路由(如图 5 所示)。多路径路由是个很复杂的概念,今天就不展开讲了。做一般配置时,只需把 Powershell 里的 NextHop 参数理解为 iproute2 里的 via 即可。
其余的 metric、默认路由 0.0.0.0/0 等表达,也可以参照 iproute2 的 ip 手册来学习。非常简单。
注意:与 PowerShell 的另一个不同的地方是 Linux iproute2 区分被转发流量的源地址。在 ip route add 中以 src 关键字表示。可理解为某限制条件,一般可留空。
总结·
这篇介绍 Linux 路由表配置的文章陆陆续续写了两三天,希望能对各位同学有所帮助,不严谨的地方还请在评论区指出。
下一篇我们讲 macOS 的网络配置命令。










