Mikrotik 通过ASN分流

Motivation :

多线接入的网络下如何科学的分流一直是令人非常困扰的事情 …
每种方案都有自己的优缺点 , 不存在很完美很绝对的方案 , 因此我只能给出一种比较适合国情的方案 .

先来说说一般家用的分流方案 :
1 L3层静态路由表分流 – 比如下载一个 ChinaIP , 然后把海外的IP全部走隧道 .
2 L7层嗅探 – 通过域名来分流 , 把特殊域名的流量扔到Socks代理去 .
这两种方案存在3大缺点 :
1 统一的缺点就是需要不定时的来更新路由表与域名表. 通常做这类免费项目的人基本上是”三分钟热度” , 后续维护是个问题 .
2 这类项目通常都有一定的延迟性,不会在ISP&IDC调整IP段后实时更新 , 最勤快的项目 , 用机器人直接从bgp.he.net这里拉IP的也要1日1更 . 且he的路由表也存在1天左右的延后.
3 分类不够细致 , 比如路由表最多给你精确到国家级别 . 部分项目提供主流ASN的IP Range, 但不可能做到每日更新所有ASN .
那么就有可能造成流量浪费 , 加速器变减速器 这样的Debuff效果 .

BGP Take me Home 方案完美解决了以上问题 .
用户可以实时通过上游收到最新的路由表 , 每当一个ASN IP宣告产生变化后 , 通常在几秒到半个小时左右即可获取最新的路由表.
根据ASN进行分流 , 极大程度的提高了分流的精确度 . 有丧心病狂的BGPlayer甚至根据 GeoIP 为ASN内不同的国家的IP打上Communites 二次分流 …那这里只说人人都能学会的低难度版本 .
利用ASN分流 , 不但可以用于多线接入的环境 . 你可以单线接入 , 起114514根隧道将路由通往全球各地 . 根据ASN号来发往你最喜欢的隧道 . 比如韩国KT的流量超级贵的 , 我就把kakao , pmang 这种网游的流量送过去即可 . 比如你们最喜欢的小伙伴”狗根”流量不值钱 , 那么把x开头s结尾的网站送到那里去 . 玩法完全是根据自己的情况”私人定制”的 .

Preparation:

说了那么多…首先你的把表给收回家 , 收BGP全表大概有两类方法~

自己动手丰衣足食 :
1 租一个 /48 IPv6 段 – 一个月2.5欧的样子 , 找 Vultr 代广播这个 IPv6段. (可省略)
2 在 Vultr VPS 开通BGP session 功能 .就说自己没有ASN 只想收个全表即可 .
3 一台6刀VULTR 高性能CPU版收IPv4的全表 .
没错开通BGP session 后 IPv4 和 IPv6 全表都能从Vultr 收到 . 不需要自己的ASN , 把IP挂靠在Vultr的ASN下即可.

抱大腿 :
1 加入神秘组织dn42 , 通过建立rDNS记录赞美大佬 .
2 屁股里夹着5毛硬币 , 在TG群高深呼喊 : 我就是那个要和你们Peer的网友 !
In fact,收路由表并不困难. 只需要建一个私有ASN,把从上游收来的全表重分布到这个ASN里即可.

硬件的话起码需要 256m的内存 , 通常你需要收1W条左右的Prefix. 不能低于这个内存了 .
因此hap ac2这是万万不可的 , RB750Gr3 能勉强收一下 . 一般推荐 RB4011收全表刚刚好.
那么自己做x86的软路由内存就不用担心了…但是CPU的配个高级点的建议用i3-3xxx级别以上 .
千万别用个 J1900 之类的, 收个路由表整个路由器卡住了 …

Operation:

先来素质三联~

1 使用Vultr VPS为例 , 根据上一篇BGPlayer速成班教程 , 开通BGP Session .
2 通过DD的方式安装 RouterOS CHR .
3 使用你最喜欢的隧道把这台VPS与家中的ROS路由打通 .

之后开始RouterOS超级轻松愉快的Peer Vultr流程~

先在VPS控制面板找到BGP选项卡 :

Graphical user interface, text, application, Teams Description automatically generated

再阅读 Vultr 官方文档 :
https://www.vultr.com/docs/configuring-bgp-on-vultr

之后在RouterOS里先建立 Filter 和 BGP instance :
第一组 Filter 很简单 Import All , Export None .
那么自己起In Filter的Chain Name , Action 写 Accept 即可 .
Vultr 发给你的IPv4路由都是过滤过的 , Bogon ips : 局域网IP之类 , 都是不存在的 . 新手非常友好.
你没有任何IPv4段需要广播,所以 Out Filter Action 直接全部 DISCARD 即可 .

Graphical user interface, application Description automatically generated

第二组 Filter 同样很简单, Import None , Export All . 用于内网私有AS中.
Graphical user interface, application Description automatically generated

建立2个 BGP instance :

Graphical user interface Description automatically generated

与 Vultr Peer 用的Instance 根据VPS面板中提供的AS号来填写 AS .
传递路由表出去的那个私有AS号需根据RFC规则 : 64512到65535之间自选一个 .
RouterID 只不过是给BGP instance 起个名字 , 随便填 .
Filter 分别选择刚才建立好的两组 .
私有ASN的 Instance 必须勾选 : Redistribute Other BGP(BGP重分布) . 否则从其它BGP instance 收来的路由是不共享的.

