在Linux系统中,路由表是网络数据包转发的重要依据,它决定了数据包的传输路径,当需要让Linux系统访问特定网络或通过特定网关通信时,就需要手动添加路由条目,本文将详细介绍Linux系统中添加临时路由和永久路由的方法,包括常用命令参数、不同发行版的配置差异及注意事项。

路由的基本概念
Linux路由表记录了目标网络与下一跳(网关)或输出设备的映射关系,当系统需要发送数据包时,会根据目标IP地址匹配路由表:若目标地址在直连网络范围内,则直接通过对应网卡发送;若不在,则根据路由表将数据包转发到指定的网关,由网关负责后续转发,查看当前路由表可使用ip route show或route -n命令(-n参数以数字形式显示,避免DNS解析延迟)。
添加临时路由(重启后失效)
临时路由适用于测试场景或短期需求,重启系统或网络服务后路由条目会自动消失,常用命令为ip route add和route add(route是传统工具,ip route是iproute2包的一部分,推荐使用后者)。
使用ip route add命令
基本语法:ip route add <目标网络> via <网关IP> dev <网卡设备> [src <源IP>] [metric <优先级>] [table <路由表>]
参数说明:
<目标网络>:目标网络地址,格式为IP/子网掩码长度(如168.2.0/24);via <网关IP>:下一跳网关地址(若目标网络为直连网络,可省略此项);dev <网卡设备>:输出网卡名称(如eth0、ens33);src <源IP>:可选,指定数据包的源IP地址(需为网卡已配置的IP);metric <优先级>:可选,路由优先级(值越小优先级越高,默认为0);table <路由表>:可选,指定路由表(默认为main,还可使用default、local等)。
示例:
- 添加一条到
168.2.0/24网段的路由,通过网关168.1.254,从网卡eth0发送:sudo ip route add 192.168.2.0/24 via 192.168.1.254 dev eth0
- 添加默认路由(所有未知流量通过指定网关):
sudo ip route add default via 192.168.1.1 dev eth0
- 添加带优先级的路由(当存在多个网关时,优先使用高优先级路由):
sudo ip route add 10.0.0.0/24 via 192.168.1.100 dev eth0 metric 100
删除临时路由:
使用ip route del命令,语法与add相同,只需将add替换为del:
sudo ip route del 192.168.2.0/24 via 192.168.1.254 dev eth0
使用route add命令(传统工具)
route命令在较旧的Linux系统中仍可用,但功能有限,不支持CIDR格式的子网掩码(需使用netmask参数)。
基本语法:route add [-net|-host] <目标地址> netmask <子网掩码> gw <网关IP> dev <网卡设备>
示例:

- 添加到
168.2.0网络(子网掩码255.255.0)的路由:sudo route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0
- 添加主机路由(目标为单个IP):
sudo route add -host 10.0.0.10 gw 192.168.1.100 dev eth0
添加永久路由(重启后生效)
临时路由无法满足长期需求,需通过修改配置文件实现永久路由,不同Linux发行版的配置文件位置和格式差异较大,需分别处理。
Debian/Ubuntu系统(使用/etc/network/interfaces)
在/etc/network/interfaces文件中,通过up指令在网卡启动后执行路由添加命令。
示例:
假设网卡为eth0,需添加到168.2.0/24的路由,网关为168.1.254,编辑文件:
sudo nano /etc/network/interfaces
在网卡配置块中添加up指令(需与网卡配置缩进对齐):
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
# 添加永久路由
up ip route add 192.168.2.0/24 via 192.168.1.254 dev eth0
保存后重启网络服务或重启系统:
sudo systemctl restart networking
CentOS/RHEL系统(使用/etc/sysconfig/network-scripts/route-<interface>)
CentOS/RHEL系统通过为每个网卡创建独立的路由配置文件实现,文件格式为/etc/sysconfig/network-scripts/route-<网卡名>。
方法1:使用ADDRESS、NETMASK、GATEWAY参数(传统格式)
创建文件/etc/sysconfig/network-scripts/route-eth0:
sudo nano /etc/sysconfig/network-scripts/route-eth0 ``` 每行一条路由): ```ADDRESS0=192.168.2.0 NETMASK0=255.255.255.0 GATEWAY0=192.168.1.254
ADDRESS0、NETMASK0、GATEWAY0中的数字0表示第一条路由,可依次添加1、2等配置多条路由。
方法2:使用ip route格式(推荐)
在route-eth0文件中直接写入ip route add命令(无需sudo):

