更正和添加02/11/2020
引言
除了虚荣心外,俄语电报社区的相关群体对此主题的提问也令人沮丧,这促使我着眼于这篇文章。 本文针对Mikrotik RouterOS(以下简称ROS)的新手管理员。 它只考虑了多厢货车,侧重于路由。 奖金包括最低限度的设置,以确保安全便捷的操作。 那些希望公开这些队列,负载平衡,VLAN,网桥,对通道状况进行多阶段深入分析的人员等-不会浪费时间和精力。
源数据
作为测试对象,选择了具有ROS版本6.45+的五端口Mikrotik路由器。 它将在两个局域网(LAN1和LAN2)和三个提供商(ISP1,ISP2,ISP3)之间路由通信。 到ISP1的通道具有静态的“灰色”地址,通过DHCP接收到的ISP2为“白色”,具有PPPoE身份验证的ISP3为“白色”。 连接图如图所示:

任务是根据该方案配置MTK路由器,以便:
- 提供自动切换到备份提供程序的功能。 主要提供者是ISP2,第一个保留者是ISP1,第二个保留者是ISP3。
- 组织仅通过ISP1访问Internet的LAN1。
- 提供基于地址列表通过选定的提供程序将流量从本地网络路由到Internet的功能。
- 提供从局域网到Internet(DSTNAT)发布服务的可能性
- 配置防火墙过滤器,以从Internet提供最低限度的足够安全性。
- 路由器可以通过三个提供商中的任何一个发出自己的流量,具体取决于所选的源地址。
- 提供响应数据包到它们来自的通道的路由(包括LAN)。
备注。 我们将“从头开始”配置路由器,以确保在不同版本之间“开箱即用”启动配置时不会出现意外。 Winbox被选为配置工具,更改将在其中直观显示。 设置本身将通过Winbox终端中的命令进行设置。 用于配置的物理连接是通过与Ether5接口的直接连接。关于什么是多厢货车,是一个问题还是狡猾的聪明人在周围串谋网络的简短讨论
一个好奇而专心的管理员,自己建立了这样的计划,突然突然意识到它在正常工作。 是的,是的,没有这些您的自定义路由表和其他路由规则,有关该主题的大多数文章都包含其中。 看看吗?
我们可以在接口和默认网关上配置寻址吗? 是的:
在ISP1上注册了
距离= 2和
check-gateway = ping的地址和网关
。在ISP2上,客户端的默认dhcp设置分别是距离,等于1。
在ISP3的客户端的pppoe设置中,使用
add-default-route = yes设置
default-route-distance = 3 。
不要忘记为输出注册NAT:
/ ip防火墙nat添加操作=伪装链= srcnat出接口列表= WAN结果,LAN的用户可以通过主要的ISP2提供程序来加载密封信息,并且使用
检查网关机制保留了通道(
请参阅注1)。任务的第1点已实现。 带有标签的多厢货车在哪里? 不...
再远一点 您需要通过ISP1从LAN释放特定的客户端:
/ ip防火墙mangle添加操作=路由链=路由dst-address-list =!BOGONS \
passthrough =是route-dst = 100.66.66.1 src-address-list = Via_ISP1
/ ip防火墙mangle添加操作=路由链=路由dst-address-list =!BOGONS \
passthrough =无路由-dst = 100.66.66.1 src地址= 192.168.88.0 / 24任务的项目2和3已实施。 标签,邮票,路线规则,您在哪里?!
是否需要为来自Internet的客户端授予您最喜欢的OpenVPN服务器(地址为172.17.17.17)的访问权限? 请:
/ ip cloud set ddns-enabled = yes我们将输出结果作为盛宴提供给客户端:“
:put [ip cloud get dns-name] ”
我们从Internet注册端口转发:
/ ip防火墙nat添加操作= dst-nat链= dstnat dst-port = 1194 \
输入接口列表= WAN协议= udp到地址= 172.17.17.17点4准备就绪。
我们为第5点设置了防火墙和其他安全保护措施,与此同时,我们很高兴一切都对用户有效,并且正在为装有喜欢的饮料的容器服务……
啊! 隧道仍然被遗忘。
根据googled文章配置的l2tp客户端上升到了最受欢迎的荷兰VDS? 是的
具有IPsec的l2tp服务器上升了,而来自IP Cloud的DNS名称的客户端(请参见上文)是否坚持? 是的
向后倾斜,喝一小口饮料,我们无所事事地检查了问题的第六和第七项。 我们认为-我们需要吗? 一切都在那样工作...因此,如果没有必要,那就足够了。 实施Multivan。
什么是多厢货车? 这是几个Internet通道到一个路由器的连接。您无法进一步阅读该文章,因为除了炫耀可应用性之外,还有什么?
与剩下的,对任务的第6点和第7点感兴趣并且还感到完美主义之痒的人们一起,我们会更深入地学习。
实施多厢货车的最重要任务是正确的交通路线。 即:无论在哪个(或哪个)
注释3中,提供商的通道查看我们路由器上的默认路由,都应将答案准确地返回到数据包所来自的通道。 任务很明确。 问题出在哪里? 确实,在简单的本地网络中,任务是相同的,但是没有人会担心其他设置,也不会感到麻烦。 区别在于,Internet上的任何路由节点都可以通过我们的每个通道访问,而不是像在简单的LAN中那样通过严格特定的通道访问。 但是“麻烦”是,如果我们收到了对ISP3 IP地址的请求,那么在我们的情况下,答案将通过ISP2通道,因为默认网关指向那里。 它会离开并被提供者视为不正确而丢弃。 我们决定了这个问题。 怎么解决呢?
解决方案分为三个阶段:
- 预配置 在此阶段,将设置路由器的基本设置:局域网,防火墙,地址列表,发夹式NAT等。
- 多厢货车。 在此阶段,必要的连接将根据路由表进行标记和排序。
- 连接到ISP。 在此阶段,将配置提供Internet连接的接口,将涉及路由和Internet通道的预留机制。
备注。 专门选择了三种不同类型的ISP连接,以显示设置具有动态地址的多厢货车并没有解决任何问题,并演示了解决方案之一。重要! 要根据使用
距离路由成本指定的算法切换频道,
请使用
检查网关机制
。 见注1本文中给出的脚本与通道保留无关。
1.预设
1.1。 我们使用以下命令清除路由器配置:
/system reset-configuration skip-backup=yes no-defaults=yes
同意“
危险! 仍要重置吗? [y / N]: ”,重新启动后,我们通过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
(关闭输入链的规则禁止来自Internet的所有其他内容)
/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秒。 恢复“下降的服务器”后不会自动返回。 考虑到该算法和多厢货车的存在,作者建议不要使用提供商提供的服务器。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地址访问本地网络地址的最简单,最快的方法之一,默认路由不会通过该地址通过。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
备注。 这允许LAN1和LAN2中的用户通过外部IP(dstnat)访问与位于同一网段中的用户所在的服务器。2.实际上,实施正确的多厢货车
为了解决“在哪里回答他们的问题”的问题,我们将使用两个ROS工具:
连接标记和
路由标记 。
连接标记允许您标记所需的连接,并继续使用该标签作为应用
路由标记的条件。 并且已经有了
路由标记 ,就可以使用
ip路由和
路由规则 。 我们找到了工具,现在我们需要确定要标记的连接-一个,确切标记的位置-两个。
首先,一切都很简单-我们必须标记通过适当的通道从Internet到路由器的所有连接。 在我们的示例中,这将是三个标签(根据通道数):“ conn_isp1”,“ conn_isp2”和“ conn_isp3”。
与第二种方式的细微差别在于,传入的连接将有两种类型:转接和用于路由器本身的那些。 连接标记机制在
mangle表中起作用。 在简化的图表上考虑包装的移动情况,该图表是由资源mikrotik-trainings.com的专家(不是广告)收集的:

