Mikrotik RouterOS 上的 Multivan 和路由

介绍

撰写这篇文章,除了虚荣心之外,是因为在俄语电报社区的个人资料组中,关于该主题的问题频率令人沮丧。 文章面向Mikrotik RouterOS(以下简称ROS)管理员新手。 它只处理多厢货车,重点是路由。 作为奖励,有足够的设置来确保安全和方便的操作。 那些正在寻找队列、负载平衡、vlan、网桥、通道状态的多阶段深度分析等主题的披露的人 - 可能不会浪费时间和精力阅读。

初始数据

作为测试对象,选择了具有 ROS 版本 6.45.3 的五端口 Mikrotik 路由器。 它将在两个本地网络(LAN1 和 LAN2)和三个提供商(ISP1、ISP2、ISP3)之间路由流量。 ISP1 的通道有一个静态的“灰色”地址,ISP2 - “白色”,通过 DHCP 获得,ISP3 - “白色”,具有 PPPoE 授权。 连接图如图所示:

Mikrotik RouterOS 上的 Multivan 和路由

任务是根据方案配置 MTK 路由器,以便:

  1. 提供到备份提供商的自动切换。 主要提供者是ISP2,第一储备是ISP1,第二储备是ISP3。
  2. 组织LAN1网络只能通过ISP1访问Internet。
  3. 提供通过基于地址列表的选定提供商将流量从本地网络路由到 Internet 的能力。
  4. 提供从本地网络发布服务到互联网的可能性(DSTNAT)
  5. 设置防火墙过滤器以提供来自 Internet 的最低限度的安全性。
  6. 根据所选的源地址,路由器可以通过三个提供商中的任何一个发出自己的流量。
  7. 确保响应数据包被路由到它们来自的通道(包括 LAN)。

注。 我们将“从头开始”配置路由器,以保证“开箱即用”的起始配置不会因版本而异。 选择 Winbox 作为配置工具,其中的更改将直观地显示出来。 设置本身将由 Winbox 终端中的命令设置。 配置的物理连接是通过直接连接到 Ether5 接口来实现的。

关于什么是多货车的一些推理,这是一个问题还是围绕编织阴谋网络的狡猾聪明人

一个好奇而细心的管理员,自己设置了这样或类似的方案,突然发现它已经在正常工作了。 是的,是的,没有你的自定义路由表和其他路由规则,大多数关于这个主题的文章都有。 让我们检查?

我们可以在接口和默认网关上配置寻址吗? 是的:

在 ISP1 上,地址和网关已注册 距离=2 и 检查网关=平。
在 ISP2 上,默认的 dhcp 客户端设置 - 因此,距离将等于 XNUMX。
在ISP3的pppoe客户端设置时 添加默认路由=是默认路由距离=3.

不要忘记在出口​​处注册 NAT:

/ip 防火墙 nat add 操作=伪装链=srcnat out-interface-list=WAN

结果,本地站点的用户通过主要的 ISP2 提供商下载猫很有趣,并且使用该机制进行了频道预订 检查网关 见注 1

任务的第 1 点已实施。 带有标记的多功能货车在哪里? 不…

更远。 您需要通过 ISP1 从 LAN 中释放特定客户端:

/ip 防火墙 mangle 添加操作=路由链=预路由 dst-address-list=!BOGONS
直通=是 route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip 防火墙 mangle 添加操作=路由链=预路由 dst-address-list=!BOGONS
passthrough=无路由-dst=100.66.66.1 src-address=192.168.88.0/24

任务的第 2 项和第 3 项已经实施。 标签、邮票、路线规则,你在哪里?!

需要为来自 Internet 的客户端访问地址为 172.17.17.17 的您最喜欢的 OpenVPN 服务器? 请:

/ip 云设置 ddns-enabled=yes

作为同行,我们给客户端输出结果:“:put [ip 云获取 dns 名称]=

我们从网上注册端口转发:

/ip 防火墙 nat 添加操作=dst-nat 链=dstnat dst-端口=1194
in-interface-list=WAN 协议=udp 到地址=172.17.17.17

