Multiwan

multiwan 是一个能让多WAN设置变得简单易用可维护的代理脚本。它支持负载均衡,failover,还有容易配置的出入规则。multiwan 随包提供了uci设置文件 /etc/config/multiwan

不像那些"channel bonding(多网卡冗余)" 或者 "link aggregation(链路聚合技术)" , multiwan 引导每一个独立的会话走不太繁忙的WAN接口,并且这个会话到结束为止都只通过一个接口。

注意:如果WAN连接在同一个子网共用一个网关,那么multiwan就不干了。

安装

通过 LuCI 安装

在 LuCI GUI 中进入:

  • 系统 → 软件包 → 更新软件包列表
  • 系统 → 软件包 → 下拉到“可用软件包” →点 luci-app-multiwan 旁边的“安装”.

那么现在你将会在 网络 → Multi-WAN下看到 multiwan 的设置页面了。

通过命令行(CLI) 安装

opkg update
opkg install multiwan
/etc/init.d/multiwan enable
/etc/init.d/multiwan start
/etc/init.d/multiwan single

设置

使用命令行 (CLI) 设置

全局设定

config 'multiwan' 'config'
        option 'default_route' 'balancer'

设置名称 默认值 选项 描述
default_route balancer balancer/fastbalancer/<interface> 给未指定的连接指定默认通道
health_monitor parallel parallel/serial Memory footprint related
debug 0 0/1 输出debug到日志文件
lan_if lan <firewall lan zone>

uci set multiwan.config.health_monitor=serial
uci commit multiwan
/etc/init.d/multiwan restart

* 使用 netfilter 的 Load Balancing 被称为: "Fast Balancer (Best Distribution)"

* 使用 iproute2 的 Load Balancing 就是 "Load Balancer (Best Compatibility)"

* 那么现在 "Fast Balancer" 对应的 wanrule 就是fastbalancer

* "Load Balancer" 对应的 wanrule 还是 balancer

似乎 fastbalancer在稳定性方面比 balancer 好, 不过你还是需要每种设置都试一下看哪种来看看哪种最好。

WAN 接口

config 'interface' 'wan'
        option 'weight' '10'
        option 'health_interval' '10'
        option 'icmp_hosts' 'dns'
        option 'timeout' '3'
        option 'health_fail_retries' '3'
        option 'health_recovery_retries' '5'
        option 'failover_to' 'wan2'
        option 'dns' 'auto'

config 'interface' 'wan2'
        option 'weight' '10'
        option 'health_interval' '10'
        option 'icmp_hosts' 'dns'
        option 'timeout' '3'
        option 'health_fail_retries' '3'
        option 'health_recovery_retries' '5'
        option 'failover_to' 'wan'
        option 'dns' 'auto'

设置项 默认值 选项 描述
weight 10 disable/1-10 负载均衡权重
health_interval 10 disable/5/10/20/30/60/120 监控通断时间间隔
icmp_hosts ? disable/dns/gateway/<host> 监控通断目标ICMP 地址
timeout ? disable/1-5/10 监控 ICMP 超时
health_fail_retries ? 1/3/5/10/15/20 在切换负载前的重试次数
health_recovery_retries ? 1/3/5/10/15/20 认为此WAN口恢复正常的重试次数
failover_to ? disable/balancer/fastbalancer/<interface> 如果此接口断开则切换到的接口
dns auto auto/<dns> DNS 服务器

uci delete multiwan.wan2
uci set multiwan.wwan=interface
uci set multiwan.wwan.weight=3
uci set multiwan.wwan.health_interval=disable
uci set multiwan.wwan.icmp_hosts=disable
uci set multiwan.wwan.timeout=3
uci set multiwan.wwan.health_fail_retries=3
uci set multiwan.wwan.health_recovery_retries=5
uci set multiwan.wwan.failover_to=fastbalancer
uci set multiwan.wwan.dns=auto
uci commit multiwan
/etc/init.d/multiwan restart

对于 PPP 3G WAN 接口, 一般需要对每个WAN接口单独设置DNS服务器。 如果遇到多重 3G 软件狗 , 在 etc/config/network 中把下面的东西加到每个WAN接口下面:

option 'peerdns' '0'
option 'defaultroute' '0'

对外 Traffic Rules

如果有多条相同规则存在, 最后添加的规则优先生效。

config 'mwanfw'
	option 'src' '192.168.1.0/24'
	option 'proto' 'udp'
	option 'port_type' 'source-ports'
	option 'ports' '5060,16384:16482'
	option 'wanrule' 'wan'

设置项 默认值 选项 描述
src all all/<IP>/<hostname> 源地址
dst all all/<IP>/<hostname> 目的地址
port_type dports dports/source-ports
ports all all/<port,port:range> 端口
proto all all/tcp/udp/icmp/<custom> 协议
wanrule balancer/fastbalancer/<interface> WAN上行
failover_to balancer/fastbalancer/<interface> multiwan_per_mwanfw_failover.patch.txt

uci add multiwan mwanfw
uci set multiwan.@mwanfw[-1].src=192.168.2.0/24
uci set multiwan.@mwanfw[-1].dst=www.whatismyip.com
uci set multiwan.@mwanfw[-1].wanrule=fastbalancer
uci commit multiwan
/etc/init.d/multiwan restart

