Linux系统中如何添加一条永久有效的静态路由?

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

linux如何添加一条路由

路由的基本概念

Linux路由表记录了目标网络与下一跳(网关)或输出设备的映射关系,当系统需要发送数据包时,会根据目标IP地址匹配路由表:若目标地址在直连网络范围内,则直接通过对应网卡发送;若不在,则根据路由表将数据包转发到指定的网关,由网关负责后续转发,查看当前路由表可使用ip route showroute -n命令(-n参数以数字形式显示,避免DNS解析延迟)。

添加临时路由(重启后失效)

临时路由适用于测试场景或短期需求,重启系统或网络服务后路由条目会自动消失,常用命令为ip route addroute addroute是传统工具,ip route是iproute2包的一部分,推荐使用后者)。

使用ip route add命令

基本语法
ip route add <目标网络> via <网关IP> dev <网卡设备> [src <源IP>] [metric <优先级>] [table <路由表>]

参数说明

  • <目标网络>:目标网络地址,格式为IP/子网掩码长度(如168.2.0/24);
  • via <网关IP>:下一跳网关地址(若目标网络为直连网络,可省略此项);
  • dev <网卡设备>:输出网卡名称(如eth0ens33);
  • src <源IP>:可选,指定数据包的源IP地址(需为网卡已配置的IP);
  • metric <优先级>:可选,路由优先级(值越小优先级越高,默认为0);
  • table <路由表>:可选,指定路由表(默认为main,还可使用defaultlocal等)。

示例

  • 添加一条到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 <网卡设备>

示例

linux如何添加一条路由

  • 添加到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:使用ADDRESSNETMASKGATEWAY参数(传统格式)
创建文件/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

ADDRESS0NETMASK0GATEWAY0中的数字0表示第一条路由,可依次添加12等配置多条路由。

方法2:使用ip route格式(推荐)
route-eth0文件中直接写入ip route add命令(无需sudo):

linux如何添加一条路由

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/.network [Route] Destination=... Gateway=... systemctl restart systemd-networkd

注意事项

  1. 权限问题:添加路由需root权限,使用sudo执行命令;
  2. 网关可达性:网关IP必须与当前网络直连(即在同一网段),否则路由无法生效;
  3. 设备状态:确保网卡已启用(ip link show <dev>检查状态),未启用的设备无法添加路由;
  4. 路由冲突:避免添加重复或冲突的路由(如同一目标网络通过不同网关添加多条路由),可通过metric参数指定优先级;
  5. 多网卡场景:在多网卡系统中,需明确指定dev参数,避免数据包从错误网卡发出。

相关问答FAQs

Q1:添加永久路由后重启系统不生效,可能的原因是什么?
A:可能的原因包括:

  1. 配置文件语法错误:检查/etc/network/interfacesroute-<iface>文件中的命令格式是否正确(如ip route add命令是否完整);
  2. 网络服务未正确重启:某些系统(如CentOS 7+)需使用systemctl restart network,而非service network restart
  3. 网卡名称变更:若网卡名称(如从eth0变为ens33),需修改配置文件中的设备名称;
  4. SELinux或防火墙拦截:检查SELinux状态(sestatus)或防火墙规则(iptables -L),可能阻止路由配置生效。

Q2:如何添加一条基于策略的路由(Policy Route),实现根据源IP选择不同网关?
A:策略路由通过ip ruleip route配合实现,步骤如下:

  1. 创建自定义路由表(如table 100):
    echo "100 custom_table" >> /etc/iproute2/rt_tables
  2. 添加策略规则(如源IP为168.1.10的流量使用custom_table):
    sudo ip rule add from 192.168.1.10 table custom_table
  3. 在自定义表中添加路由(如通过网关168.1.100):
    sudo ip route add default via 192.168.1.100 dev eth0 table custom_table
  4. 保存配置(永久生效需将规则添加到网络配置文件或使用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>

验证策略路由:

sudo ip route get from 192.168.1.10 to 8.8.8.8  # 应显示通过custom_table的路由

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/36576.html

(0)
酷番叔酷番叔
上一篇 2025年10月5日 20:46
下一篇 2025年10月5日 20:57

相关推荐

  • Linux云主机如何远程登录进入系统?

    进入Linux云主机是日常运维和管理的核心操作,常见方式包括SSH远程连接、云服务商控制台Web连接以及VNC图形界面连接,具体操作需根据使用场景和工具选择,以下是详细步骤和注意事项,SSH连接是最主流的方式,适用于命令行操作,支持加密传输,确保数据安全,准备工作包括获取云主机的公网IP地址、登录用户名(如ro……

    2025年9月9日
    2900
  • 如何查看Linux网卡的MAC地址?

    在Linux系统中,MAC地址(Media Access Control Address)是网卡的物理地址,由48位二进制数组成,通常以十六进制格式表示(如00:1A:2B:3C:4D:5E),用于在网络中唯一标识网卡设备,查看MAC地址是网络配置、故障排查或安全认证时的常见需求,本文将详细介绍多种查看Linu……

    2025年9月20日
    1800
  • 如何在Linux上运行程序?详细步骤与方法解析

    Linux作为开源操作系统,提供了灵活多样的程序运行方式,涵盖从简单的可执行文件到复杂的服务和容器化应用,以下是几种常见的运行场景及具体操作步骤,帮助用户高效在Linux上运行各类程序,对于直接下载的二进制可执行文件(如某些开源工具的预编译版本),首先需要确保文件具有执行权限,通过终端进入文件所在目录,使用ch……

    2025年8月28日
    3300
  • Linux环境下挂载ISO文件的详细操作步骤是什么?

    在Linux系统中,挂载ISO文件(光盘镜像文件)是一种常见操作,可通过虚拟光驱方式访问镜像内容,无需物理光盘,以下是详细操作步骤及注意事项,适用于主流Linux发行版(如Ubuntu、CentOS等),挂载ISO文件的准备工作确认ISO文件路径首先确保ISO文件已存在于系统中,可通过ls命令查看,例如/hom……

    2025年8月28日
    3600
  • Linux服务安装成功的正确步骤是什么?

    在Linux系统中,服务的安装与管理是系统运维的核心任务之一,所谓“服务安装成功”,通常指将应用程序或系统功能配置为系统服务,使其能够通过systemd等服务管理工具统一控制(如启动、停止、重启、开机自启等),并确保服务进程稳定运行、资源合理分配,本文将详细说明Linux服务安装的完整流程、关键配置及验证方法……

    2025年10月5日
    1000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信