Skip to content

openwrt - mwan3

功能和特性

  • 基于数值权重分配的出站WAN流量负载均衡或多个WAN接口的故障转移。
  • 使用重复测试监视每个WAN连接,如果第一个WAN接口失去连接,可以自动将出站流量路由到另一个WAN接口。
  • 创建出站流量规则,以自定义哪个出站连接应该使用哪个WAN接口(基于策略的路由)。这可以根据源IP、目的IP、源端口、目的端口、IP协议类型等进行定制。
  • 支持物理和/或逻辑WAN接口。
  • 用于标记流出流量的防火墙掩码(默认0x3F00)可以在/etc/config/mwan3 globals部分配置。如果您还使用其他使用防火墙屏蔽特性的包(nodogsplash),这是有用的。该值也用于设置支持多少个接口。

多WAN管理工作原理图

image-20230302142514691

组成部分介绍

mwan3配置由globals interfaces members policies rules几部分组成。

  • Globals configuration
Name Type Required Default Description
mmx_mask string yes 0x3F00 防火墙掩码值
logging boolean no 0 全局防火墙日志记录。必须启用此功能,才能发生任何特定于规则的日志记录。
loglevel emergalertcriterrorwarningnoticeinfodebug no notice 防火墙loglevel
rtmon_interval number no 5 mwan3rtmon应该多久更新一次接口路由表(秒)自v2.9.0以来已弃用
rt_table_lookup number no (none) 指定要扫描连接网络的附加路由表。
  • Interface configuration

每个WAN接口配置一个接口部分,并定义如何测试每个WAN接口的up/down状态。每个接口部分名称必须与网络配置/etc/config/network中的接口名称相对应。

在大多数情况下,默认值应该适用于大多数配置。更改默认设置的主要原因是缩短接口故障转移前的时间(通过减少接口关闭前的 ping 间隔和 ping 次数)或延长时间以避免错误的链路故障报告。请注意,如果您更改低带宽接口(例如 3G)或繁忙接口的超时值,则可能会出现将WAN标记为关闭的误报。不建议使用小于 2 秒的超时值。

Name Type Required Default Description
Interface name string yes (none) 接口名称要和/etc/config/network接口名保持一致
track_method ping arping httping nping-tcp nping-udp nping-icmp nping-arp no ping mwan3track的跟踪方法
enabled boolean no 0 mwan3是否应该运行在/跟踪这个接口上?
track_ip list of ip addresses no (none) 测试IP,用来检测接口是否在线,如果缺少这个值,接口总是被认为是up的。
flush_conntrack list no (none) 刷新接口事件的全局防火墙conntrack表
reliability number no 1 必须响应的track_ip主机数量。确保至少定义了这么多' track_ip '主机,否则接口将一直被认为是关闭的。
count number no 1 每次测试发送到每个主机的检查数
timeout seconds no 4 请求后等回应的超时时间。(单位s)
interval seconds no 10 每次测试之间的间隔。(单位s)
failure_interval seconds no <interval> 在故障检测过程中,每次测试之间的间隔。(单位s)
recovery_interval seconds no <interval> 在恢复检测过程中,每次测试之间的间隔。(单位s)
keep_failure_interval boolean no 0 如果出现错误,请在拆解(故障检测)期间保持每个测试之间的秒数。
check_quality boolean no 0 除了接口处于up状态外,' check_quality '选项还可以通过丢包和/或延迟测量来检查整体链路质量。
failure_latency number no 1000 启用' check_quality '时的最大数据包延迟毫秒数。
recovery_latency number no 500 启用' check_quality '时,以毫秒为单位的最小数据包延迟。
failure_loss number no 40 启用' check_quality '时最大丢包百分比。
recovery_loss number no 10 启用' check_quality '时,最小丢包百分比。
initial_state online offline no online 如果值为**offline**,则流量只有在mwan3track首先检查连接时才会通过该接口。如果值为**online**,表示不等待mwan3track测试,接口立即被标记为online。
family ipv4 ipv6 no ipv4
max_ttl number no 60 生存时间(TTL)或跳数限制。仅当' track_method '是ping时有效。
size number no 56 要使用的ping包的大小,以字节为单位。仅当' track_method '是ping时有效。
up number no 5 成功个数,出现几个ping能成功时就认定已经掉线的WAN口又上线了
down number no 5 失败个数,出现几个ping不通时就认定该wan口掉线了

例如:

config interface'wan'
    option enabled'1'
    list track_ip'1.0.0.1'
    list track_ip'1.1.1.1'
    list track_ip'208.67.222.222'
    list track_ip'208.67.220.220'
    option family'ipv4'

可靠的公共IP地址用来ping

DNS service IPv4 resolvers IPv6 resolvers
Level 3 communications 209.244.0.3
209.244.0.4
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6
Google DNS 8.8.4.4
8.8.8.8
2001:4860:4860::8844
2001:4860:4860::8888
Facebook 173.252.120.6
OpenDNS 208.67.220.220
208.67.222.222
2620:0:ccc::2
2620:0:ccd::2
Cloudflare 1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001
Hurricane Electric (HE.net) 74.82.42.42 2001:470:20::2
Quad9 9.9.9.9
149.112.112.112
2620:fe::fe 2620:fe::9
  • Member configuration

每个成员表示一个metricweight 的接口。策略中引用成员来定义具有相应度量和负载均衡权重的接口池。成员不能直接用于规则。一个有效的 mwan3 配置至少配置了 2 个成员。

Name Type Required Default Description
Member name string yes (none) 成员配置的名称,然后在策略中引用它。
interface string yes (none) 成员应用于该接口(应与上面的接口名称保持一致)
metric number no 1 数值越小,权重越高
weight number no 1 具有相同metric 的成员将基于此权重值分配负载

