openwrt - mwan3¶
功能和特性¶
- 基于数值权重分配的出站WAN流量负载均衡或多个WAN接口的故障转移。
- 使用重复测试监视每个WAN连接,如果第一个WAN接口失去连接,可以自动将出站流量路由到另一个WAN接口。
- 创建出站流量规则,以自定义哪个出站连接应该使用哪个WAN接口(基于策略的路由)。这可以根据源IP、目的IP、源端口、目的端口、IP协议类型等进行定制。
- 支持物理和/或逻辑WAN接口。
- 用于标记流出流量的防火墙掩码(默认
0x3F00
)可以在/etc/config/mwan3
globals部分配置。如果您还使用其他使用防火墙屏蔽特性的包(nodogsplash),这是有用的。该值也用于设置支持多少个接口。
多WAN管理工作原理图¶
组成部分介绍¶
mwan3配置由
globals
interfaces
members
policies
rules
几部分组成。
- Globals configuration
Name | Type | Required | Default | Description |
---|---|---|---|---|
mmx_mask | string | yes | 0x3F00 | 防火墙掩码值 |
logging | boolean | no | 0 | 全局防火墙日志记录。必须启用此功能,才能发生任何特定于规则的日志记录。 |
loglevel | emerg alert crit error warning notice info debug | 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 |
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
每个成员表示一个
metric
和weight
的接口。策略中引用成员来定义具有相应度量和负载均衡权重的接口池。成员不能直接用于规则。一个有效的 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 的成员将基于此权重值分配负载 |
例如:
- 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' #指定走哪条侧略