上一篇
linux如何配置路由
- Linux
- 2025-08-14
- 1
在 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
常见问题排查
诊断工具链
- 基础检查:
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):
# 同时添加两条默认路由,内核会自动分担流量 ip route add default via gw1 dev eth0 metric 100 ip route add default via gw2 dev eth1 metric 100
优点:配置简单,适合对称流量场景;缺点:无法精细控制流量比例。
-
基于策略的负载均衡:
# 创建两个路由表 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机制