BakaCai
OSPF+BFD over GRE 源源不断根本停不下来 v1.2

access_time
brush 1768个字
whatshot 1117309 ℃

Route Your Network with O.S.P.F 这首想必你们都听过了~
但是描述总是与实际不符 , 缺乏网络基础的情况下折腾OSPF不会有任何结果.
首先 , 早在1年之前我就提醒过大家 , 各种协议在路由器里的distance.
2.png
比如在linux的日常操作中:
peer的优先级是0 , 你在路由器A中写了一条 ip addr add 114.5.1.4 peer 1.14.51.4 dev gre1 , 路由器B写一条 : ip addr add 1.14.51.4 peer 114.5.1.4 dev gre1 . 之后你突然奇想 , A到B这段能不能绕一下C ? 那在A上面加一条 : ip route 1.14.51.4 via 11.45.1.4/24 ...整个地球都沉默了...不会有任何事情发生.

路由器有复杂的选路逻辑 , distance只不过是其中一个. 新手会遇到的问题基本上就这个 .
当你深入学习之后你会发现OSPF和BGP内部都有复杂的选路原则 , 比如 OSPF 如果你分了Area , 那么达到同一个IP地址 , 他会优先走 intra area , 而不会跨区域走inter area.

这个实验不用RouterOS , 用Linux 是完全OK的. 考虑到国情问题 , 大多数用户都是动态IP , 以及需要套娃的层数非常的多 , RouterOS 可以节约 90%的时间. 没错 , Linux下你配个 strongswan libreswan 基本上1个小时就过去了.
实验难度不大 , 完全根据流程走可以不需要模拟器.


接下来以这个只有3台路由超简单的OSPF实验为例 ~

上海CN2有两条隧道分别到日本NTT和香港PCCW.这2条隧道偶尔会产生丢包 , 并不会同时发生.
现要求 :
上海-日本NTT丢包时 , 绕行香港 , 即走上海CN2-香港PCCW-日本NTT.
上海-香港PCCW丢包时 , 绕行日本 , 即走上海CN2-日本NTT-香港PCCW.
4.png
根据以上网络拓扑图我们先起一个底层隧道 , 通常推荐用gre.
填上公网IP地址还没完 , 把Keepalive功能如图所示,直接关掉 , 保持长通状态:
5.png
指定gre隧道两端的IP地址 :
6.png
另外一头根据网络拓扑图用同样的方式配置好 , 并测试好能ping通对端即可.
以上这个起gre隧道的基本操作步骤大家已经非常熟悉了, 除了一个关keepalive , 因为它和BFD是冲突的.

接下来是全新操作 ~ Bridge 添加一个空的桥接 , 一个端口都不桥接就先相当于loopback口:
7.png
并分配 IP (Loopback 口推荐用 /32):
上海lo1 IP : 192.168.254.1
香港lo1 IP : 192.168.254.2
日本lo1 IP : 192.168.254.3

拓展部份 :
如果网络中有一头只有内网 , 没有关系 , L2TP可以替代 Gre .
配置 L2TP Server 和 Client的方式请参考余松:routeros入门到精通.


开始配置OSPF

到 Routing-OSPF-Instances ~
RouterID 就用Loopback口IP方便识别 , Name再改一下 , 其它默认:
8.png
到 Interfaces 界面:
分别添加香港和日本两条隧道的gre口 , 验证方式我们选MD5并设置一个密码. (L2TP方式的话不用密码)
Network Type 选择 : Point to Point , 简单理解为只发路由给隧道对端路由器.
Use BFD 必须打勾 ! (如果用L2TP方式 , BFD就免了 , 实测ROSv6的L2TP也是不兼容BFD包的.)
9.png
之后到Networks选项卡 , 把与外层隧道有关的IP以及loopback口IP宣告出去:
这里有人问到:隧道的2头不是已经有静态路由了, 只宣告loopback的IP可以么 ?
当然不行...loopback口的IP需要通过隧道的IP来传递. 不宣告的话 , loopback的IP就没有可以通过OSPF抵达的路由了.
简单的理解为 , 你静态路由的传递和我OSPF的传递没关系 , OSPF要添加了那个网段路由才能传递下去...
10.png
如果你的OSPF区域只有一个 , 那还有个懒人做法 network直接添加 0.0.0.0/0 , 把你路由器里所有网段全部宣告出去...
完成之后到 IP-Routes :
如图所示 , DAo 即是从OSPF 收到的路由. 那么这台路由中 , 其它几台路由器的loopback口192.168.254开头的IP地址全部收到了.
11.png