沿着箭头,我们看到到达“
输入接口 ”的数据包通过“
预路由 ”链,然后才在“
路由决策 ”块中分为传输和本地。 因此,要用一块石头杀死两只鸟,请使用“
预布线”链的“
缠结预布线”表中的“
连接标记” 。
备注 。 在ROS中,“路由标记”标签在“ Ip /路由/规则”部分中表示为“表格”,在其余部分中表示为“路由标记”。 这可能会导致理解上的混乱,但是实际上,这是一个相同的问题,并且是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
备注。
那些尝试按字面意思并按阅读顺序重复阅读文章中建议的设置的读者,当输入第三个命令时,他们将遇到错误:“输入与接口的任何值都不匹配”。 这是由于缺少“ pppoe-isp3”接口,该接口将在第3.3.2节中进行配置。 此时,您可以输入“ ether3”而不是“ pppoe-isp3”。 在完成第3.3.2节之后,您应该返回并放置接口的当前名称。
为了不标记已标记的连接,我使用条件connection-mark = no-mark而不是connection-state = new。
passthrough = no-因为在此实现方法中,排除了重新标记,并且为了加快速度,您可以在第一次匹配后中断规则的枚举。应该记住,我们仍然不干扰路由。 现在只有准备阶段。 实施的下一阶段将是处理传输流量,该传输流量是通过本地网络中收件人的稳定连接返回的。 即 那些穿过路由器的数据包(见图):
“输入接口” =>“预路由” =>“路由决策” =>“转发” =>“后路由” =>“输出接口”,并到达本地网络上的目的地。
重要! 在ROS中,没有将逻辑划分为外部和内部接口。 如果我们在下图中跟踪响应数据包的路径,它将遵循与请求相同的逻辑路径:
“输入接口” =>“预路由” =>“路由决策” =>“转发” =>“后路由” =>“输出接口”仅针对请求“
输入接口 ”有一个ISP接口,而答案是局域网
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的流量,而没有路由器本身的接口地址的目标地址。
对于沿途到达路由器的本地数据包也是如此:
“输入接口” =>“预路由” =>“路由决策” =>“输入” =>“本地过程”重要! 答案将遵循以下路径:
“本地过程” =>“路由决策” =>“输出” =>“后路由” =>“输出接口”
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上我们没有可路由的地址。 例如,对于具有两个MX且查看不同Internet通道的邮件服务器,此效果非常重要。
为了消除使用外部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
结果,它看起来像这样(图片是可点击的):

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
备注。 该路由允许来自本地进程的流量通过“路由决策”阶段,而不管任何提供者的通道状态如何。 外出本地流量的细微差别在于,为了使数据包至少移动到某个地方,到默认网关的活动路由必须存在于主路由表中。 如果没有,那么包装将被简单地销毁。作为
检查网关工具的扩展,
可以对通道状态进行更深入的分析,我建议使用递归路由方法。 该方法的本质是,我们告诉路由器不直接而是通过中间网关搜索通往其网关的路径。 作为此类“测试”网关,将分别为ISP1,ISP2和ISP3选择4.2.2.1、4.2.2.2和4.2.2.3。
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 check-gateway=ping comment="Unmarked via ISP1" \ distance=2 gateway=4.2.2.1
备注。 使用距离= 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规则中的规则是从上到下执行的,直到条件首次匹配时,此规则应在第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
备注。 除了它属于IPsec策略外,NAT就是一切。 除非绝对必要,否则我尽量不要使用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 =路由具有更高的优先级,并且比其他路由规则更早地应用。
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 remove [ find gateway=\"4.2.2.2\" ]; /ip route remove \ [ find where dst-address ~\"4.2.2.2\" ]\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=10\r\ \n /ip route add check-gateway=ping 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\"\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 remove [ find gateway=\"4.2.2.2\" ]; /ip route remove \ [ find where dst-address ~\"4.2.2.2\" ]\r\ \n /ip firewall nat remove [find comment=\"NAT via ISP2\"]\r\ \n /ip route rule remove [find comment=\"From ISP2 IP to Inet\"]\r\ \n}\r\ \n" use-peer-dns=no use-peer-ntp=no
Winbox窗口中的脚本本身(可单击):
备注。 脚本的第一部分在成功收到租约时触发,第二部分-释放租约后触发。 见注23.3。 我们配置到ISP3提供程序的连接。
由于配置提供程序使我们具有动态性,因此可以合理地对脚本进行必要的更改,这些脚本在ppp接口的上升和下降之后开始。
备注。 可以将ppp接口指定为网关,而不是IP地址。 但是,在这种情况下,无法激活递归路由。 因此,我们将提供者端的IP地址放入变量中,并以与其他提供者相同的方式进一步使用它3.3.1。 首先,配置配置文件:
/ppp profile add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client \ on-down="/ip route remove [ find gateway=\"4.2.2.3\" ]\r\ \n/ip route remove [ find where dst-address ~\"4.2.2.3\" ]\r\ \n/ip firewall nat remove [find comment=\"NAT via ISP3\"]\r\ \n/ip route rule remove [find comment=\"From ISP3 IP to Inet\"]" \ on-up="/ip route remove [ find gateway=\"4.2.2.3\" ]; /ip route remove \ [ find where dst-address ~\"4.2.2.3\" ]\r\ \n/ip route add check-gateway=ping comment=\"For recursion via ISP3\" distance=1 \ dst-address=4.2.2.3/32 gateway=\$\"remote-address\" scope=10\r\ \n/ip route add check-gateway=ping 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\"\r\ \n/ip route rule add comment=\"From ISP3 IP to Inet\" \ src-address=\$\"local-address\" table=to_isp3 "
Winbox窗口中的脚本本身(可单击):
备注。 弦乐
/ ip防火墙mangle设置[查找注释=“从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
备注。 一些提供程序“忘记”提供“远程地址”参数。 在这种情况下,连接后,配置脚本将无法正常工作,并且在日志中,您将看到以下错误:
pppoe,ppp,信息pppoe-isp3:无法确定远程地址,使用xxx.xxx.xxx.xxx
要解决此问题,您需要在ppp配置文件中手动设置地址(任何虚拟):
/ppp profile set isp3_client remote-address=169.254.69.96
弦乐
/ ip防火墙mangle设置[查找注释=“从ISP3中的连接标记”] in-interface = $“ interface”;
允许您正确处理接口的重命名,因为它使用其代码而不是显示名称。最后,设置时钟: /system ntp client set enabled=yes \ server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org
对于那些读到最后的人
提出的实施多厢货车的方法是作者的个人喜好,并非唯一可行的方法。ROS工具包具有广泛而灵活的特性,一方面给初学者带来了困难,另一方面也为普及提供了理由。探索,尝试,发现新的工具和解决方案。例如,作为所学知识的应用,在这种多厢货车的实施中,有可能用Netwatch的递归路由替换check-gateway工具。注意事项
- Check-gateway — , . 10 , . , 20-30 . — Netwatch , .
Check-gateway .
! , . check-gateway=ping . - 碰巧DHP操作机制发生故障,这看起来像客户端处于续订状态。在这种情况下,脚本的第二部分将无法工作,但是流量不会损害正常行走,因为状态会监视相应的递归路由。
- ECMP(等价多路径) -ROS能够指定具有多个网关且距离相同的路由。在这种情况下,将使用循环算法根据指定网关的数量将连接分布在通道上。
为了推动撰写本文,请帮助塑造文章的结构并强调重点-感谢Eugene @jscar