上一篇
linux 如何增加路由
- Linux
- 2025-08-14
- 2
在 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图形化配置(桌面版)
- 打开「设置」→「网络」→选择对应连接→点击「齿轮」图标
- 进入「IPv4设置」→切换至「手动」模式
- 点击「+」添加新路由,填写目标网络、子网掩码、网关和接口
- 保存配置后重启网络服务生效
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: 常见原因及解决步骤:
- 网关可达性:执行
ping <网关IP>
验证网关是否正常响应,若不可达,检查网关设备状态或中间路由。 - 反向路由缺失:目标网络的设备需要有指向本机的回程路由,可通过
traceroute
定位断点。 - 防火墙拦截:检查
iptables
或firewalld
规则,确保允许相关流量通过。 - ARP缓存问题:尝试清空ARP缓存
sudo ip neigh flush all
后重试。 - MTU不匹配:使用
ping -M do -s <数据包大小> <目标IP>
测试最大传输单元