Linux路由配置
路由配置是 Linux 系统网络管理的核心技能之一,决定了数据包在网络中的传输路径。无论是搭建家庭网络、配置企业级服务器,还是实现复杂的多网段通信,掌握 Linux 路由配置都至关重要。
1. Linux 路由基础
1.1 什么是路由?
路由是指数据包从源地址到目标地址的传输路径选择过程。Linux 系统通过内核的路由表(Routing Table)决定数据包的转发方向。路由表包含目标网络、下一跳(Next Hop)、网关和接口等信息。
- 静态路由:手动配置的固定路由规则,适合简单网络。
- 动态路由:通过路由协议(如 OSPF、RIP)自动更新路由表,适合复杂网络。
- 策略路由:基于源地址、协议等条件选择路由路径。
1.2 路由表结构
Linux 路由表由内核维护,可通过 ip route
查看:
ip route
输出示例:
default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/24 via 192.168.1.2 dev eth0
default via 192.168.1.1
:默认网关,所有未知目标的数据包发送到此网关。192.168.1.0/24
:本地网络,直接通过eth0
转发。10.0.0.0/24 via 192.168.1.2
:静态路由,目标网络通过指定网关。
1.3 路由相关概念
- 网关(Gateway):数据包离开本地网络的下一跳地址。
- 网络接口:如
eth0
(有线)、wlan0
(无线),用于发送和接收数据。 - 子网掩码:定义网络范围,如
/24
表示255.255.255.0
。 - Metric:路由优先级,值越小优先级越高。
- 协议(Proto):如
static
(静态路由)、kernel
(内核自动添加)。
1.4 常用路由工具
- ip route:现代路由管理工具,替换
route
命令。 - nmcli:NetworkManager 的命令行工具,适合动态配置。
- systemd-networkd:轻量级网络管理服务,适合服务器。
- routed/ripd、ospfd:动态路由协议守护进程。
- iptables、nftables:用于策略路由和 NAT。
2. 查看和理解路由表
2.1 查看路由表
使用 ip route
查看当前路由表:
ip route show
输出示例:
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
172.16.0.0/16 via 192.168.1.2 dev eth1
2.2 查看特定路由
过滤目标网络:
ip route show to 10.0.0.0/24
2.3 查看路由缓存(旧内核)
在较旧的 Linux 版本中,可查看路由缓存:
ip route show cache
注:新内核(如 CentOS 8、Ubuntu 20.04)已移除路由缓存。
2.4 其他工具
-
netstat -r:显示路由表(需安装
net-tools
):sudo dnf install net-tools # CentOS sudo apt install net-tools # Ubuntu/Debian netstat -rn
-
route:传统工具,功能与
ip route
类似:route -n
3. 静态路由配置
静态路由适合小型网络或固定路径的场景。以下以 CentOS 8、Ubuntu 20.04 和 Debian 11 为例。
3.1 CentOS 8 静态路由
3.1.1 使用 ip route
添加临时静态路由:
sudo ip route add 10.0.0.0/24 via 192.168.1.2 dev eth0
删除路由:
sudo ip route del 10.0.0.0/24
注:ip route
添加的路由重启后失效。
3.1.2 持久化路由
-
使用 NetworkManager:
sudo nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 192.168.1.2" sudo nmcli connection up eth0
-
使用配置文件:
编辑/etc/sysconfig/network-scripts/route-eth0
:10.0.0.0/24 via 192.168.1.2 dev eth0
应用:
sudo nmcli connection reload sudo nmcli connection up eth0
-
使用 systemd-networkd:
编辑/etc/systemd/network/20-wired.network
:[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 [Route] Destination=10.0.0.0/24 Gateway=192.168.1.2
重启服务:
sudo systemctl restart systemd-networkd
3.2 Ubuntu 20.04 静态路由
Ubuntu 20.04 使用 Netplan 管理网络。
3.2.1 使用 Netplan
编辑 /etc/netplan/01-netcfg.yaml
:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
routes:
- to: 10.0.0.0/24
via: 192.168.1.2
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
应用:
sudo netplan apply
3.2.2 使用 nmcli
sudo nmcli connection modify enp0s3 +ipv4.routes "10.0.0.0/24 192.168.1.2"
sudo nmcli connection up enp0s3
3.3 Debian 11 静态路由
Debian 11 支持 /etc/network/interfaces
和 NetworkManager。
3.3.1 使用 /etc/network/interfaces
编辑 /etc/network/interfaces
:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
up ip route add 10.0.0.0/24 via 192.168.1.2
重启网络:
sudo systemctl restart networking
3.3.2 使用 nmcli
sudo nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 192.168.1.2"
sudo nmcli connection up eth0
3.4 验证静态路由
测试路由是否生效:
ip route show to 10.0.0.0/24
ping -c 4 10.0.0.1
4. 动态路由配置
动态路由通过协议(如 RIP、OSPF)自动更新路由表,适合大型网络。
4.1 安装 Quagga/FRR
Quagga 和 FRR(Free Range Routing)是常用的动态路由软件。FRR 是 Quagga 的现代替代。
-
CentOS 8:
sudo dnf install frr
-
Ubuntu/Debian:
sudo apt install frr
4.2 配置 OSPF
OSPF(Open Shortest Path First)适用于大型网络。
-
启用 OSPF 守护进程:
编辑/etc/frr/daemons
:ospfd=yes
-
配置 OSPF:
编辑/etc/frr/frr.conf
:router ospf network 192.168.1.0/24 area 0 network 10.0.0.0/24 area 0 interface eth0 ip ospf cost 10
-
启动 FRR:
sudo systemctl enable --now frr
-
验证:
vtysh -c "show ip ospf neighbor"
4.3 配置 RIP
RIP(Routing Information Protocol)适合小型网络。
-
启用 RIP:
编辑/etc/frr/daemons
:ripd=yes
-
配置 RIP:
编辑/etc/frr/frr.conf
:router rip network 192.168.1.0/24 network 10.0.0.0/24
-
启动服务:
sudo systemctl restart frr
4.4 验证动态路由
查看路由表:
ip route
检查 OSPF/RIP 状态:
vtysh -c "show ip ospf route"
vtysh -c "show ip rip"
5. 策略路由配置
策略路由根据源地址、协议等条件选择路由路径。
5.1 使用 ip rule
-
创建新路由表:
编辑/etc/iproute2/rt_tables
:100 custom
-
添加策略路由:
sudo ip rule add from 192.168.1.100 table 100 sudo ip route add default via 192.168.1.3 dev eth0 table 100
-
持久化:
-
CentOS:添加到
/etc/sysconfig/network-scripts/rule-eth0
:from 192.168.1.100 table 100
-
Ubuntu:添加到 Netplan 的
routes
字段。 -
Debian:添加到
/etc/network/interfaces
的up
命令。
-
5.2 使用 nftables
配置基于协议的路由:
sudo nft add table ip custom
sudo nft add chain ip custom prerouting { type filter hook prerouting priority 0 \; }
sudo nft add rule ip custom prerouting ip saddr 192.168.1.100 ip daddr 10.0.0.0/24 meta mark set 1
sudo ip route add 10.0.0.0/24 via 192.168.1.3 table 100
sudo ip rule add fwmark 1 table 100
6. 高级路由配置
6.1 配置 NAT
网络地址转换(NAT)用于内网访问外网。
-
iptables:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables-save > /etc/iptables/rules.v4
-
nftables:
sudo nft add table nat sudo nft add chain nat postrouting { type nat hook postrouting priority 100 \; } sudo nft add rule nat postrouting oifname "eth0" masquerade
6.2 配置网桥路由
网桥用于虚拟化环境:
sudo ip link add name br0 type bridge
sudo ip link set eth0 master br0
sudo ip link set br0 up
sudo ip route add 10.0.0.0/24 via 192.168.1.2 dev br0
6.3 配置多网关
支持多个网关的负载均衡:
sudo ip route add default scope global nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 192.168.2.1 dev eth1 weight 2
7. 故障排查
7.1 路由不可达
-
检查路由表:
ip route show
-
测试目标网络:
ping -c 4 10.0.0.1 traceroute 10.0.0.1
7.2 网关配置错误
-
验证网关可达:
ping 192.168.1.2
-
检查接口状态:
ip link show
7.3 动态路由未更新
-
检查 FRR 日志:
sudo journalctl -u frr
-
验证邻居状态:
vtysh -c "show ip ospf neighbor"
7.4 防火墙阻断
-
检查防火墙规则:
sudo firewall-cmd --list-all # CentOS sudo ufw status # Ubuntu/Debian
8. 优化与维护
8.1 优化路由性能
-
降低 Metric:优先选择低延迟路径:
sudo ip route add 10.0.0.0/24 via 192.168.1.2 dev eth0 metric 50
-
启用 BBR:
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
8.2 监控路由
-
使用
mtr
监控路径:sudo dnf install mtr # CentOS sudo apt install mtr # Ubuntu/Debian mtr 10.0.0.1
8.3 备份路由配置
备份路由表:
ip route save > /etc/routes.backup
恢复:
sudo ip route restore < /etc/routes.backup
9. 总结
Linux 路由配置是网络管理的核心,从静态路由的简单设置到动态路由的自动化管理,再到策略路由的灵活控制,涵盖了多种场景。无论是家庭网络、企业服务器还是复杂的数据中心,掌握 Linux 路由配置都能显著提升网络效率和安全性。