项目 4 已准备就绪。

我们为第 5 点设置了防火墙和其他安全措施,与此同时,我们很高兴一切都已经为用户工作,并拿到装有最喜欢饮料的容器......
A! 隧道被遗忘了。

google文章配置的l2tp-client,已经上升到你喜欢的Dutch VDS了吗? 是的。
带有 IPsec 的 l2tp 服务器已经上升,客户端通过来自 IP 云的 DNS 名称(见上文)坚持? 是的。
我们靠在椅子上,喝着饮料,懒洋洋地思考任务的第 6 点和第 7 点。 我们认为 - 我们需要它吗? 尽管如此,它还是像 (c) 那样工作……因此,如果仍然不需要它,那就是它。 Multivan 实施。

什么是多人货车? 这是将多个 Internet 通道连接到一个路由器。

你不必进一步阅读这篇文章,因为除了炫耀可疑的适用性之外还能有什么?

对于那些留下来的人,他们对任务的第 6 点和第 7 点感兴趣,并且也感到完美主义的渴望,我们会深入研究。

实施多厢货车最重要的任务是正确的交通路线。 即:不管哪个(或哪个)见。 注意 3 ISP 的通道查看我们路由器上的默认路由,它应该返回对数据包来自的确切通道的响应。 任务很明确。 哪里有问题? 事实上,在一个简单的本地网络中,任务是相同的,但没有人会为额外的设置而烦恼,也不会感到麻烦。 不同之处在于,Internet 上的任何可路由节点都可以通过我们的每个通道访问,而不是像在简单的 LAN 中那样通过严格特定的通道访问。 而“麻烦”是,如果向我们请求 ISP3 的 IP 地址,那么在我们的例子中,答案将通过 ISP2 通道,因为默认网关指向那里。 离开并将被提供商丢弃为不正确。 问题已确定。 如何解决?

解决方案分为三个阶段:

  1. 预设。 这个阶段会设置路由器的基本设置:本地网络、防火墙、地址列表、发夹NAT等。
  2. 多货车。 在此阶段,必要的连接将被标记并分类到路由表中。
  3. 连接到 ISP。 在此阶段,将配置提供到 Internet 连接的接口,将激活路由和 Internet 信道保留机制。

1. 预设

1.1. 我们使用以下命令清除路由器配置:

/system reset-configuration skip-backup=yes no-defaults=yes

同意 ”危险的! 还是重置? [是/否]:”,并且在重新启动后,我们通过 MAC 连接到 Winbox。 在此阶段,清除配置和用户群。

1.2. 创建新用户:

/user add group=full name=knight password=ultrasecret comment=”Not horse”

在其下登录,删除默认的:

/user remove admin

注。 作者认为更安全并推荐使用的是删除而不是禁用默认用户。

1.3. 我们创建了基本的接口列表,以便于在防火墙、发现设置和其他 MAC 服务器中进行操作:

/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"

使用注释签署接口

/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"

并填写接口列表:

/interface list member add interface=ether1 list=WAN comment=ISP1
/interface list member add interface=ether2 list=WAN comment=ISP2 
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN  comment="LAN1"
/interface list member add interface=ether5 list=LAN  comment="LAN2"

注。 编写易于理解的注释是值得花时间在这上面的,而且它极大地促进了故障排除和理解配置。

出于安全原因,作者认为有必要将 ether3 接口添加到“WAN”接口列表中,尽管 ip 协议不会通过它。

不要忘记在ether3 上提升PPP 接口后,还需要将其添加到接口列表“WAN”中

1.4. 我们通过 MAC 将路由器隐藏在提供商网络的邻居检测和控制之外:

/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN

1.5. 我们创建了最少的防火墙过滤规则集来保护路由器:

/ip firewall filter add action=accept chain=input comment="Related Established Untracked Allow" 
connection-state=established,related,untracked

(该规则为从连接的网络和路由器本身发起的已建立和相关连接提供权限)

/ip firewall filter add action=accept chain=input comment="ICMP from ALL" protocol=icmp