简单的设置方法

1.为WAN2 创建一个 VLAN

vconfig add eth0 2

2. 设置 VLAN 和 Network接口

使用 /etc/config/network.

  • 将 LAN "0" 口 从默认的 eth0_0 改成 eth0_2.
  • 首先将 WAN 和 WAN2 的'proto' 设置成成 'dhcp' 。如果需要的话, 再在WEB界面中设置为静态地址或者PPPOE .
  • 如果你DNS服务有问题,那么使用下面的 DNS 服务器设置。 一些ISP只允许自家IP段传过来的DNS请求。

# 以下的设置假定这是一个有6个口的交换机 ,默认的WAN端口是 端口0, 
#默认LAN口 (1-4) 是交换口 (1-4) 和内置交换口 
# 连接到路由主板的是 交换口5.
 
# 虽然这是一个常见的设置方法,但是一些路由器只有5个口,一个单独的物理WAN接口;并且编号系统可能不同。

config 'switch' 'eth0'
        option 'enable' '1'

# 注意:内置交换口5在下文称为 “5t”来让它能被 VLANs (eth0.0., eth0.1, eth0.2) 共享

# 设置 LAN 外置端口3  为 VLAN0 .
config 'switch_vlan' 'eth0_0'
        option 'device' 'eth0'
        option 'vlan' '0'
        option 'ports' '2 3 4 5t'

# 在VLAN1 上设置默认WAN端口.
config 'switch_vlan' 'eth0_1'
        option 'device' 'eth0'
        option 'vlan' '1'
        option 'ports' '1 5t'

# 在 VLAN2 上设置 WAN2端口(将WAN2端口设置为VLAN2?).
config 'switch_vlan' 'eth0_2'
        option 'device' 'eth0'
        option 'vlan' '2'
        option 'ports' '0 5t'

# 默认回环连接接口.
config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'

# 在默认LAN接口上开启 生成树协议(Spanning Tree Protocol,STP)
config 'interface' 'lan'
        option 'type' 'bridge'
        # 一些路由器上面默认的 ”lan“是直接设置到物理接口eth0 。这必须改成一个VLAN接口,在这里是eth0.0  。
        option 'ifname' 'eth0.0'
        option 'proto' 'static'
        option 'stp' '1'
        option 'ipaddr' '192.168.1.1'
        option 'netmask' '255.255.255.0'

# WAN接口
config 'interface' 'wan'
        option 'ifname' 'eth0.1'
        option 'proto' 'dhcp'
        option 'dns' '216.146.35.113 216.146.36.113 8.8.8.8 8.8.4.4'

# WAN2接口
config 'interface' 'wan2'
        option 'ifname' 'eth0.2'
        option 'proto' 'dhcp'
        option 'dns' '216.146.35.113 216.146.36.113 8.8.8.8 8.8.4.4'

3. 设置 WAN 接口和 multiwan

WANs:

网络 >接口 > WAN/WAN2 - 将WAN2添加到防火墙的WAN区域

Multiwan:

网络 > Multiwan 看看下面的页面了解一下设置的例子。 这是我的设置方法:

  • a.我只有两个WAN接口所以我总是把最后两个删掉。我也在 /etc/iproute2/rt_tables 中注释掉了 MWAN3 和 MWAN4 (尽管可能不需要).
  • b. Load Balancer Distribution = 1

两个连接中: Failover = LoadBalancer

  • c.出入规则

:!: 看看例子 Source, Destination, protocol, Ports, WAN Uplink all, all,all,all, Load Balancer all, all, UDP, all, wan ←-

这个让所有VPN和VOIP只走一个网关。 做好了。

3. 测试.

  1. Status > Interfaces 应该显示出通过各接口的流量
  2. 路由分配

 root@culiat-wg:~# ip route show table 123
 192.168.2.0/24 dev eth0.2  proto kernel  scope link  src 192.168.2.214
 192.168.1.0/24 dev br-lan  proto kernel  scope link  src 192.168.1.1
 114.108.201.0/24 dev eth0.1  proto kernel  scope link  src 114.108.201.49
 default  proto static
        nexthop via 114.108.201.1  dev eth0.1 weight 1
        nexthop via 192.168.2.1  dev eth0.2 weight 1

  1. route命令应该显示出2个默认网关 。
  2. 下一个多人下的种子(H种子为妙?)如果 multiwan 正确工作了,那么你会发现总带宽比你带宽最宽端口的还要大。
  3. 切断一个 WAN 端口不会打断你的连接。

4. 解决问题

可能的问题:

  1. 你刷新了网络状态页面但是网速没有提升。
  2. 在 "接口" 页面只显示了一个WAN接口
  3. 你使用了 route 命令但是只显示一个网关。
  4. ip route show table 123命令没有显示 nexthops

渣翻译,如果发现有不妥地方还请雅正。如果您有空最好发封邮件到xlctemp # foxmail.com 来拍一下译者,谢谢!

Back to top

zh-cn/doc/uci/multiwan.txt · Last modified: 2013/07/17 05:27 (external edit)