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

在Linux系统中,路由表是网络数据包转发的重要依据,它决定了数据包的传输路径,当需要让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 <网卡设备>

示例:

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:使用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):

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/interfaces或route-<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 rule和ip 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如何修改hostname?操作步骤与方法详解

    在Linux系统中,hostname(主机名)是用于标识网络中计算机的名称,它不仅影响本地系统的识别,还涉及网络通信、服务配置等多个方面,合理修改hostname有助于服务器管理、多环境区分及合规要求等场景,本文将详细介绍Linux系统中修改hostname的多种方法、适用场景及注意事项,帮助用户在不同发行版和……

    2025年9月15日
    22700
  • 为什么电脑竟禁止开机激活?

    使用 ip 命令(推荐现代方法)ip 命令是 ifconfig 的替代工具,支持所有主流发行版(Ubuntu/CentOS/Debian等),操作步骤:查看网卡名称:ip link show输出示例:enp0s3: <BROADCAST,MULTICAST,UP>…(网卡名如 enp0s3),禁……

    2025年8月5日
    27900
  • 如何快速替换Linux默认路由?

    在Linux系统中,网关是连接不同网络的关键节点,负责转发数据包,修改网关可能因网络配置变更、故障切换或优化需求而产生,以下是专业、安全且完整的操作指南,涵盖主流发行版和多种方法:临时修改网关(重启失效)使用 ip route 命令(推荐)sudo ip route replace default via &l……

    2025年7月23日
    30800
  • linux下如何用sqlload

    Linux 下,使用 sqlload 命令导入数据到数据库,基本语法为:`sqlload [选项]

    2025年8月14日
    23100
  • 虚拟机中linux如何全屏显示

    虚拟机中,可以通过安装VMware Tools或VirtualBox Guest Additions,然后重启虚拟机

    2025年8月17日
    22600

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信