在Linux系统中,路由表是网络通信的核心,它决定了数据包的转发路径,正确配置路由可以确保跨网段通信、实现负载均衡或指定特定出口,本文将详细介绍Linux下添加路由的方法,包括临时路由和永久路由的配置,涵盖不同发行版的操作差异,并通过表格对比关键参数,最后解答常见问题。
临时路由添加(重启失效)
临时路由适用于测试场景或临时需求,重启系统或网络服务后配置会丢失,主要使用ip route add
命令(推荐,现代Linux发行版默认)或route
命令(传统工具,逐渐被替代)。
使用ip route add
命令
基本语法为:sudo ip route add <目标网络/子网掩码> via <网关地址> dev <网络接口> [metric <跃点数>] [table <路由表>]
- 目标网络/子网掩码:要到达的网络,如
168.2.0/24
(表示目标网段为192.168.2.0,子网掩码255.255.255.0)。 - via <网关地址>:下一跳路由器的IP,如
168.1.1
。 - dev <网络接口>:出站网络接口,如
eth0
、ens33
,可通过ip a
查看。 - metric <跃点数>:路由优先级,值越小优先级越高,默认0。
- table <路由表>:指定路由表(默认为
main
),用于策略路由。
示例:
- 添加默认路由(所有未知网段流量通过网关10.0.0.1):
sudo ip route add default via 10.0.0.1 dev eth0
- 添加特定网段路由(目标192.168.3.0/24通过网关192.168.1.254,接口ens33,跃点数100):
sudo ip route add 192.168.3.0/24 via 192.168.1.254 dev ens33 metric 100
- 添加主机路由(仅目标主机192.168.1.100通过网关192.168.1.1):
sudo ip route add 192.168.1.100/32 via 192.168.1.1 dev eth0
使用route
命令(传统工具)
语法为:sudo route add -net <目标网络> netmask <子网掩码> gw <网关地址> dev <网络接口>
示例:sudo route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
临时路由的删除与查看
- 查看路由表:
ip route show
或route -n
(-n
表示以数字形式显示,避免DNS解析延迟)。 - 删除路由:
sudo ip route del <目标网络/子网掩码>
,如sudo ip route del 192.168.3.0/24
。
永久路由添加(重启生效)
临时路由无法满足长期需求,需通过修改配置文件实现永久保存,不同Linux发行版的配置方式差异较大,主要分为systemd-networkd
、Netplan
(Ubuntu/Debian)和NetworkManager
(CentOS/RHEL)等。
Ubuntu/Debian(Netplan配置,较新版本)
Netplan使用YAML配置文件,通常位于/etc/netplan/
目录下(如01-netcfg.yaml
)。
步骤:
- 编辑配置文件:
sudo nano /etc/netplan/01-netcfg.yaml
。 - 添加路由配置,示例如下:
network: version: 2 ethernets: eth0: dhcp4: no addresses: [192.168.1.10/24] # 本机IP gateway4: 192.168.1.1 # 默认网关 routes: - to: 192.168.2.0/24 # 目标网段 via: 192.168.1.254 # 下一跳网关 metric: 100 # 优先级 - to: 10.0.0.0/8 # 另一个目标网段 via: 192.168.1.254 metric: 150 nameservers: addresses: [8.8.8.8, 114.114.114.114]
- 应用配置:
sudo netplan apply
。
CentOS/RHEL(NetworkManager配置)
NetworkManager通过nmcli
命令或配置文件管理路由。
方法1:使用nmcli
命令
# 添加静态路由(目标192.168.3.0/24,网关192.168.1.254,接口eth0,跃点数100) sudo nmcli connection modify "eth0" +ipv4.routes "192.168.3.0/24 192.168.1.254 100" # 激活配置(无需重启,立即生效) sudo nmcli connection up "eth0"
方法2:修改NetworkManager配置文件
编辑/etc/sysconfig/network-scripts/route-<接口名>
(如route-eth0
),添加:
ADDRESS0=192.168.3.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.1.254
METRIC0=100
重启网络服务:sudo systemctl restart network
。
通用方法(直接修改路由表配置文件)
部分系统可通过修改/etc/rc.local
(需赋予执行权限)或创建/etc/network/if-up.d/
下的脚本实现开机自动添加路由,但不如上述方法稳定,不推荐。
关键参数对比与示例
下表总结了不同场景下路由配置的核心参数及示例:
场景 | 命令/配置 | 说明 |
---|---|---|
添加默认路由 | sudo ip route add default via 10.0.0.1 dev eth0 |
所有未知网段流量通过10.0.0.1 |
添加特定网段路由 | sudo ip route add 192.168.2.0/24 via 192.168.1.254 dev ens33 |
目标192.168.2.0/24的流量通过192.168.1.254 |
添加主机路由 | sudo ip route add 192.168.1.100/32 via 192.168.1.1 dev eth0 |
仅目标主机192.168.1.100的流量通过192.168.1.1 |
永久路由(Ubuntu) | routes: - to: 192.168.3.0/24 via: 192.168.1.254 metric: 100 (Netplan) |
写入Netplan配置文件,重启生效 |
永久路由(CentOS) | nmcli connection modify "eth0" +ipv4.routes "192.168.3.0/24 192.168.1.254" |
使用NetworkManager管理,无需重启网络服务 |
相关问答FAQs
Q1:为什么添加的路由重启后消失了?
A:临时路由(通过ip route add
添加)仅在当前会话中生效,重启系统或网络服务后会丢失,要实现永久生效,需根据发行版修改对应配置文件(如Ubuntu的Netplan、CentOS的NetworkManager),或使用nmcli
等工具保存配置。
Q2:如何添加一条到达特定主机(而不是网络)的路由?
A:添加主机路由时,需将目标地址的子网掩码设置为32
(IPv4)或128
(IPv6),表示精确匹配该主机IP,添加到主机168.1.100
的路由,命令为:sudo ip route add 192.168.1.100/32 via 192.168.1.1 dev eth0
,在Netplan配置中则写为to: 192.168.1.100/32
。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35004.html