在Linux系统中,路由是网络通信的核心机制,它决定了数据包从源地址到目的地址的转发路径,正确配置路由对于多网络环境、服务器网关设置或特定网络访问至关重要,本文将详细介绍Linux系统中添加路由的多种方法,包括临时路由和永久路由的配置,涵盖不同场景下的操作步骤及注意事项。
Linux路由基础概念
Linux系统的路由表是一个存储转发规则的数据库,每条路由记录通常包含目标网络地址、子网掩码、下一跳地址(网关)、输出接口、跃点数(metric)等关键信息,当系统需要发送数据包时,会根据路由表选择最合适的路径:若目标地址为本地直连网络,则直接通过对应接口发送;若为远程网络,则将数据包转发至指定的下一跳网关。
查看当前路由表可使用route -n
或ip route show
命令。-n
参数表示以数字形式显示主机名和端口名,避免DNS解析延迟;ip route show
则提供更现代、详细的输出格式,包括路由协议、优先级等信息。
临时添加路由(重启失效)
临时路由适用于测试或短期需求,重启系统或网络服务后配置会丢失,主要通过route
命令(传统工具)和ip route
命令(现代推荐工具)实现。
使用route
命令添加路由
route
命令是早期的路由管理工具,语法相对简单,但功能有限,基本语法为:route [-n] add [-net|-host] <目标网络/主机> [netmask <子网掩码>] gw <下一跳地址> dev <接口名> [metric <跃点数>]
-
添加主机路由:针对单个IP地址的转发规则
route add -host 192.168.2.100 gw 192.168.1.254 dev eth0
表示目标为
168.2.100
的数据包,通过eth0
接口发送至网关168.1.254
。 -
添加网络路由:针对整个子网的转发规则
route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0
表示目标为
168.3.0/24
网段的数据包,通过eth0
接口转发至网关168.1.254
。 -
添加默认路由:所有未知目标流量均通过此网关转发
route add default gw 192.168.1.254
默认路由通常用于连接互联网,若存在多条默认路由,系统会优先选择
metric
值较小的(跃点数越小,优先级越高)。
使用ip route
命令添加路由
ip route
是iproute2
工具包中的命令,功能更强大,语法更灵活,是当前Linux系统推荐的路由管理工具,基本语法为:ip route add <目标网络/主机> via <下一跳地址> dev <接口名> [metric <跃点数>] [table <表名>]
-
添加主机路由:
ip route add 192.168.2.100 via 192.168.1.254 dev eth0
-
添加网络路由:
ip route add 192.168.3.0/24 via 192.168.1.254 dev eth0
-
添加默认路由:
ip route add default via 192.168.1.254 dev eth0
-
添加跃点数(优先级):
若存在多条相同目标的路由,可通过metric
指定优先级(数值越小优先级越高):ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0 metric 100 ip route add 10.0.0.0/24 via 192.168.1.2 dev eth1 metric 50 # eth1路由优先级更高
临时路由的删除
若需删除临时路由,使用route del
或ip route del
命令,语法与添加时类似:
route del -net 192.168.3.0 netmask 255.255.255.0 ip route del 192.168.3.0/24 via 192.168.1.254 dev eth0
永久添加路由(重启生效)
临时路由无法满足生产环境需求,永久路由需通过修改配置文件实现,不同Linux发行版的配置方式存在差异。
Debian/Ubuntu系统(netplan/ifupdown)
(1)使用netplan(Ubuntu 18.04+)
netplan通过YAML配置文件管理网络,路由配置在routes
字段中,配置文件/etc/netplan/01-netcfg.yaml
:
network: version: 2 ethernets: eth0: dhcp4: no addresses: [192.168.1.10/24] gateway4: 192.168.1.254 routes: - to: 192.168.3.0/24 via: 192.168.1.254 metric: 100 - to: 10.0.0.0/24 via: 192.168.1.1 metric: 50 nameservers: addresses: [8.8.8.8, 8.8.4.4]
配置完成后执行netplan apply
使配置生效。
(2)使用ifupdown(传统Ubuntu/Debian)
在/etc/network/interfaces
文件中添加up route
命令(接口启动时执行):
auto eth0 iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.254 up route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254 up route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.1 metric 50
CentOS/RHEL系统(NetworkScript/nmcli)
(1)使用NetworkScript(CentOS 7及以下)
在网卡配置文件中添加IPADDR2
、NETMASK2
、GATEWAY2
等参数(需确保主网关已配置),或在/etc/sysconfig/network-scripts/
目录下创建route-<网卡名>
文件,为eth0
添加静态路由,创建文件/etc/sysconfig/network-scripts/route-eth0
:
# 静态路由格式:目标网络/子网掩码 下一跳地址 192.168.3.0/24 via 192.168.1.254 10.0.0.0/24 via 192.168.1.1 metric 50
重启网络服务或重启网卡使配置生效:systemctl restart network
或ifdown eth0 && ifup eth0
。
(2)使用nmcli(CentOS 8+)
NetworkManager是现代RHEL/CentOS系统的网络管理工具,可通过命令行添加永久路由:
# 添加网络路由 nmcli connection modify eth0 +ipv4.routes "192.168.3.0/24 192.168.1.254" # 下一跳为网关 nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 192.168.1.1 50" # 带跃点数 # 添加默认路由(若需修改默认网关) nmcli connection modify eth0 ipv4.gateway 192.168.1.254 # 激活配置 nmcli connection down eth0 && nmcli connection up eth0
Arch Linux系统(netctl/systemd-networkd)
Arch Linux推荐使用netctl
或systemd-networkd
,以netctl
为例,在网卡配置文件(如/etc/netctl/eth0
)中添加:
Interface=eth0 Address=192.168.1.10/24 Gateway=192.168.1.254 Routes=( '192.168.3.0/24 via 192.168.1.254' '10.0.0.0/24 via 192.168.1.1 metric 50' )
路由优先级与策略路由
当存在多条相同目标的路由时,系统通过metric
(跃点数)选择优先级最高的路由,若需更复杂的路由控制(如根据源IP选择不同网关),可使用策略路由(Policy Routing)。
查看路由跃点数
ip route show | grep metric # 或 route -n | grep -E "^(Kernel|UG)" | awk '{print $1, $5, $8}'
策略路由配置
策略路由通过ip rule
命令实现,基于数据包的源IP、目的IP、端口等条件选择不同的路由表,为源IP168.1.10
单独设置路由表:
# 创建自定义路由表(/etc/iproute2/rt_tables) echo "custom_table 100" >> /etc/iproute2/rt_tables # 添加策略规则:源IP为192.168.1.10的数据包使用custom_table ip rule add from 192.168.1.10 table custom_table # 向custom_table添加路由 ip route add default via 192.168.1.254 table custom_table # 保存策略路由(CentOS/RHEL:echo "ip rule add from 192.168.1.10 table custom_table" >> /etc/rc.local) # Debian/Ubuntu:写入netplan配置文件或/etc/network/interfaces
路由配置常见问题
路由添加后不生效
- 检查接口状态:确保网卡已启动(
ip link show eth0
查看状态,ifup eth0
启动)。 - 检查网可达性:使用
ping
测试网关是否可达(ping 192.168.1.254
)。 - 检查IP转发:若需作为路由器转发数据包,需开启IP转发:
# 临时开启 echo 1 > /proc/sys/net/ipv4/ip_forward # 永久开启(编辑/etc/sysctl.conf,添加net.ipv4.ip_forward=1,执行sysctl -p)
- 检查防火墙:iptables/nftables可能阻止转发流量,需放行FORWARD链:
iptables -I FORWARD -j ACCEPT
多网卡路由冲突
当服务器存在多个网卡(如eth0连接内网,eth1连接外网),需通过metric
设置优先级,避免路由冲突。
# 内网网卡metric较小(优先级高) ip route add default via 192.168.1.254 dev eth0 metric 50 # 外网网卡metric较大(优先级低) ip route add default via 10.0.0.1 dev eth1 metric 100
相关问答FAQs
Q1:为什么添加的路由重启后失效?
A:临时路由(通过route
或ip route
命令添加)仅在当前会话中有效,重启系统或网络服务后会丢失,要实现永久路由,需根据发行版修改对应配置文件(如Ubuntu的netplan、CentOS的ifcfg文件或nmcli配置),确保配置在系统启动时自动加载,在CentOS中,若未将路由写入/etc/sysconfig/network-scripts/route-eth0
文件,重启后路由规则将不会重新生效。
Q2:如何设置特定应用的路由,使其使用不同网关?
A:可通过策略路由结合ip rule
和ip route
实现,为应用(如192.168.1.10)单独设置路由表:
- 创建自定义路由表(
echo "app_table 101" >> /etc/iproute2/rt_tables
); - 添加策略规则(
ip rule add from 192.168.1.10 table app_table
); - 向该表添加路由(
ip route add default via 192.168.1.254 table app_table
); - 验证(
ip route show table app_table
),这样,源IP为192.168.1.10的数据包将使用app_table
中的路由,而其他流量仍使用默认路由。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/29120.html