|
很久以来,m0n0wall的双线问题,一直是大家讨论的热点之一。一方面是应为中国的互联网发展迅速,很多用户已经有能力同时使用多个ISP提供的服务,另外一方面,也是由于m0n0迟迟不能实现多WAN。撰写本文的目的就是粗浅的分析一下其中的原因。
m0n0使用的操作系统是FreeBSD,与LINUX 相比,FREEBSD在路由方面的功能远远不及LINUX。LINUX在默认状态下,就支持等价路由。什么是等价路由呢?所谓的等价路由就是目的一样,但是网关却不同。在LINUX里可以设置2条默认路由,分别到两个不同的默认网关,而在FREEBSD中这是不能被允许的。由于这个原因,在FREEBSD中要实现双线,就必须使用其他的方法。 首先,我们分析一下双线的需求: - 电信的网站走电信线路,联通的线路走联通;
- 当一条线失效后,路由可以启动切换到正常的线路;
- 可以根据端口做流量分配;
- 可以根据带宽比例做流量分配,例如,1条2M的线路,1条10M的线路,可以按照比例来分配流量;
以上4点,前2点比较好实现;3,4两点的实现就有些麻烦了。下面详细来说: 对于第一点,我们可以设置电信、联通路由表来实现。如果电信为默认路由,就设置联通路由表,这样就可以粗略的完成不同运营商走不同的线路。第二点的实现,首先的问题是线路状态的检测。一个直接的想法是使用PING,但是这在很多情况下是行不通的,因为很多网关是禁止PING的。这样就是的PING 变得非常不可靠。一个可行的办法是是使用ARP探测,如果网关还存在,那么即使禁止PING,那么也会对ARP的查询作出应答的,如果不应答,那么就可以100%的肯定这条线路不可用了。 好了,有了检测机制,下来就是切换了。这个就比较容易了,如果是默认路由断了,那么删除当前路由,然后把默认路由添加到另外一条线上。操作如下: route delete default route add default xx.xx.xx.xx 如此,就可以完成路由的切换,如果不是默认路由断了,那么只要删除所有的静态路由就可以了。前提是,所设置的静态路由必须有一个副本保存在磁盘中。 第三点,这就要靠ipf 来实现了,把不同的端口映射到不同WAN上,这个在m0n0的WEB界面中没有相应的配置选项,需要把他做出来。 第四点,这个就有点困难了,根本的解决方法是使用pf来全面的替换ipf。 其实,对于大多数用户来说,实现1,2就已经够用了;3,4的实现可以做到高级负载均衡。我们也正在致力于实现以上4点,请大家多多关注m0n0中国。
|