简单调一下 BFD的参数 :

MultiPlier 调为 : 3 , 简单理解为 0.2秒对面就会发一个包 , 连续3个包没收到即判断为失联.
根据你的网络环境 , 丢包率略高的网络环境设置成4会比较好. BFD过度灵敏会使网络反复绕行.
12.png
BFD简单理解为 : 发生断线或者丢包的情况下 , 能让OSPF以最快的速度切换线路的加速器.

使用VRF 隔离 OSPF域 (高难度选修课程) :

Configuring VRF Lite on MikroTik RouterOS
https://www.youtube.com/watch?v=W5cnf6NKtuE
隧道过多的情况下 , 比如你不希望亚洲的IP在断网的情况下绕行欧美.
那就可以利用这个方法 , 分地区隔离 .
设立VRF后 , VRF内的设备路由表就和 Main表独立了 .
那么如何让VRF内的路由和Main表中的路由互通 :
MikroTik - Route Leaking (Get Between VRFs!)
https://www.youtube.com/watch?v=gcfeguI30RU


最后就是你们最喜欢的套娃隧道了 :

平时起套娃的时local和remote就填底层隧道两头的地址.
然而回到文章最上面...隧道两头是静态IP地址,优先级比OSPF要高.
你要用到OSPF , remote address就要填从ospf收到的IP , local address就要填对端ospf收到的IP.
解决方法就是增加一跳 , 也就是增加一个你们一直觉得意义不明的loopback口.
把到日本的gre隧道关掉假设断线 , 通过OSPF我们走香港10.10.121.2到达192.168.255.3
13.png
正常情况下通过OSPF实际走的是日本10.10.130.2 , 然后这一跳在同一台路由器上 , 被隐藏掉了.
14.png
填写套娃隧道的时候就比较讲究了 :
Local 和 Remote Address 填Loopback口IP大家已经理解了.
那么 MTU 请无比设置的比外层隧道小90以上. OSPF在不同的底层隧道之间反复横跳 , 加入你有114514根隧道 , 每条大小都不一样 , 那肯定的确保取MTU最小的那根再减90.
IPsec 密码一填 他就自动在外层套上IPSEC了 , 相信这个大家都已经理解了.
Clamp TCP MSS 这回一定要打勾了 , 外层隧道可以不打勾 , 没必要Clamp 2次. 否则你TCP包太大水管太小就过不去了.
15.png
同理 , 上海-香港PCCW的隧道也用loopback地址起. 最后隧道2端分别给个IP地址别忘记.
回到上海的路由器 , 添加一条附带Routing Mark , 网关指向内层隧道对端IP的路由
17.png


用mangle 或者IP-Route-Rules使用隧道 :

在这之前 , 先要做一下 src-nat :
很多能力较低的用户 , 整台路由器里就一条 src-nat 然后action masquerade .
那你的套娃隧道肯定经常掉线...原理省略一万字.
请务必限定 src address , 通常就填你内网的网段.
Out Interface : 内层隧道的接口 , 隧道多的话自己可以做个list.
18.png
Mangle 规则用起来很简单 :
用prerouting 表 , dst-addr-list 这里exclude了中国的IP , action:mark routing .
New Routing mark 这里填之前IP-route里设置的那个即可 .
19.png
那么有些黑色高级ARM路由器需要用Fast Track connection , 不能用Mangle ,只能用 Route .
但是也想国内外流量做分流 , 方法也是有的 :
利用脚本导入 Route , 国内地址全部到main表 . 路由表是由上往下执行的 , 因此最后一条我们写 0.0.0.0/0 到隧道即可.
20.png
这里送佛送到西 , 脚本已经帮你们都做好了 修改一下 src-address 和 最后一条的routing mark 即可:
iproute3.zip

至此为止 , OSPF+BFD over GRE的所有实验操作全部结束了.
如果要深入的了解OSPF&BGP的理论 , 玩出更多的花样 ~
那么光看余松的RouterOS从入门到精通是远远不够的 , 网上的CCNA-CCNP 两级的培训视频请全部看完 .

此文章请不要转载和外传~

Drcai
2021/5/16 v1.2

#如无特别声明,该文章均为 BakaCai 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
#最后编辑时间为: 2022 年 06 月 19 日





关于 DreamCat

主题名称:DreamCat | 版本:2.8.221001(LTS)

主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WhiteBearcn | DFFZMXJ

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2024 by LychApe All rights reserved!

加我的QQ
加我的微博
加我的支付宝
加我的微信