接下来开始设置 Peer :
Vultr 的IPv4 Peer 完全根据官方说明来 , Multrihop别忘记选上 , Filter设置后直接上 !

Graphical user interface, application Description automatically generated

因为 RouterOS 通过 RA获取的 IPv6网关不在路由器中显示 , 因此需要通过神奇的方式找出网关 .
根据 RFC 3307 规则 :https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml
ping FF02:0:0:0:0:0:0:2 即可获取网关信息 .
把IPv6 Peer 地址指向这个网关 , 避免 BGP 一启动 Peer 的路由被覆盖 .
Graphical user interface, text, application Description automatically generated

以上内容感谢 @shirakun @genezx 指导. 作者本人表示对IPv6相关内容并不熟悉.

Vultr 与 IPv4 地址 Peer 那么就只能收 IPv4的路由表 , 与 IPv6 地址 Peer 那么就只能收 IPv6的路由表 .
高级选项当中需把 Address Family 设置成 IPv6 .

Graphical user interface, application, Word Description automatically generated

私有ASN的 Peer 就稍微有点讲究了 :

Graphical user interface, application Description automatically generated

Remte Address – 偷懒写隧道两头的即可 , 按照道理应该起在Loopback口上

Remote AS : 起 IBGP , 两头同一个私有ASN .

Hold Time : 因为国内网络环境不是很好 , 这里建议设置长一点 , 甚至于设置为 infinity , 然后通过手动方式 Refresh .

避免BGP 断开导致路由表丢失 .

Address Family 这里 , 你可以同时把刚才收到的 ipv4 和 ipv6 一概通过这个Peer发出去 .

Vultr 这头的设置就全部完毕了.Peer established的那一刻就开始收全表了 , 83W个 Prefix , 内存一瞬少一半 .

Graphical user interface, text, table Description automatically generated

家中RouterOS的设定方法大概是相同的 ~

只需要一个私有ASN去 Peer Vultr 的 VPS即可 . 设置方式和VPS上的一摸一样即可 .
主要区别就在 IN-Filter 上 , 不用再收全表了 , 只收需要分流的ASN :

Graphical user interface, application Description automatically generated

BGP AS Path的写法参考 : Mikrotik 没有教 , 参考其他家一样的 . 注意AS path 是不能用 ()来偷懒的:
http://www.h3c.com/cn/d_201010/922170_30005_0.htm
范例中的 BGP AS Path含义为:以 AS15169 与 AS14618 结尾的路由 .
新手只需要记住以”_”开头 , ASN后带上”$” , 每个ASN用”|”来分割即可 .
Action 当中 – Set In Nexthop Direct : 直接指定 Interface 作为出口 , 用于 PPPoe Interface非常方便 .
静态IP的话你可以用 Set In Nexthop 来手动指定下一条效果是一样的 .
Set Routing Mark : 然后通过 ip-route-rule 或者 mangle 使局域网内部分IP走这个路由表 . 如果不设置的话 , BGP学习到的路由默认就跑到 main 表里去了 .
Main表里不同种类的路由挤在一起,你就的好好了解一下各类路由协议的优先级了 .
Table Description automatically generated

没错, 又是这张图 – –

路由器的选路原则是怎么样的呢 ?
这个问题请大家自行学习CCNA等各类教材 , 这里只举一个简单的例子 :

Table Description automatically generated

首先 , 子网掩码越大(IP段越小) , 越优先 .
接下来他才考虑 distance的问题 . 比如 你在 IBGP中收到了 1.1.1.0/24 , 在 Filter 中统一设置出口成 cmtoiplc了 .
然而我这条不想走这个出口 , 那可以添加一条静态路由指定到其它出口 :
Graphical user interface, text, application Description automatically generated

同样的IP段distance越小的越优先 .

日常用的ASN我为大家贴出来了 :

Table Description automatically generated

Route Filter 的 Chain 是从上往下执行的 .
在为所有需要分类的ASN做好 Filter后 , 最后一条 In-Filter 直接 Action Discard 把无关路由排除在外即可 . Out-Filter 一律 Discard .

 

Education :

看完这篇教程你可能非常顺利的就能通过ASN进行分流 , 但还远远不够 .
不光同一个路由表下有着复杂的选路原则 . OSPF&BGP 这2个协议内部分别同样有非常复杂和独特的选路原则…
这可能要等CCNP全部学完后才能完全掌握

评论

  1. 偶然
    2 年前
    2023-2-20 8:02:53

    看的我是云里雾里没看懂。

  2. jmantnt
    2 年前
    2023-4-18 8:57:55

    请问一下现在v7版本的,如何过滤asn号呢?因为都改成脚本了,也没具体实例,请问一下,能更新下v7版本的吗?另外asn号怎么查询,就是做netflix分流,怎么查询asn号是多少呢,我看您写了3个,不知道如何查询

  3. 蜡笔小新
    1 年前
    2023-8-10 7:30:04

    大佬,7.10版本完全不同了,方便更新一期吗?

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