在Linux系统中,网络配置是系统管理的重要任务之一,而ip命令作为ifconfig的替代工具,提供了更强大和灵活的网络管理功能,使用ip命令添加路由是确保网络通信正确路径的关键操作,本文将详细介绍如何通过ip命令添加路由,包括基本语法、静态路由配置、动态路由协议支持以及常见应用场景,帮助读者全面掌握这一技能。

ip命令添加路由的基本语法
ip命令属于iproute2工具包,是Linux系统中现代网络配置的核心工具,要添加路由,主要使用ip route add子命令,其基本语法结构如下:
sudo ip route add <目标网络> via <网关地址> dev <网络接口> [选项]
- 目标网络:指定需要路由的目标网络地址,格式为
IP地址/子网掩码长度(如168.2.0/24)。 - 网关地址:数据包转发到的下一跳路由器IP地址。
- 网络接口:数据包发送出所经过的网络接口名称(如
eth0、wlan0)。 - 选项:可选参数,如
metric(路由优先级)、src(源IP地址)、table(路由表名称)等。
添加一条到目标网络168.2.0/24的路由,通过网关168.1.1从eth0接口发送:
sudo ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
静态路由配置详解
静态路由是手动配置的路由条目,适用于网络结构简单、路由固定不变的场景,以下是静态路由配置的常见场景和操作:
添加默认路由
默认路由用于匹配所有未明确指定路由的目标地址,通常指向网关。

sudo ip route add default via 192.168.1.1 dev eth0
这条命令表示所有未知网络的数据包都将通过168.1.1从eth0接口发送。
添加特定网络路由
当需要为特定子网指定路由时,可直接使用目标网络地址,为0.0.0/8网络添加路由:
sudo ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
使用metric选项管理路由优先级
当存在多个网关时,可通过metric值设置路由优先级(值越小优先级越高)。
sudo ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0 metric 100 sudo ip route add 0.0.0.0/0 via 192.168.1.2 dev eth1 metric 200
系统优先使用metric为100的路由(即通过168.1.1的网关)。

添加直连路由
若目标网络直接连接到某个接口,无需通过网关,可使用dev参数直接指定接口。
sudo ip route add 172.16.0.0/16 dev eth0
路由的查看与验证
添加路由后,需验证配置是否生效,使用ip route show或ip route命令查看当前路由表:
ip route show
输出示例:
default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
192.168.2.0/24 via 192.168.1.1 dev eth0 proto static
10.0.0.0/8 via 192.168.1.254 dev eth0 proto static
可通过ping或traceroute测试网络连通性。
ping 192.168.2.1 traceroute 192.168.2.1
路由的持久化配置
临时添加的路由在系统重启后会失效,要实现持久化,需根据Linux发行版选择不同方法:
基于Debian/Ubuntu的系统
编辑/etc/network/interfaces文件,添加以下内容:
up ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0
或使用netplan(Ubuntu 18.04+),在配置文件中添加:
routes:
- to: 192.168.2.0/24
via: 192.168.1.1
on-link: true
基于RHEL/CentOS的系统
编辑/etc/sysconfig/network-scripts/route-eth0文件(假设为eth0接口):
168.2.0/24 via 192.168.1.1 dev eth0
使用systemd网络d配置文件(通用方法)
在/etc/systemd/network/目录下创建.network文件,例如10-static-route.network:
[Route] Destination=192.168.2.0/24 Gateway=192.168.1.1
然后重启网络服务:
sudo systemctl restart systemd-networkd
高级路由配置
多路径路由(ECMP)
通过添加相同目标网络但不同网关的路由,实现等成本多路径负载均衡。
sudo ip route add 192.168.3.0/24 via 192.168.1.1 dev eth0 metric 100 sudo ip route add 192.168.3.0/24 via 192.168.1.2 dev eth1 metric 100
基于策略的路由(Policy Routing)
通过ip rule和ip route结合,根据数据包源地址、协议等条件选择路由表。
# 创建自定义路由表 echo "200 custom_table" >> /etc/iproute2/rt_tables # 添加路由规则 sudo ip rule add from 10.0.0.100 table custom_table # 为自定义表添加路由 sudo ip route add default via 192.168.1.10 dev eth0 table custom_table
常见问题与解决方案
路由添加失败,提示“RTNETLINK answers: Network is unreachable”
可能原因:网关地址不可达或网络接口未启用,解决方案:
- 检查网关IP是否正确且可达:
ping 192.168.1.1 - 确认接口状态:
ip link show eth0
路由添加后,ping目标网络仍失败
可能原因:防火墙拦截或目标网络配置错误,解决方案:
- 检查防火墙规则:
sudo iptables -L - 验证目标网络连通性:
traceroute 192.168.2.1
相关问答FAQs
问题1:如何删除已添加的路由?
解答:使用ip route del命令,语法与添加类似,删除目标网络为168.2.0/24的路由:
sudo ip route del 192.168.2.0/24 via 192.168.1.1 dev eth0
若删除默认路由,则使用:
sudo ip route del default
问题2:如何查看特定接口的路由信息?
解答:通过ip route show dev <接口名>命令查看指定接口的路由条目,查看eth0接口的路由:
ip route show dev eth0
输出将仅包含通过eth0接口的路由信息,便于排查接口相关的路由问题。
