在Linux系统中,路由表是网络数据包转发的基础,它决定了数据包应该从哪个接口发送到哪个目标网络,正确配置路由对于多网络环境、服务器网关设置或特定网络策略至关重要,本文将详细介绍Linux系统中添加路由的多种方法,包括临时路由和永久路由的配置,并针对常见场景提供示例。
Linux路由基础与临时路由添加
Linux系统中的路由表可通过ip route
命令(推荐)或传统的route
命令查看和管理,临时添加的路由在系统重启后会失效,适用于测试或临时网络调整。
使用ip route
命令添加临时路由
ip route
是iproute2
工具包中的命令,功能更强大且是当前主流方案,基本语法为:ip route add <目标网络> via <网关地址> dev <网络接口> [src <源IP>] [metric <优先级>]
- 目标网络:要到达的子网,如
168.2.0/24
;若为默认路由,则用default
或0.0.0/0
。 - 网关地址:下一跳路由器的IP地址,需与本地网络可达。
- 网络接口:本地网络接口,如
eth0
、ens33
等。 - src:可选,指定数据包的源IP(多网卡场景下用于选择出口)。
- metric:可选,路由优先级(值越小优先级越高,默认为1024)。
示例:
- 添加默认路由:
sudo ip route add default via 192.168.1.1 dev eth0
- 添加静态路由到目标网络
168.3.0/24
,网关为168.1.254
:sudo ip route add 192.168.3.0/24 via 192.168.1.254 dev eth0
- 添加带源IP和优先级的路由:
sudo ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0 src 192.168.1.100 metric 100
使用route
命令添加临时路由(传统方法)
route
命令逐渐被ip route
替代,但在旧系统中仍可用:sudo route add -net <目标网络> netmask <子网掩码> gw <网关地址> dev <接口>
示例:sudo route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
临时路由的验证与删除
- 查看路由表:
ip route show
或route -n
(-n
表示以数字形式显示,避免DNS解析延迟)。 - 删除临时路由:
sudo ip route del <目标网络> via <网关> dev <接口>
,例如sudo ip route del default via 192.168.1.1 dev eth0
。
永久路由配置
临时路由在重启后失效,若需持久化保存,需根据Linux发行版修改配置文件。
基于Debian/Ubuntu系统的永久路由配置
在Debian/Ubuntu中,可通过修改/etc/network/interfaces
文件添加路由,为eth0
接口添加静态路由:
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 192.168.3.0/24 via 192.168.1.254 dev eth0 # 添加默认路由(若需覆盖默认网关) # up ip route add default via 192.168.1.1 dev eth0
配置完成后,重启网络服务或重启系统:sudo systemctl restart networking
。
基于CentOS/RHEL系统的永久路由配置
在CentOS/RHEL 7及以上版本,可通过nmcli
(NetworkManager命令行工具)或配置路由文件实现。
-
方法1:使用
nmcli
(推荐,适用于NetworkManager管理的网络):# 添加静态路由(关联到eth0连接) sudo nmcli connection modify eth0 +ipv4.routes "192.168.3.0/24 192.168.1.254" # 添加默认路由(若需修改) sudo nmcli connection modify eth0 ipv4.gateway 192.168.1.1 # 激活配置 sudo nmcli connection up eth0
-
方法2:创建路由配置文件(适用于传统网络配置):
在/etc/sysconfig/network-scripts/
目录下创建route-<接口名>
文件,如route-eth0
:# route-eth0文件内容 ADDRESS0=192.168.3.0 NETMASK0=255.255.255.0 GATEWAY0=192.168.1.254
重启网络服务:
sudo systemctl restart network
。
多路由表与策略路由(进阶场景)
当需要根据源IP选择不同路由时,可配置策略路由(Policy Routing),为168.1.100
的流量单独设置路由表:
-
创建自定义路由表(编辑
/etc/iproute2/rt_tables
):echo "custom_table 100" >> /etc/iproute2/rt_tables
-
添加路由到自定义表:
sudo ip route add 192.168.3.0/24 via 192.168.1.254 dev eth0 table custom_table
-
添加策略规则(匹配源IP并使用自定义表):
sudo ip rule add from 192.168.1.100 lookup custom_table
配置完成后,可通过ip rule show
和ip route show table custom_table
验证。
常用ip route
命令参数与示例
以下为ip route
命令的核心参数及示例总结:
参数/选项 | 说明 | 示例 |
---|---|---|
add |
添加路由 | ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0 |
del |
删除路由 | ip route del 10.0.0.0/24 dev eth0 |
default |
默认路由(0.0.0.0/0) | ip route add default via 192.168.1.1 |
via <网关> |
指定下一跳地址 | ip route add 192.168.2.0/24 via 192.168.1.254 |
dev <接口> |
指定出口网络接口 | ip route add 192.168.3.0/24 dev eth0 (直连路由) |
src <源IP> |
指定数据包源IP | ip route add 10.0.0.0/24 via 192.168.1.1 src 192.168.1.100 |
metric <数值> |
设置路由优先级(默认1024) | ip route add 192.168.4.0/24 via 192.168.1.1 metric 50 |
table <表名> |
指定路由表(策略路由) | ip route add 192.168.5.0/24 via 192.168.1.1 table custom |
相关问答FAQs
问题1:添加的路由不生效,如何排查?
解答:
- 检查路由是否正确添加:
ip route show | grep <目标网络>
。 - 确认网关可达性:
ping <网关地址>
,若不通,检查网关配置或网络连通性。 - 检查接口状态:
ip link show <接口>
,确保接口为UP
状态。 - 检查防火墙规则:
sudo iptables -L
或sudo firewall-cmd --list-all
,防止防火墙拦截。 - 若为多网卡,确认源IP是否匹配路由配置(可通过
src
参数指定)。
问题2:如何永久删除已添加的静态路由?
解答:
- Debian/Ubuntu:编辑
/etc/network/interfaces
文件,删除up ip route add...
行,然后重启网络服务:sudo systemctl restart networking
。 - CentOS/RHEL(nmcli):使用
nmcli connection modify <接口名> -ipv4.routes "<目标网络>/<掩码> <网关>"
移除路由,并重启连接:sudo nmcli connection up <接口名>
。 - 传统CentOS/RHEL:删除
/etc/sysconfig/network-scripts/route-<接口名>
文件中的路由条目,重启网络服务:sudo systemctl restart network
。 - 临时路由直接使用
ip route del
删除即可。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17239.html