(ping 而不仅仅是 ping。所有 icmp 都允许进入。对于查找 MTU 问题非常有用)

/ip firewall filter add action=drop chain=input comment="All other WAN Drop" in-interface-list=WAN

(关闭输入链的规则禁止来自互联网的所有其他内容)

/ip firewall filter add action=accept chain=forward 
comment="Established, Related, Untracked allow" 
connection-state=established,related,untracked

(该规则允许通过路由器的已建立和相关连接)

/ip firewall filter add action=drop chain=forward comment="Invalid drop" connection-state=invalid

(该规则通过路由器重置连接状态=无效的连接。Mikrotik 强烈推荐,但在极少数情况下它会阻止有用的流量)

/ip firewall filter add action=drop chain=forward comment="Drop all from WAN not DSTNATed"  
connection-nat-state=!dstnat connection-state=new in-interface-list=WAN

(该规则禁止来自 Internet 且未通过 dstnat 程序的数据包通过路由器。这将保护本地网络免受入侵者的侵害,入侵者与我们的外部网络处于同一广播域中,将我们的外部 IP 注册为网关,从而尝试“探索”我们的本地网络。)

注。 让我们假设网络 LAN1 和 LAN2 是可信的,并且它们之间和来自它们的流量未被过滤。

1.6. 创建一个包含不可路由网络列表的列表:

/ip firewall address-list
add address=0.0.0.0/8 comment=""This" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"
 list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS

(这是无法路由到 Internet 的地址和网络的列表,将相应地遵循。)

注。 该列表可能会发生变化,因此我建议您定期检查相关性。

1.7. 为路由器本身设置 DNS:

/ip dns set servers=1.1.1.1,8.8.8.8

注。 在当前版本的 ROS 中,动态服务器优先于静态服务器。 名称解析请求按列表中的顺序发送到第一个服务器。 当当前服务器不可用时,将执行到下一个服务器的转换。 超时时间长 - 超过 5 秒。 返回,当“倒下的服务器”恢复时,不会自动发生。 鉴于此算法和 multivan 的存在,作者建议不要使用提供商提供的服务器。

1.8. 设置本地网络。
1.8.1. 我们在 LAN 接口上配置静态 IP 地址:

/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"

1.8.2. 我们通过主路由表设置到本地网络的路由规则:

/ip route rule add dst-address=192.168.88.0/24 table=main comment=”to LAN1”
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"

注。 这是使用不通过默认路由的路由器接口的外部 IP 地址源访问 LAN 地址的快速简便方法之一。

1.8.3. 为 LAN1 和 LAN2 启用 Hairpin NAT:

/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" 
out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" 
out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0

注。 这允许您在网络内部时通过外部 IP 访问您的资源 (dstnat)。

2.其实multivan的实现很正确

为了解决“answer where they asked from”的问题,我们将使用两个 ROS 工具: 连接标记 и 路由标记. 连接标记 允许您标记所需的连接,然后使用此标签作为应用的条件 路由标记. 并且已经有了 路由标记 可以工作 IP路由 и 路由规则. 我们找到了工具,现在您需要决定要标记哪些连接 - 一次,确切地标记在哪里 - 两次。

对于第一个,一切都很简单 - 我们必须标记通过适当渠道从 Internet 到达路由器的所有连接。 在我们的例子中,这将是三个标签(按通道数):“conn_isp1”、“conn_isp2”和“conn_isp3”。

第二个的细微差别是传入连接将有两种类型:传输和用于路由器本身的连接。 连接标记机制在表中起作用 失踪. 在简化图上考虑包的移动,由 mikrotik-trainings.com 资源(非广告)的专家友情编译:

Mikrotik RouterOS 上的 Multivan 和路由

沿着箭头,我们看到数据包到达“输入接口”,通过链条“预路由” 然后才在街区里分为中转和本地“路由决定”。 因此,要用一块石头杀死两只鸟,我们使用 连接标记 在桌子上 破坏预路由 链条 预路由.