例如:

config member 'wan_m1_w3'
    option interface 'wan'
    option metric '1'
    option weight '3'
  • Policy configuration

策略定义流量如何通过不同的WAN接口进行路由。每个策略都必须有一个或多个分配给它的成员,这定义了策略的流量行为。如果策略只有一个成员,则流量只会流出该成员。如果一个策略有多个成员,它将在成员之间进行负载平衡,或者使用一个成员但故障转移到另一个成员,具体取决于成员的配置方式。

如果有多个成员分配给一项策略,则策略中具有较低指标的成员优先于较高指标的成员。具有相同指标的成员将进行负载平衡。负载平衡成员(具有相同的指标)将根据分配的权重值分配负载。

工作的 mwan3 配置至少配置了 1 个策略。

Name Type Required Default Description
Policy name string yes (none) 策略名(不超过15个字符)
Members assigned string yes (none) 一个或者多个
last_resort unreachable (reject) blackhole (drop) default (use main routing table) no unreachable 如果策略中的所有WAN成员都down,则回退路由

例如:

config policy 'balanced'
    list use_member 'wan_m1_w3'
    list use_member 'wanb_m1_w3'
    list use_member 'wan6_m1_w3'
    list use_member 'wanb6_m1_w3'
    option last_resort 'unreachable'
  • Rule configuration

规则描述要匹配的流量以及为该流量分配的策略。

  • 规则指定哪些流量将使用特定策略
  • 规则基于IP地址、端口或协议
  • 忽略匹配规则下面的规则
  • 不匹配任何规则的流量使用主路由表进行路由
  • 发往已知(非默认)网络的流量由主路由表处理
Name Type Required Default Description
Rule name string yes (none) 规则名(不超过15个字符)
use_policy string yes (none) 使用哪条策略
src_ip IP address no any 匹配源IP地址
src_port port or range no any 源端口或者范围
proto tcp udp icmp all no all protocol.
dest_ip IP address no any 匹配目的IP地址
dest_port port or range no any 目的端口或者范围
ipset string no (none) 目的IP地址匹配ipset集
sticky boolean no 0 允许来自同一源IP地址的流量在超时限制内使用与前一次会话相同的广域网接口。
timeout number no 600 超时时间(秒为单位)
family ipv4 ipv6 any no any
logging boolean no 0 启用防火墙规则日志记录(也必须启用全局mwan3日志记录设置)。

例如:

config rule 'default_rule_v4'
    option dest_ip '0.0.0.0/0'
    option family 'ipv4'
    option use_policy 'wan_wanb'

或者使用逗号 将多个端口或源/目标IP地址分组在单个规则下

config rule 'multi_ip_rule'
       option dest_ip '1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4'
       option family 'ipv4'
       option use_policy 'wan_only'

以配置文件来说明

/etc/config/mwan3

#首先要设置所有的WAN口,这些WAN口的名字必须和network配置文件的WAN口名字一致
config interface 'wan0'
        option reliability '1'              #可靠性,测试下面IP的可靠性,必须是有响应的链接的个数。简单来说就是要求下面IP几个能ping通
        option count '1'                    #ping几次
        option timeout '2'                  #ping后如果超时,超时几秒
        option interval '5'                 #多次ping之间的间隔时间
        option down '3'                     #出现几个ping不通时就认定该wan口掉线了
        option up '8'                       #出现几个ping能成功时就认定已经掉线的WAN口又上线了
        option enabled '1'
        list track_ip '8.8.8.8'             #测试IP,验证是否能ping的通。这里总共设置了3个
        list track_ip '208.67.220.220'
        list track_ip '114.114.114.114'

config interface 'wan'
        option enabled '1'
        option reliability '2'
        option count '1'
        option timeout '2'
        option interval '5'
        option down '3'
        option up '8'
        list track_ip '8.8.8.8'
        list track_ip '208.67.220.220'
        list track_ip '114.114.114.114'

config interface 'wwan'
        option count '1'
        option timeout '2'
        option interval '5'
        option down '3'
        option up '8'
        option enabled '1'
        list track_ip '8.8.8.8'
        list track_ip '208.67.220.220'
        list track_ip '114.114.114.114'
        option reliability '2'

#设置成员的权重和跃点值,每一个接口可以包含多重成员定义,每一个成员定义必须有正确的名称。
config member 'wan0_m1_w1'             
        option interface 'wan0'        
        option metric '1'              #跃点数数值越小表示优先级越高
        option weight '1'              #数值越大分配到这个接口的流量越多,相同的权重,即平均分配流量

config member 'wan_m2_w1'      
        option interface 'wan' 
        option metric '2'
        option weight '1'     

config member 'wwan_m3_w1'    
        option interface 'wwan'
        option metric '3' 
        option weight '1'      

#创建一条路由策略,包括一个或者几个成员。每个策略必须有正确的名称。可以创建多重策略,以至于可以使不同的通信走不同的主/次wan口                   
config policy 'wan0_wan_wwan'  
        list use_member 'wan0_m1_w1'
        list use_member 'wan_m2_w1'
        list use_member 'wwan_m3_w1'
        option last_resort 'default'

#设置通信规则,从你设置的规则由上到下依次匹配,如果你定义的一条规则匹配上了,后面的规则都将忽略。如果平衡选项已经设置,mwan3将使每一个新的包走同一个目标主机地址来到达负载平衡,如果没有设置,那么mwan3会根据目标地址自动负载平衡 
config rule 'default_rule'          
        option dest_ip '0.0.0.0/0'              #目标IP
        option use_policy 'wan0_wan_wwan'       #指定走哪条侧略