在Linux系统中,路由表是内核转发数据包的核心依据,它记录了目标网络与下一跳网关、出接口等信息的映射关系,正确配置路由表能实现跨网段通信、负载均衡、多出口策略等功能,本文将详细介绍Linux系统中添加路由表的方法,包括临时配置、永久配置及高级策略路由。
理解Linux路由表基础
Linux系统默认维护多个路由表,可通过ip route show table <table_id>
查看,其中最常用的是main
表(默认路由表)和local
表(本地路由),添加路由时,若未指定表名,默认会写入main
表,路由条目通常包含目标网络、子网掩码、下一跳网关、出接口、源IP(可选)及度量值(metric,决定优先级)。
查看当前路由表使用命令:
ip route show # 查看main表 route -n # 传统命令,显示路由表(无DNS解析)
临时添加路由(重启失效)
临时路由适合测试或短期使用,系统重启后会丢失,核心命令为ip route add
,语法如下:
ip route add <目标网络>/<子网掩码> via <网关IP> dev <出接口> src <源IP> metric <度量值>
常见场景示例
-
添加默认路由(所有未知流量指向网关)
ip route add 0.0.0.0/0 via 192.168.1.1 dev eth0
-
添加特定网络路由(如访问10.0.0.0/8网段)
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
-
添加直连路由(目标网络与当前接口在同一网段,无需网关)
ip route add 192.168.2.0/24 dev eth0
-
指定源IP的路由(多网卡场景下强制从某接口出站)
ip route add 172.16.0.0/16 via 10.0.0.1 dev eth1 src 10.0.0.2
常用参数说明
参数 | 说明 | 示例 |
---|---|---|
via |
下一跳网关IP | via 192.168.1.1 |
dev |
出接口名称(如eth0、ens33) | dev eth0 |
src |
出源IP(多网卡时指定) | src 10.0.0.2 |
metric |
路由优先级(值越小越优先) | metric 100 |
table |
指定路由表(如table 100 ) |
table custom |
删除临时路由
ip route del <目标网络>/<子网掩码> via <网关IP> dev <出接口>
永久添加路由(开机自启)
临时路由无法满足生产环境需求,需通过配置文件实现持久化,不同Linux发行版的配置方式差异较大,需区分处理。
RedHat/CentOS系统(NetworkManager)
以eth0
接口为例,编辑路由配置文件:
vi /etc/sysconfig/network-scripts/route-eth0 ```格式为每行一条路由,支持`netmask`和`gateway`:
默认路由
0.0.0/0 via 192.168.1.1 dev eth0
特定网络路由
0.0.0/8 via 192.168.1.254 dev eth0
192.168.2.0/24 dev eth0
保存后重启NetworkManager或接口使配置生效:
```bash
nmcli con reload eth0 && nmcli con up eth0
Debian/Ubuntu系统(ifupdown)
编辑/etc/network/interfaces
文件,在接口配置块中添加up ip route add
命令:
auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 # 添加永久路由 up ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0 up ip route add 172.16.0.0/16 dev eth0
保存后重启网络服务:
systemctl restart networking
Ubuntu 18.04+系统(Netplan)
若使用Netplan(如Ubuntu Server),在YAML配置文件中添加路由:
network: version: 2 ethernets: eth0: addresses: [192.168.1.100/24] gateway4: 192.168.1.1 routes: - to: 10.0.0.0/8 via: 192.168.1.254 - to: 172.16.0.0/16 via: "" # 直连路由,无需网关 nameservers: addresses: [8.8.8.8]
应用配置:
netplan apply
高级路由:策略路由(Policy Routing)
当需要基于源IP、目的端口等条件选择不同路由表时,可使用策略路由,核心是ip rule
和ip route
配合:
-
创建自定义路由表(如
table 100
)
编辑/etc/iproute2/rt_tables
,添加表名与ID的映射:100 custom_table
-
向自定义表添加路由
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0 table custom_table
-
添加策略规则(如源IP为10.0.0.2的流量走
custom_table
)ip rule add from 10.0.0.2 table custom_table
-
查看策略规则
ip rule show
验证与故障排查
添加路由后,需验证配置是否生效:
ip route show # 查看main表路由 ip route show table 100 # 查看自定义表路由 ping 10.0.0.1 # 测试目标网络连通性 traceroute 10.0.0.1 # 跟踪数据包路径
常见问题:
- 路由未生效:检查
dev
和via
是否正确,确认接口已UP(ip link show eth0
)。 - 多路由冲突:通过
metric
调整优先级,确保目标网络匹配时选择最优路由。
相关问答FAQs
Q1:如何永久添加静态路由并使其在开机后自动加载?
A:根据系统类型选择配置文件:
- RedHat/CentOS:在
/etc/sysconfig/network-scripts/route-<接口名>
中添加路由条目(如0.0.0/0 via 192.168.1.1 dev eth0
),然后重启NetworkManager或接口。 - Debian/Ubuntu:在
/etc/network/interfaces
中通过up ip route add
命令添加,重启网络服务(systemctl restart networking
)。 - Ubuntu 18.04+(Netplan):在YAML配置文件的
routes
字段中定义,执行netplan apply
。
Q2:添加路由后无法通信,可能的原因及排查方法?
A:可能原因及排查步骤:
- 网关不可达:检查网关IP是否正确,
ping
网关确认网络连通性(如ping 192.168.1.1
)。 - 出接口错误:确认
dev
参数与实际接口一致(ip link show
查看接口状态)。 - 路由冲突:使用
ip route show
检查是否存在重复或冲突的路由条目,通过metric
调整优先级。 - 防火墙拦截:检查
iptables
或firewalld
规则,允许目标端口的流量通过(如sudo firewall-cmd --add-port=80/tcp --permanent
)。 - 源IP不匹配:若指定了
src
参数,确保源IP在接口IP范围内(ip addr show eth0
查看接口IP)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/29116.html