备注. 在 ROS 中,“Routing mark”标签在 Ip/Routes/Rules 部分以“Table”形式列出,在其他部分以“Routing Mark”形式列出。 这可能会给理解带来一些混乱,但实际上,这是一回事,是 linux 上 iproute2 中 rt_tables 的类比。

2.1. 我们标记来自每个提供商的传入连接:

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1  new-connection-mark=conn_isp1 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2  new-connection-mark=conn_isp2 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3  new-connection-mark=conn_isp3 passthrough=no

注。 为了不标记已经标记的连接,我使用 connection-mark=no-mark 条件而不是 connection-state=new 因为我认为这样更正确,以及在输入过滤器中拒绝丢弃无效连接。


passthrough=no - 因为在这种实现方法中,重新标记被排除在外,为了加快速度,您可以在第一次匹配后中断规则的枚举。

应该记住,我们还没有以任何方式干扰路由。 现在只有准备阶段。 下一实施阶段将处理从本地网络中的目的地通过已建立的连接返回的传输流量。 那些。 沿途通过路由器的那些数据包(参见图表):

“Input Interface”=>“Prerouting”=>“Routing Decision”=>“Forward”=>“Post Routing”=>“Output Interface” 并到达本地网络中的收件人。

重要的信息! 在 ROS 中,没有外部接口和内部接口的逻辑划分。 如果我们按照上图追踪响应数据包的路径,那么它会遵循与请求相同的逻辑路径:

“Input Interface”=>“Prerouting”=>“Routing Decision”=>“Forward”=>“Post Routing”=>“Output Interface” 只是为了一个请求”输入接口”是 ISP 接口,答案是 LAN

2.2. 我们将响应传输流量定向到相应的路由表:

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP1" connection-mark=conn_isp1 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP2" connection-mark=conn_isp2 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP3" connection-mark=conn_isp3 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no

评论。 in-interface-list=!WAN - 我们只处理来自本地网络和 dst-address-type=!local 的流量,它没有路由器本身接口地址的目标地址。

沿途到达路由器的本地数据包也是如此:

“输入接口”=>“预路由”=>“路由决策”=>“输入”=>“本地进程”

重要的信息! 答案将按以下方式进行:

”Local Process”=>”Routing Decision”=>”Output”=>”Post Routing”=>”Output Interface”

2.3. 我们将响应本地流量定向到相应的路由表:

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP1" connection-mark=conn_isp1 dst-address-type=!local 
new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP2" connection-mark=conn_isp2 dst-address-type=!local 
new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP3" connection-mark=conn_isp3 dst-address-type=!local 
new-routing-mark=to_isp3 passthrough=no

在这个阶段,可以认为准备向发出请求的 Internet 通道发送响应的任务已经解决。 一切都被标记、标记并准备好被路由。
此设置的一个极好的“副作用”是能够同时使用来自两个(ISP2、ISP3)提供商的 DSNAT 端口转发。 一点也不,因为在 ISP1 上我们有一个不可路由的地址。 这种影响很重要,例如,对于具有两个查看不同 Internet 通道的 MX 的邮件服务器。

为了消除具有外部 IP 路由器的本地网络运行的细微差别,我们使用段落中的解决方案。 1.8.2 和 3.1.2.6。

另外,你可以使用带有标记的工具来解决第3段的问题。 我们这样实现:

2.4. 我们将来自本地客户端的流量从路由列表定向到相应的表:

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 
passthrough=no src-address-list=Via_ISP1

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP2" dst-address-list=!BOGONS new-routing-mark=to_isp2 
passthrough=no src-address-list=Via_ISP2

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 
passthrough=no src-address-list=Via_ISP3

结果,它看起来像这样:

Mikrotik RouterOS 上的 Multivan 和路由

3. 建立与 ISP 的连接并启用品牌路由

3.1. 建立与 ISP1 的连接:
3.1.1. 配置静态 IP 地址:

/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"

3.1.2. 设置静态路由:
3.1.2.1. 添加默认的“紧急”路由:

/ip route add comment="Emergency route" distance=254 type=blackhole

