linux如何配置路由
- Linux
- 2025-08-14
- 8
Linux路由基础概念
1 路由表本质
Linux内核维护着一张全局路由表(Routing Table),存储于/proc/net/route或通过ip route show查看,该表包含以下关键字段:
| 字段名 | 作用 | 示例值 |
|————–|——————————-|———————-|
| Destination | 目标网络地址 | 192.168.1.0/24 |
| Gateway | 下一跳网关IP | 192.168.1.1 |
| Genmask | 子网掩码 | 255.255.255.0 |
| Iface | 关联的网络接口 | eth0 |
| Flags | 路由标志(U/G/H等) | UG |
| Metric | 路由优先级(数值越小越优先) | 100 |
2 核心组件关系
- 内核模块:rtnetlink负责接收路由更新指令
- 用户态工具:ip命令(推荐)、route命令(兼容旧版)
- 守护进程:NetworkManager(桌面版)、systemd-networkd(部分发行版)
- 配置文件:/etc/network/interfaces(Debian系)、/etc/sysconfig/network-scripts/ifcfg-(RHEL系)
路由配置实战指南
1 临时性路由配置(立即生效但重启丢失)
基本语法
# 添加静态路由 ip route add <目标网络> via <网关IP> dev <网卡名> [metric <优先级>] # 示例:添加至10.0.0.0/8网络的路由,网关为192.168.1.1,优先级200 ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0 metric 200 # 删除路由 ip route del 10.0.0.0/8 # 修改现有路由(需先删除再添加) ip route replace 10.0.0.0/8 via 192.168.1.2 dev eth0 metric 300
️ 注意事项
- 必须具有root权限执行
- 网关IP必须在当前主机可达范围内
- 同一目标网络只能存在一条主路由(可通过policy-based routing实现多路径)
2 持久化路由配置(重启保留)
不同发行版采用不同机制:

| 发行版 | 配置文件路径 | 配置方法 | 生效命令 |
|---|---|---|---|
| Ubuntu/Debian | /etc/network/interfaces | 在接口段落中添加post-up脚本 | ifdown/up |
| CentOS/RHEL | /etc/sysconfig/network-scripts/route-<网卡名> | 新建文件并写入路由规则 | service network restart |
| openSUSE | /etc/sysconfig/network/ifcfg-<网卡名> | 添加ROUTES参数 | systemctl restart network |
通用持久化方案(适用于大多数发行版):
# 创建启动脚本 echo "ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0" > /etc/networkd-dispatcher/routable.d/myroute chmod +x /etc/networkd-dispatcher/routable.d/myroute
3 特殊路由类型配置
默认路由(Default Gateway)
# 添加默认路由(等同于0.0.0.0/0) ip route add default via 192.168.1.1 dev eth0 # 查看当前默认路由 ip route list match 0.0.0.0/0
多网关负载均衡(ECMP)
# 同时添加两个默认路由,实现流量分担 ip route add default via 192.168.1.1 dev eth0 metric 100 ip route add default via 192.168.1.2 dev eth1 metric 100
注:需确保两个网关均处于UP状态,且交换机支持LACP协议
策略路由(Policy-Based Routing)
# 创建自定义路由表(ID=100) echo "100 custom_table" >> /etc/iproute2/rt_tables # 添加规则:将来自192.168.2.0/24的流量导向新路由表 ip rule add from 192.168.2.0/24 table custom_table # 在新路由表中定义具体路径 ip route add default via 10.0.0.1 dev tun0 table custom_table
路由管理常用命令对照表
| 操作需求 | ip命令 | route命令 | 说明 |
|---|---|---|---|
| 显示所有路由 | ip route show | route -n | 推荐使用ip命令 |
| 添加静态路由 | ip route add ... | route add ... | ip命令更灵活 |
| 删除路由 | ip route del ... | route del ... | |
| 修改路由优先级 | ip route change ... metric X | route change ... metric X | 仅能调整已存在的路由 |
| 刷新ARP缓存 | ip neigh flush to X.X.X.X | arp -d X.X.X.X | 解决MAC地址冲突问题 |
| 跟踪路由路径 | tracepath X.X.X.X | traceroute X.X.X.X | tracepath显示更详细的跳数信息 |
典型配置案例
案例1:双网卡冗余备份
# 主路由(低优先级) ip route add default via 192.168.1.1 dev eth0 metric 50 # 备路由(高优先级) ip route add default via 192.168.1.2 dev eth1 metric 150 # 测试连通性 ping -c 3 www.baidu.com # 模拟主链路故障(断开eth0) ip link set dev eth0 down # 观察自动切换至备路由
案例2:VLAN间路由
# 创建VLAN接口 ip link add link eth0 name eth0.10 type vlan id 10 ip link set dev eth0.10 up # 配置VLAN路由 ip address add 192.168.10.1/24 dev eth0.10 ip route add 192.168.10.0/24 dev eth0.10
常见问题排查
诊断工具链
- 基础检查:ip a确认接口状态 → ip r查看路由表 → ping测试连通性
- 深度分析:tcpdump -i <接口>抓包验证数据流向 → journalctl -u NetworkManager查看日志
- 硬件校验:ethtool <接口>检查网卡协商速率 → dmesg | grep -i net查看驱动报错
典型错误及解决方案
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 路由添加失败 | 权限不足/网关不可达 | su root执行;检查网关ARP响应 |
| 跨VLAN通信异常 | VLAN标签未正确传递 | 确保trunk端口配置正确 |
| 策略路由不生效 | 规则顺序错误/路由表未激活 | 使用ip rule show检查规则优先级 |
| 重启后路由丢失 | 未做持久化配置 | 根据发行版修改配置文件 |
相关问答FAQs
Q1: 为什么我添加的静态路由没有生效?
A: 常见原因及排查步骤:

- 权限问题:普通用户无法修改路由表,必须使用sudo或su root执行命令。
- 网关不可达:执行arp -a查看网关MAC地址是否存在,若不存在则尝试ping网关IP。
- 路由冲突:使用ip route show检查是否存在相同目标网络的其他路由,若有则先删除旧路由。
- 接口状态:确认ip link show中对应接口处于UP状态。
- 防火墙拦截:执行iptables -L -v -n检查FORWARD链是否放行相关流量。
Q2: 如何实现Linux服务器的多线路负载均衡?
A: 推荐两种方案:
-
等价多路径(ECMP):

优点:配置简单,适合对称流量场景;缺点:无法精细控制流量比例。
-
基于策略的负载均衡:
优点:可精确控制流量分配策略;缺点:配置复杂,需熟悉NFQUEUE机制