168.2.0/24 via 192.168.1.254 dev eth0
保存后重启网络服务:
sudo systemctl restart network
使用systemd-networkd(现代Linux系统)
对于使用systemd-networkd的系统(如Ubuntu 18.04+、CentOS 8+),可通过创建.network文件配置路由。
示例:
创建文件/etc/systemd/network/10-eth0.network:
sudo nano /etc/systemd/network/10-eth0.network
添加路由配置(在[Route]段中定义):
Name=eth0
[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1
[Route]
Destination=192.168.2.0/24
Gateway=192.168.1.254
保存后重启systemd-networkd服务:
sudo systemctl restart systemd-networkd
不同发行版永久路由配置对比
| 发行版系列 | 配置文件位置 | 配置格式示例 | 重启命令 |
|---|---|---|---|
| Debian/Ubuntu | /etc/network/interfaces | up ip route add ... dev <iface> |
systemctl restart networking |
| CentOS/RHEL | /etc/sysconfig/network-scripts/route- | ADDRESS0=... NETMASK0=... GATEWAY0=... |
systemctl restart network |
| systemd-networkd | /etc/systemd/network/ |
[Route] Destination=... Gateway=... |
systemctl restart systemd-networkd |
注意事项
- 权限问题:添加路由需root权限,使用
sudo执行命令; - 网关可达性:网关IP必须与当前网络直连(即在同一网段),否则路由无法生效;
- 设备状态:确保网卡已启用(
ip link show <dev>检查状态),未启用的设备无法添加路由; - 路由冲突:避免添加重复或冲突的路由(如同一目标网络通过不同网关添加多条路由),可通过
metric参数指定优先级; - 多网卡场景:在多网卡系统中,需明确指定
dev参数,避免数据包从错误网卡发出。
相关问答FAQs
Q1:添加永久路由后重启系统不生效,可能的原因是什么?
A:可能的原因包括:
- 配置文件语法错误:检查
/etc/network/interfaces或route-<iface>文件中的命令格式是否正确(如ip route add命令是否完整); - 网络服务未正确重启:某些系统(如CentOS 7+)需使用
systemctl restart network,而非service network restart; - 网卡名称变更:若网卡名称(如从
eth0变为ens33),需修改配置文件中的设备名称; - SELinux或防火墙拦截:检查SELinux状态(
sestatus)或防火墙规则(iptables -L),可能阻止路由配置生效。
Q2:如何添加一条基于策略的路由(Policy Route),实现根据源IP选择不同网关?
A:策略路由通过ip rule和ip route配合实现,步骤如下:
- 创建自定义路由表(如
table 100):echo "100 custom_table" >> /etc/iproute2/rt_tables
- 添加策略规则(如源IP为
168.1.10的流量使用custom_table):sudo ip rule add from 192.168.1.10 table custom_table
- 在自定义表中添加路由(如通过网关
168.1.100):sudo ip route add default via 192.168.1.100 dev eth0 table custom_table
- 保存配置(永久生效需将规则添加到网络配置文件或使用
iptables-persistent):- Debian/Ubuntu:在
/etc/network/interfaces中添加up ip rule add ...和up ip route add ... table ...; - CentOS/RHEL:在
/etc/sysconfig/network-scripts/rule-eth0中添加规则,格式为from <src> table <table>。
- Debian/Ubuntu:在
验证策略路由:
sudo ip route get from 192.168.1.10 to 8.8.8.8 # 应显示通过custom_table的路由
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/36576.html