OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络。OSPFv2是由RFC 2328定义的,OSPFv3是由RFC 5340定义的。与RIP相比,OSPF是链路状态协议,而RIP是距离矢量协议。
本教程中,我们将连接通过Wireguard连接的路由器网络,Route A(上海)下挂载 10.200.10.0/24,而 Route B(江苏)下挂载 172.16.5.0/24。
首先,我的配置可能并不适合你,只是作一个借鉴作用,而我本人是通过这篇教程来实现的,过程并不一样,写下希望以后不要忘记。
建立 GRE 隧道
我一开始是没用使用 GRE 而直接使用 Wireguard 进行互联的,但是发现收不到 OSPF 路由,在 Allowed-IPs 已经是 0/0 的情况下,猜想可能是不支持收发广播包(240/8)。因此在Wireguard的基础上使用了 GRE Tunnel,即 GRE Over Wireguard 实现。
实现过程
vim /etc/sysconfig/network-scripts/ifcfg-tun0
贴入以下内容
DEVICE=tun0
BOOTPROTO=none
ONBOOT=no
TYPE=GRE
PEER_OUTER_IPADDR=10.200.10.1 #对端IP (wireguard)
PEER_INNER_IPADDR=192.168.200.1
MY_INNER_IPADDR=192.168.200.2 (GRE本机IP)
然后 ifup tun0
同理在另一台机器上贴入以下内容
DEVICE=tun0
BOOTPROTO=none
ONBOOT=no
TYPE=GRE
PEER_OUTER_IPADDR=10.200.10.2 #对端IP (wireguard)
PEER_INNER_IPADDR=192.168.200.2
MY_INNER_IPADDR=192.168.200.1 (GRE本机IP)
然后 ifup tun0
ping 对端的 GRE IP进行测试,如果通了那么这里就算完成了。
安装 Quagga
通过 yum 安装 Quagga
yum -y install quagga
关闭 SELINUX 的话可以跳过这一步
setsebool -P zebra_write_config 1
配置 Zebra
我们首先创建Zebra配置文件,并启用Zebra守护进程。
rm -f /etc/quagga/zebra.conf
cp /usr/share/doc/quagga-*/zebra.conf.sample /etc/quagga/zebra.conf
systemctl start zebra
systemctl enable zebra
启动vtysh命令行:
vtysh
首先,我们为Zebra配置日志文件。输入下面的命令进入vtysh的全局配置模式:
site-A-RTR# configure terminal
指定日志文件位置,接着退出模式:
site-A-RTR(config)# log file /var/log/quagga/quagga.log
site-A-RTR(config)# exit
永久保存配置:
site-A-RTR# write
由于我们使用的是 GRE Tunnel,因此不需要为 Interface 重新配置 IP,直接可以进行 OSPF 的设置。如果你是通过物理线进行的连接而没有分配指定的 IP ,可以通过我之前提到的那个教程去学习。
配置OSPF
我们首先创建OSPF配置文件,并启动OSPF守护进程:
rm -f /etc/quagga/ospfd.conf
cp /usr/share/doc/quagga-*/ospfd.conf.sample /etc/quagga/ospfd.conf
systemctl start ospfd
systemctl enable ospfd
chown quagga:quagga -R /etc/quagga/
现在启动vtysh命令行来继续OSPF配置:
vtysh
输入路由配置模式:
site-A-RTR# configure terminal site-A-RTR(config)# router ospf
可选配置路由id:
site-A-RTR(config-router)# router-id 192.168.200.1
添加在OSPF中的网络:
site-A-RTR(config-router)# network 192.168.200.2/32 area 0 site-A-RTR(config-router)# network 10.200.10.0/24 area 0
永久保存配置:
site-A-RTR(config-router)# do write
在镇江的机器上重复和上面相似的OSPF配置:
输入路由配置模式:
site-B-RTR# configure terminal site-B-RTR(config)# router ospf
可选配置路由id:
site-B-RTR(config-router)# router-id 192.168.200.2
site-B-RTR(config-router)# network 192.168.200.1/32 area 0 site-B-RTR(config-router)# network 172.16.5.0/24 area 0 site-B-RTR(config-router)# do write
OSPF的邻居现在应该启动了。只要ospfd在运行,通过vtysh的任何OSPF相关配置的改变都会立即生效而不必重启ospfd。
验证
1.通过ping测试
首先你应该可以从site-A ping同site-B的LAN子网。确保你的防火墙没有阻止ping的流量。
[root@site-A-RTR ~]# ping 172.16.5.1
2. 检查路由表
必要的路由应该同时出现在内核与Quagga理由表中。
[root@site-A-RTR ~]# ip route
10.200.10.0/24 dev wg-client proto kernel scope link src 10.200.10.1 172.16.5.0/24 via 192.168.200.2 dev tun-zj proto zebra metric 20 192.168.200.2 dev tun-zj proto kernel scope link src 192.168.200.1
[root@site-A-RTR ~]# vtysh site-A-RTR# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route O 10.200.10.0/24 [110/10] is directly connected, wg-client, 01:03:54 O>* 172.16.5.0/24 [110/20] via 192.168.200.2, tun-zj, 01:00:20 O 192.168.200.2/32 [110/10] is directly connected, tun-zj, 01:04:11 C>* 192.168.200.2/32 is directly connected, tun-zj
3. 验证OSPF邻居和路由
在vtysh命令行中,你可以检查必要的邻居是否在线与是否已经学习了合适的路由。
[root@site-A-RTR ~]# vtysh
site-A-RTR# show ip ospf neighbor