[原创]ipfw与多线路由_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2723 | 回复: 2   主题: [原创]ipfw与多线路由        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-1-22 16:58:16 | [全部帖] [楼主帖] 楼主

目的:实现多线路由,本文用联通、电信和教育网三网分三线路由,不做NAT

实现限制:
1、本人没有实际的多线线路,所以提供的路由IP都是私有IP,实际用的时候要换成自己的IP。三网的IP段也仅提供了几个在网上搜索到的IP段,实际用的时候要数千条。
2、外网网关不能是同一个网段,否则会出现只走系统默认路由的情况。 

实现原理:
FreeBSD7.1以后,都支持setfib,这是多路由的前提条件。每个fib号都可以有独立的路由表,包括默认网关。最关键的是,每个fib都可以有自己的默认网关。
有了多路由还不能完成多线路由,实现多线路由还需要把网络流量区分出来,到电信的发到电信的fib,到联通的发到联通的fib,完成这个任务的就是防火墙了,当然也是本文的主角之一:ipfw。
其实setfib还有另外一个用处,就是可以做流量均衡。

步骤:
1、启用setfib,默认不启用。可以用下列两种方法之一:
 1)在内核配置文件中设置下面的变量,并重新编译内核:

 options ROUTETABLES=N


  2)在loader.conf中添加:

 net.fibs="N"


  注意N的取值,在FreeBSD10以前的版本,N的取值为0-15,最多有16个fib,10.0以后的版本,可以有65536个fib。目前网上的资料很多都说最多取16,是指的老版本。

2、设置不同的fib:
 联通线路网关:192.168.0.1,对应fib为0
  电信线路网关:192.168.1.1,对应fib为1
 教育线路网关:192.168.2.1,对应fib为2

 1)联通默认fib,也就是0,不需要加setfib命令:

# route add default 192.168.0.1


  2)电信线路:

# setfib 1 route add default 192.168.1.1


  2)教育线路:

# setfib 2 route add default 192.168.2.1


3、设置ipfw:
ipfw其实比较简单,一句话足矣:

ipfw add  setfib tablearg ip from any to “table(1)”


注意几点:
 1)tablearg为table的特有参数,下面将使用到
  2)table是ipfw的一个功能模块,数千、上万个条目也能快速的处理掉,查询效率非常高。
 3)setfib子命令不会中断ipfw的匹配,会继续在ipfw规则集中进行匹配,一般是继续下一条规则,所以可以后续进行NAT,fwd等动作。

4、设置table 1的条目
  设置一下,你会发现即使五线六线的,也不是太麻烦,比其他的解决方案要简单多了。

  1)设置联通IP条目,注意最后面的0代表fib号为0:

ipfw table 2 add 202.101.128.0/18 0
ipfw table 2 add 202.102.128.0/21 0
ipfw table 2 add 202.102.136.0/21 0
ipfw table 2 add 202.102.144.0/20 0


2)设置电信IP条目,fib号为1:

ipfw table 1 add 203.145.0.0/19 1
ipfw table 1 add 203.148.80.0/22 1
ipfw table 1 add 203.148.86.0/23 1
ipfw table 1 add 203.149.92.0/22 1
ipfw table 1 add 203.152.128.0/19 1


  3)设置教育网IP条目,fib号为2:

ipfw table 1 add 59.64.0.0/14 2
ipfw table 1 add 59.68.0.0/14 2
ipfw table 1 add 59.72.0.0/15 2
ipfw table 1 add 59.77.0.0/16 2


5、测试注意事项
测试机要用另一台机器来发起测试,如果用本机测试的话,还会走fib 0,也就是默认的路由,我因为这个问题而折腾了大半夜。
比如在本机上发起ping的测试,icmp包只会走fib 0,而不走在fib 1 或其它的fib。
不知道这是不是一个bug,还没测试过FreeBSD10.1,起码在FreeBSD10.0以前的版本中都存在这个问题,某个国外的网页上也见到这方面的报告。
另外还需要注意测试的外网IP不能在同一个网段,比如fib 0 对应192.168.0.1;fib 1 对应192.168.0.2,这种IP设置会仍然走fib 0 ,不会有数据包走fib 1。




赞(0)    操作        顶端 
rui.yuan
注册用户
等级:中校
经验:1637
发帖:29
精华:0
注册:1970-1-1
状态:离线
发送短消息息给rui.yuan 加好友    发送短消息息给rui.yuan 发消息
发表于: IP:您无权察看 2015-1-22 17:20:50 | [全部帖] [楼主帖] 2  楼

额,我是小白 北京联动北方科技有限公司



赞(0)    操作        顶端 
yr
注册用户
等级:少校
经验:1085
发帖:5
精华:0
注册:2015-1-19
状态:离线
发送短消息息给yr 加好友    发送短消息息给yr 发消息
发表于: IP:您无权察看 2015-1-22 17:21:58 | [全部帖] [楼主帖] 3  楼

北京联动北方科技有限公司



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论