当前位置:首页 > Linux > 正文

linux 如何增加路由

在 Linux 中,可通过 ip route add / via 命令手动添加静态路由

在Linux系统中,增加路由是网络管理的核心操作之一,适用于跨网段通信、多出口负载均衡、故障转移等场景,本文将从基础原理、实操命令、持久化配置、典型场景及常见问题五个维度展开详解,并提供完整示例与对比表格。


核心概念解析

1 路由表本质

Linux内核通过/proc/net/route维护路由表,存储目的IP地址与输出接口/网关的映射关系,当数据包到达时,内核会根据最长前缀匹配原则选择最优路径。

2 关键要素分类

要素类型 作用说明 典型取值范围
目标网络 指定该路由适用的目的地址范围 168.2.0/24
子网掩码 定义目标网络的有效位数 255.255.0
网关IP 下一跳设备的IP地址 168.1.1
度量值(Metric) 路径优先级数值(越小越优先) 1~100
接口名称 数据包离开的物理/虚拟接口 eth0, ens33, bond0

临时路由配置(立即生效)

1 使用ip命令(推荐)

现代Linux发行版统一采用ip命令管理路由,语法格式如下:

# 添加静态路由(无网关)
sudo ip route add <目标网络>/<子网掩码> dev <接口名>
# 添加带网关的路由
sudo ip route add <目标网络>/<子网掩码> via <网关IP> dev <接口名>
# 添加特定源地址的路由(策略路由)
sudo ip route add <目标网络>/<子网掩码> via <网关IP> dev <接口名> src <源IP>

示例1:将192.168.2.0/24网段的流量导向eth1接口

sudo ip route add 192.168.2.0/24 dev eth1

示例2:通过网关10.0.0.1访问172.16.0.0/16网段

sudo ip route add 172.16.0.0/16 via 10.0.0.1 dev eth0

2 传统route命令(兼容旧版)

部分老旧系统仍支持route命令,但已被标记为过时:

# 添加路由
sudo route add -net 192.168.3.0/24 gw 192.168.1.1 dev eth0
# 删除路由
sudo route del -net 192.168.3.0/24

3 实时验证方法

# 查看完整路由表
ip route show
# 或简写形式
ip r
# 查看特定路由条目
ip route get 192.168.2.5

持久化路由配置

1 NetworkManager图形化配置(桌面版)

  1. 打开「设置」→「网络」→选择对应连接→点击「齿轮」图标
  2. 进入「IPv4设置」→切换至「手动」模式
  3. 点击「+」添加新路由,填写目标网络、子网掩码、网关和接口
  4. 保存配置后重启网络服务生效

2 配置文件直接编辑(服务器版)

不同发行版采用不同的网络管理方案:

发行版 配置文件路径 配置方式
CentOS/RHEL /etc/sysconfig/network-scripts/route-<接口名> 追加<目标网络>/<掩码> via <网关>
Debian/Ubuntu /etc/network/interfaces iface块中添加post-up命令
openSUSE /etc/sysconfig/network/ifcfg-<接口名> 新增ROUTE_ADD参数
Netplan(Ubuntu Server) /etc/netplan/.yaml routes数组中定义新路由

Netplan配置示例

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.10/24]
      routes:
        to: 192.168.2.0/24
          via: 192.168.1.1
          metric: 100

3 systemd服务管理

若需通过服务启动时应用路由,可在/etc/systemd/system/创建自定义服务单元文件,并在[Service]段添加ExecStartPre=/usr/bin/ip ...命令。


高级应用场景

1 策略路由(Policy Routing)

通过标记数据包实现流量分流:

# 创建TC类ID 105的规则链
sudo ip rule add fwmark 105 table 105
# 创建自定义路由表105
echo "105 custom_table" | sudo tee /etc/iproute2/rt_tables
sudo ip route add default via 192.168.1.2 dev eth0 table 105
# 配合iptables做流量分流
sudo iptables -t mangle -A POSTROUTING -j CONNMARK --set-mark 105 -m comment --comment "Mark for backup gateway"

2 浮动静态路由(Floating Static Routes)

实现主备线路自动切换:

# 主路由(低metric)
sudo ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0 metric 100
# 备路由(高metric)
sudo ip route add 0.0.0.0/0 via 192.168.1.2 dev eth1 metric 200

当主网关不可达时,内核会自动切换至备路由。


常见错误排查

现象 可能原因 解决方案
路由未出现在ip r输出中 命令拼写错误/权限不足 检查sudo权限,确认命令语法
数据包仍走原路径 路由metric值设置不当 调整metric值使新路由更优
网关不可达 网关IP不属于任何接口 检查网关可达性(ping测试)
跨网段访问失败 缺少反向路由 在对方设备添加回程路由

相关问答FAQs

Q1: 如何删除已添加的静态路由?

A: 根据添加方式选择对应命令:

  • ip命令添加的路由:sudo ip route del <目标网络>/<子网掩码>
  • route命令添加的路由:sudo route del -net <目标网络>/<子网掩码>
  • 持久化配置需删除对应配置文件中的路由条目,并重启网络服务。

Q2: 为什么添加了路由但无法连通?

A: 常见原因及解决步骤:

  1. 网关可达性:执行ping <网关IP>验证网关是否正常响应,若不可达,检查网关设备状态或中间路由。
  2. 反向路由缺失:目标网络的设备需要有指向本机的回程路由,可通过traceroute定位断点。
  3. 防火墙拦截:检查iptablesfirewalld规则,确保允许相关流量通过。
  4. ARP缓存问题:尝试清空ARP缓存sudo ip neigh flush all后重试。
  5. MTU不匹配:使用ping -M do -s <数据包大小> <目标IP>测试最大传输单元
0