注。 该路由允许来自本地进程的流量通过路由决策阶段,而不管任何提供商的链接状态如何。 传出本地流量的细微差别是,为了让数据包至少移动到某个地方,主路由表必须有一条到默认网关的活动路由。 如果没有,那么包裹将被简单地销毁。

作为工具扩展 检查网关 为了更深入地分析通道状态,我建议使用递归路由方法。 该方法的实质是我们告诉路由器不是直接寻找到它的网关的路径,而是通过一个中间网关。 将分别选择 4.2.2.1、4.2.2.2 和 4.2.2.3 作为 ISP1、ISP2 和 ISP3 的此类“测试”网关。

3.1.2.2. 路由到“验证”地址:

/ip route add check-gateway=ping comment="For recursion via ISP1"  
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=10

注。 我们将 ROS 目标范围中的范围值降低为默认值,以便将来使用 4.2.2.1 作为递归网关。 我强调:到“测试”地址的路由范围必须小于或等于将引用测试地址的路由的目标范围。

3.1.2.3. 没有路由标记的流量的递归默认路由:

/ip route add comment="Unmarked via ISP1" distance=2 gateway=4.2.2.1

注。 使用 distance=2 值是因为根据任务条件 ISP1 被声明为第一个备份。

3.1.2.4。 具有路由标记“to_isp1”的流量的递归默认路由:

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 
routing-mark=to_isp1

注。 实际上,在这里我们终于开始享受在第 2 段中进行的准备工作的成果。


在此路由上,所有具有标记路由“to_isp1”的流量都将被定向到第一个提供商的网关,而不管主表当前激活哪个默认网关。

3.1.2.5。 ISP2 和 ISP3 标记流量的第一个回退递归默认路由:

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp2
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp3

注。 除其他事项外,需要这些路由来保留来自地址列表“to_isp*”成员的本地网络的流量

3.1.2.6. 我们通过ISP1为路由器的本地流量注册到Internet的路由:

/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1

注。 结合第 1.8.2 节中的规则,它提供了对具有给定源的所需频道的访问。 这对于构建指定本地端 IP 地址(EoIP、IP-IP、GRE)的隧道至关重要。 由于ip route rules中的规则是从上到下执行的,直到第一次匹配到条件,那么这条规则应该在1.8.2的规则之后。

3.1.3. 我们为传出流量注册 NAT 规则:

/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1"  
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2

注。 NATim 所有出去的东西,除了进入 IPsec 策略的东西。 除非绝对必要,否则我尽量不使用 action=masquerade。 它比 src-nat 更慢且占用更多资源,因为它会为每个新连接计算 NAT 地址。

3.1.4. 我们将禁止通过其他提供商访问的列表中的客户端直接发送到 ISP1 提供商的网关。

/ip firewall mangle add action=route chain=prerouting comment="Address List via ISP1 only" 
dst-address-list=!BOGONS passthrough=no route-dst=100.66.66.1 
src-address-list=Via_only_ISP1 place-before=0

注。 action=route 具有更高的优先级,在其他路由规则之前应用。


place-before=0 - 将我们的规则放在列表的第一位。

3.2. 建立与 ISP2 的连接。

由于 ISP2 提供商通过 DHCP 为我们提供设置,因此使用触发 DHCP 客户端时启动的脚本进行必要的更改是合理的:

/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if ($bound=1) do={r
    n    /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 
           dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=10r
    n    /ip route add comment="Unmarked via ISP2" distance=1 gateway=4.2.2.2;r
    n    /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 
           routing-mark=to_isp2;r
    n    /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 
           routing-mark=to_isp1;r
    n    /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 
           routing-mark=to_isp3;r
    n    /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
           out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2" 
           place-before=1;r
    n    if ([/ip route rule find comment="From ISP2 IP to Inet"] ="") do={r
    n        /ip route rule add comment="From ISP2 IP to Inet" 
               src-address=$"lease-address" table=to_isp2 r
    n    } else={r
    n       /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=no 
              src-address=$"lease-address"r
    n    }      r
    n} else={r
    n   /ip firewall nat remove  [find comment="NAT via ISP2"];r
    n   /ip route remove [find comment="For recursion via ISP2"];r
    n   /ip route remove [find comment="Unmarked via ISP2"];r
    n   /ip route remove [find comment="Marked via ISP2 Main"];r
    n   /ip route remove [find comment="Marked via ISP1 Backup1"];r
    n   /ip route remove [find comment="Marked via ISP3 Backup2"];r
    n   /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=yesr
    n}r
    n" use-peer-dns=no use-peer-ntp=no

