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

linux如何配置路由

在 Linux 中,可通过 ip 命令配置路由,如 `ip route add default via dev

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

常见问题排查

诊断工具链

  1. 基础检查ip a确认接口状态 → ip r查看路由表 → ping测试连通性
  2. 深度分析tcpdump -i <接口>抓包验证数据流向 → journalctl -u NetworkManager查看日志
  3. 硬件校验ethtool <接口>检查网卡协商速率 → dmesg | grep -i net查看驱动报错

典型错误及解决方案

现象 可能原因 解决方法
路由添加失败 权限不足/网关不可达 su root执行;检查网关ARP响应
跨VLAN通信异常 VLAN标签未正确传递 确保trunk端口配置正确
策略路由不生效 规则顺序错误/路由表未激活 使用ip rule show检查规则优先级
重启后路由丢失 未做持久化配置 根据发行版修改配置文件

相关问答FAQs

Q1: 为什么我添加的静态路由没有生效?

A: 常见原因及排查步骤:

  1. 权限问题:普通用户无法修改路由表,必须使用sudosu root执行命令。
  2. 网关不可达:执行arp -a查看网关MAC地址是否存在,若不存在则尝试ping网关IP。
  3. 路由冲突:使用ip route show检查是否存在相同目标网络的其他路由,若有则先删除旧路由。
  4. 接口状态:确认ip link show中对应接口处于UP状态。
  5. 防火墙拦截:执行iptables -L -v -n检查FORWARD链是否放行相关流量。

Q2: 如何实现Linux服务器的多线路负载均衡?

A: 推荐两种方案:

  1. 等价多路径(ECMP)

    # 同时添加两条默认路由,内核会自动分担流量
    ip route add default via gw1 dev eth0 metric 100
    ip route add default via gw2 dev eth1 metric 100

    优点:配置简单,适合对称流量场景;缺点:无法精细控制流量比例。

  2. 基于策略的负载均衡

    # 创建两个路由表
    echo "100 table1" >> /etc/iproute2/rt_tables
    echo "200 table2" >> /etc/iproute2/rt_tables
    # 添加规则按比例分配流量
    ip rule add fwmark 1 table table1 priority 100
    ip rule add fwmark 2 table table2 priority 200
    # 配置各路由表的具体路径
    ip route add default via gw1 dev eth0 table table1
    ip route add default via gw2 dev eth1 table table2
    # 配合iptables标记流量(示例:奇偶包分离)
    iptables -t mangle -A POSTROUTING -p tcp --sport http -m hash --hash-size 2 --hash-mode nth --divisor 2 --parity odd -j CONNMARK --set-mark 1
    iptables -t mangle -A POSTROUTING -p tcp --sport http -m hash --hash-size 2 --hash-mode nth --divisor 2 --parity even -j CONNMARK --set-mark 2

    优点:可精确控制流量分配策略;缺点:配置复杂,需熟悉NFQUEUE机制

0