让Ubuntu服务器变身OSPF路由器!实现服务器与网络设备直接对话

众所周知,OSPF之类的动态路由协议通常是路由器、交换机等网络设备的专利。我们刚刚介绍了路由器如何配置OSPF(OSPF的DR/BDR是怎么选出来的?抓包实战带你看清选举全过程与Router ID的作用),通过这次亲手实践,我们不仅学会了OSPF的基础配置命令,更重要的是深刻理解了其背后的工作机制。从Router ID的指定,到邻居建立与DR选举,再到LSA的传播与路由计算,OSPF展现了一个高效、自洽的分布式系统的魅力。

但你是否想过,让普通的Ubuntu服务器也学会OSPF,直接与网络设备称兄道弟,参与路由决策?其实,在现在的数据中心中,为了提升效率,不少服务器都是直接运行动态路由协议的。例如我们前面介绍的(2048卡H100算力中心HPE Alletra 4140存储集群部署手册),服务器上就是通过FRR(Free Range Routing)来配置动态路由协议的。

今天,我们就借助FRR这款强大的开源路由软件套件,通过一个简单的点对点连接案例,来简单学习一下,如何在Ubuntu 22.04上亲手调教出一台能跑OSPF的服务器路由器。

首先,OSPF需要内核支持数据包转发功能,我们先配置开启IP转发。

bash 复制代码
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf

然后,我们直接使用apt命令安装FRR。

css 复制代码
apt update && apt install frr -y

FRR采用模块化设计,默认情况下,FRR只启动了基础守护进程,需要编辑配置文件/etc/frr/daemons,将ospfd=no修改为ospfd=yes,来手动开启ospfd来启用OSPF组件。

bash 复制代码
nano /etc/frr/daemons

可以看到,FRR不仅支持OSPF,还支持RIP、BGP、IS-IS、OSPFv6(OSPFv6配置)等协议。

修改完成之后,重启FRR服务使配置生效。

bash 复制代码
systemctl restart frrsystemctl enable frr

FRR提供了一个类似Cisco IOS的配置界面,让网络工程师能无缝上手。接下来,我们需要使用vtysh命令进入FRR的命令行交互界面进行配置。

go 复制代码
vtysh

版本好像还挺低的,貌似是2005年的8.1版本。

先看一下接口信息。

可以看到,FRR直接读取了设备的IP地址配置,无需单独配置。那我们接下来测试一下配置OSPF。指定Router ID,宣告直连网段,几个简单命令就完成了OSPF的基本配置。

apache 复制代码
configure terminalrouter ospf ospf router-id 10.3.3.3 network 10.34.1.0/24 area 0 network 10.33.1.0/24 area 0 exitdo write memory

可以看到,即使使用非本机IP地址作为路由器ID也是可以的。

接下来,我们完成另一台Ubuntu主机的配置。

apache 复制代码
configure terminalrouter ospf ospf router-id 10.4.4.4 network 10.34.1.0/24 area 0 network 10.44.1.0/24 area 0 exitdo write memoryshow ip ospf neighbor

配置完成后,等待大约半分钟的OSPF收敛时间,即可看到OSPF邻居建立成功。对方的Router ID为10.3.3.3,状态为Full/DR,表明因为本端的Router ID比对方大,而选举成了DR设备。

检查一下路由表信息。

nginx 复制代码
show ip route ospf

可以看到,成功学习到了对方的私网路由10.33.1.0/24,返回到内核看一下。

可以看到,内核中也多了一条去往10.33.1.0/24的路由,下一跳为10.34.1.3,而且显示协议为ospf,比在vtysh显示的还好一些。

是骡子是马,拉出来溜溜!测试一下可达性。

可以,没有问题。也就是相比于MSR36而言,邻居的建立速度稍微慢一些,不过功能还是可以的。

查看系统资源占用情况。

发现一共才分配了5024 KB内存,简直不要太轻量化,可谓身材苗条,能量巨大,非常适合在服务器上常驻运行。

通过这次实践,我们验证了在标准Linux服务器上部署成熟动态路由协议的完全可行性。这为我们打开了一扇新的大门:未来,在OpenVPN、WireGuard等VPN overlay网络中,可以借助FRR实现动态路由分发,极大简化复杂网络拓扑的管理。让服务器兼具路由功能,或许是构建更灵活、智能网络架构的一把钥匙。

***推荐阅读***

无需公网IPv4!手把手教你配置基于IPv6的WireGuard安全隧道

基于IPv6配置openVPN实战:告别双栈难题,一步打通IPv6隧道!

openVPN进阶技巧:如何实现从服务端反向访问客户端内网?

告别命令行复杂的证书管理!可视化OpenVPN证书管理系统实战,一键发证、过期提醒全搞定

OpenVPN管理竟能如此简单?实时监控、固定IP、强制下线,运维效率翻倍

服务器端口不对外开放怎么办?用SSH"秒建"加密隧道,安全访问内部服务

OSPF的DR/BDR是怎么选出来的?抓包实战带你看清选举全过程与Router ID的作用

RDP授权119天不够用?给你的Windows Server来个"永久"授权

从不可用到10分钟,再到10秒!我优化了AI手机操作,实现流畅运行

256台H100服务器的RoCEv2无损与全互联算力网络建设方案

256台H100服务器算力中心的带外管理网络建设方案

2048卡H100算力中心100G无阻塞存储网建设方案

2048卡H100算力中心400G:380G无阻塞业务网建设方案

2048卡H100算力中心HPE Alletra 4140存储集群部署手册

相关推荐
HalvmånEver2 小时前
Linux:库制作与原理(三)
linux·运维·服务器
管理大亨2 小时前
Linux服务器性能优化全攻略
linux·服务器·性能优化
chinesegf2 小时前
gunicorn 进程管理的常用命令
linux·运维·gunicorn
严文文-Chris2 小时前
RAG关键技术要点详解
java·服务器·前端
木子欢儿2 小时前
在 Debian 13 上搭建一个 NTP (Network Time Protocol) 服务器
运维·服务器·开发语言·debian·php
❀͜͡傀儡师2 小时前
基于docker一键部署 x86的cpu_mem_hog 用于生成CPU和内存负载,用于服务器cpu和内存使用不达标的
java·服务器·docker
倔强的石头1062 小时前
Linux 进程深度解析(五):程序地址空间 —— 进程的独立内存王国
linux·运维·服务器
SELSL2 小时前
Linux文件属性及目录
linux·c语言·linux目录文件·linux文件属性、目录api·linux文件属性