Winbox 窗口中的脚本本身:

Mikrotik RouterOS 上的 Multivan 和路由
注。 脚本的第一部分在租约成功获得时触发,第二部分在租约释放后触发。见注 2

3.3. 我们建立了与 ISP3 提供商的连接。

由于设置提供程序为我们提供了动态,因此使用在 ppp 接口启动后和下降后启动的脚本进行必要的更改是合理的。

3.3.1. 首先我们配置配置文件:

/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client 
on-down="/ip firewall nat remove  [find comment="NAT via ISP3"];r
    n/ip route remove [find comment="For recursion via ISP3"];r
    n/ip route remove [find comment="Unmarked via ISP3"];r
    n/ip route remove [find comment="Marked via ISP3 Main"];r
    n/ip route remove [find comment="Marked via ISP1 Backup2"];r
    n/ip route remove [find comment="Marked via ISP2 Backup2"];r
    n/ip route rule set [find comment="From ISP3 IP to Inet"] disabled=yes;" 
on-up="/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 
    dst-address=4.2.2.3/32 gateway=$"remote-address" scope=10r
    n/ip route add comment="Unmarked via ISP3" distance=3 gateway=4.2.2.3;r
    n/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 
    routing-mark=to_isp3;r
    n/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp1;r
    n/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp2;r
    n/ip firewall mangle set [find comment="Connmark in from ISP3"] 
    in-interface=$"interface";r
    n/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
    out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3" 
    place-before=1;r
    nif ([/ip route rule find comment="From ISP3 IP to Inet"] ="") do={r
    n   /ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address" 
    table=to_isp3 r
    n} else={r
    n   /ip route rule set [find comment="From ISP3 IP to Inet"] disabled=no 
    src-address=$"local-address"r
    n};r
    n"

Winbox 窗口中的脚本本身:

Mikrotik RouterOS 上的 Multivan 和路由
注。
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface";
允许您正确处理界面的重命名,因为它使用它的代码而不是显示名称。

3.3.2. 现在,使用配置文件创建 ppp 连接:

/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no 
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client user=isp3_client

最后,让我们设置时钟:

/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

对于那些读到最后的人

建议的实现 multivan 的方法是作者的个人偏好,并不是唯一可能的方法。 ROS工具包广泛且灵活,一方面给初学者带来了困难,另一方面也是其受欢迎的原因。 学习、尝试、发现新的工具和解决方案。 例如,作为所获得知识的应用,可以在 multivan 的实现中替换工具 检查网关 递归路线 网络观察.

笔记

  1. 检查网关 - 一种允许您在连续两次检查网关可用性失败后停用路由的机制。 检查每 10 秒执行一次,加上响应超时。 总的来说,实际切换时间在 20-30 秒的范围内。 如果这样的切换时间不够,可以选择使用该工具 网络观察,其中可以手动设置检查计时器。 检查网关 不会在链路上的间歇性数据包丢失时触发。

    重要的! 停用主要路由将停用引用它的所有其他路由。 因此,让他们指出 检查网关=平 不用了

  2. 碰巧DHCP机制出现故障,看起来像客户端卡在了renew状态。 在这种情况下,脚本的第二部分将不起作用,但它不会阻止交通正确行走,因为状态会跟踪相应的递归路线。
  3. ECMP(等价多路径) - 在 ROS 中,可以设置具有多个网关和相同距离的路由。 在这种情况下,连接将使用循环算法按指定网关的数量按比例跨通道分配。

为了推动撰写文章,帮助塑造其结构和重音位置 - 个人感谢 Evgeny @jscar

来源: habr.com