OSPF(开放最短路径优先)等动态路由协议,传统上是路由器、交换机等专用网络设备的领域。不过,在现代数据中心和云原生环境中,让服务器直接运行动态路由协议以提升网络效率和灵活性的做法已不鲜见。例如,在大型算力集群中,服务器常通过 FRR(Free Range Routing) 这类开源路由套件来实现这一目标。
本文将通过一个简单的点对点连接案例,演示如何在 Ubuntu 22.04 系统上,利用 FRR 将一台普通服务器配置为支持 OSPF 的“路由器”,实现与网络设备的直接路由交互。
1. 启用系统IP转发
OSPF 需要 Linux 内核支持数据包转发功能。首先,我们需要开启系统的 IPv4 转发。
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
sysctl -p

2. 安装FRR软件包
使用 apt 包管理器安装 FRR。
apt update && apt install frr -y

3. 启用OSPF守护进程
FRR 采用模块化设计,默认不启用所有协议守护进程。我们需要编辑配置文件,手动开启 ospfd。
nano /etc/frr/daemons
将文件中的 ospfd=no 修改为 ospfd=yes。FRR 功能强大,除 OSPFv2 外,还支持 BGP、RIP、IS-IS 及 OSPFv3 等多种路由协议。

修改完成后,重启并设置 FRR 服务开机自启。
systemctl restart frr
systemctl enable frr

4. 配置OSPF协议
FRR 提供了一个类似 Cisco IOS 风格的交钥匙命令行界面,方便网络工程师快速上手。使用 vtysh 命令进入配置界面。
vtysh

首先可以查看接口信息,FRR 会自动读取系统的网络配置。

接下来进行 OSPF 基础配置。假设服务器有两个接口,网段分别为 10.34.1.0/24 和 10.33.1.0/24。执行以下命令配置 OSPF 进程,并宣告直连网络。
configure terminal
router ospf
ospf router-id 10.3.3.3
network 10.34.1.0/24 area 0
network 10.33.1.0/24 area 0
exit
do write memory

注意:此处使用的 Router ID (10.3.3.3) 可以不是本机任何一个接口的 IP 地址。
5. 建立邻居与验证
在另一台同样安装了 FRR 的 Ubuntu 服务器(假设 IP 为 10.34.1.4,另一接口网段为 10.44.1.0/24)上进行对端配置。
vtysh
configure terminal
router ospf
ospf router-id 10.4.4.4
network 10.34.1.0/24 area 0
network 10.44.1.0/24 area 0
exit
do write memory
配置完成后,等待约30秒的OSPF收敛时间,然后检查邻居状态。
show ip ospf neighbor

如图所示,邻居关系已成功建立,状态为 Full/DR。由于本端 Router ID (10.4.4.4) 大于对端 (10.3.3.3),因此本端被选举为指定路由器(DR)。
查看通过 OSPF 学习到的路由。
show ip route ospf

可以看到,已成功学习到对端宣告的私网路由 10.33.1.0/24。
我们还可以在 Linux 系统内核 的路由表中验证这条路由。
ip route | grep 10.33.1.0

内核路由表明确显示该路由的协议类型为 ospf,下一跳为 10.34.1.3。
最后,进行连通性测试,验证路由是否真正生效。

测试成功,数据包可以正常经由 OSPF 计算出的路径转发。
6. 资源占用评估
FRR 以其轻量高效著称。我们可以查看其内存占用情况。
ps aux | grep frr | grep -v grep

可以看到,ospfd 进程仅占用约 5MB 内存,资源消耗极低,非常适合在服务器上作为常驻服务运行。
总结
通过本次实践,我们验证了在标准 Linux 服务器上部署成熟动态路由协议的完全可行性。这为网络架构设计提供了新的思路:例如,在基于 WireGuard 或 OpenVPN 构建的 overlay 网络中,可以利用 FRR 实现路由的动态分发与收敛,从而简化复杂网络环境的管理。让服务器兼具智能路由功能,是迈向更灵活、更自动化的云原生/IaaS与运维/DevOps网络架构的关键一步。