免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6369 | 回复: 10
打印 上一主题 下一主题

[FreeBSD] 【经验分享】发个带简单QoS的 IPFW+内核NAT 规则 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-17 20:55 |只看该作者 |倒序浏览
本帖最后由 ulovko 于 2012-08-28 21:23 编辑

环境:

  两个网卡
    em0有三个外网IP地址:1.2.3.15-17
    em1内网,172.16.0.0/16,其中172.16.100.0/24是服务器组(DMZ)

基本服务:
    (1)172.16.100.12上有ssh
    (2)对外172.16.100.19对映射到1.2.3.15
     (3)三个IP都有web服务,ftp服务和mysql

  基本思路
    (1)采用ipfw的内核nat
    (2)由于局域网内有p2p,udp泛滥,所以要先保证tcp。
    (3)由于机器数量比较多,采用状态规则的效果不是很好,所以没有采用状态规则,这样必须考虑每一个应用的上传和下载两个方向
    (4)QoS调度主要在内网网卡上进行,减少外网网卡的压力,以便外网网卡可以更好的提供web和ftp服务。
    (4)由于整体的流量在可以容忍的范围内,所以没有进行限速,只对不同的应用和协议进行了简单区分。
         限不限速我认为应该根据具体的情况对待,如果局域网内都是“良民”,那么真没有限速的必须,这样可以获得更好的速度。以我们的这个网络为例,在不限速的时候,跟相邻的网络交换数据,很轻松到达10M字节,而限速的情况下,不可能给分配100m的带宽,反而限制了应用的速度,并且我们的应用跟邻居网络交流非常多。
              (限速的规则整理后下次再发!)
#清除原有的规则,注意nat、queue必须单独清除,仅仅flush清除不掉

ipfw -q flush
ipfw -q nat flush
ipfw -q queue flush

#第一句:对172.16.100.12进行端口映射,并定义nat
#第二句:实际上没有什么用处,作为nat时的备用地址
#第三句:把外网IP与内网IP进行映射,并定义nat

ipfw nat 10 config ip 1.2.3.16 redirect_port tcp 172.16.100.12:22 22
ipfw nat 20 config ip 1.2.3.17
ipfw nat 30 config ip 1.2.3.15 redirect_addr 172.16.100.19 1.2.3.15


# -------------------------------------------------------------------
# 下面两句是sched语句,主要指定调度的算法和掩码,
# 注意这是反掩码,决定了队列的数量,例子中最多有256个队列
#   其实再加上个pipe就可以直接进行限速,

ipfw sched 10 config type QFQ mask src-ip 0x0000ff00
ipfw sched 20 config type QFQ mask dst-ip 0x0000ff00


# -------------------------------------------------------------------
#分队列,注意每一种都为了上传和下载两个方向

ipfw queue 100 config sched 10 weight 90
ipfw queue 110 config sched 20 weight 90

ipfw queue 400 config sched 10 weight 1
ipfw queue 410 config sched 20 weight 1


# -------------------------------------------------------------------
#  外网服务

ipfw add 10 allow ip from any to me 22,80,21,22,3306 keep-state


# -------------------------------------------------------------------
#  内网的tcp包直接通过

ipfw add 100 queue 100 tcp from 172.16.0.0/16 to any  in via em1
ipfw add 110 queue 110 tcp from any to 172.16.0.0/16 out via em1


# -------------------------------------------------------------------
### DNS包也要优先通过,否则解析不到DNS,上网就慢了一大截!

ipfw add 200 queue 100 udp from 172.16.0.0/16 to any 53  in via em1
ipfw add 210 queue 110 udp from any 53 to 172.16.0.0/16 out via em1


# -------------------------------------------------------------------
### DMZ的udp,也直接放行

ipfw add 300 queue 100 udp from 172.16.200.0/24,172.16.100.0/24 to any  in via em1
ipfw add 310 queue 110 udp from any to 172.16.200.0/24,172.16.100.0/24 out via em1


# -------------------------------------------------------------------
#  其它的udp,特别是p2p,慢慢排队吧
#  在udp最泛滥的时候,udp的包大约是tcp包的几十倍,队列调度效果也不好,
#   所以做过状态规则,限制每个ip的udp并发数,注意limit是一个状态规则,
#    要把内核变量:net.inet.ip.fw.dyn_max:设置的大一些,比如65535,甚至是1048576
#  因为是状态规则,本来两可以用一句代替:

# ipfw add 400 allow udp from 172.16.0.0/16 to any in via em1  limit scr-addr 10

ipfw add 400 queue 400 udp from 172.16.0.0/16 to any  in via em1
ipfw add 410 queue 410 udp from any to 172.16.0.0/16 out via em1


# -------------------------------------------------------------------
# 要手工指定nat映射,这是内核nat比natd麻烦的地方

ipfw add 700 nat 30 ip from any to 1.2.3.150 in via em0
ipfw add 800 nat 30 ip from 172.16.100.19 to any out via em0


# -------------------------------------------------------------------
# 正式开始NAT

ipfw add 1000 nat 10 ip from 172.16.0.0/16 to any out via em0
ipfw add 2000 nat 10 ip from any to 1.2.3.16 in via em0
ipfw add 3000 nat 20 ip from any to 1.2.3.17 in via em0


#####################################################
#  如果想做白名单,可以在下面加上 allow ip from any to any diverted
#  和  allow ip from any to any established
#  最后就可以deny ip from any to any了。
#  但是对于主要nat的服务器,我一直认为没有必须限制太多,除非遇到了麻烦。
#####################################################

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
2 [报告]
发表于 2011-03-17 21:16 |只看该作者
,很给力啊,改天我也研究研究,嘿嘿

论坛徽章:
0
3 [报告]
发表于 2011-03-18 10:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2011-03-18 13:00 |只看该作者
最近正好在弄f防火墙这个。。学习一下

论坛徽章:
3
天秤座
日期:2013-12-27 13:44:58射手座
日期:2014-05-22 16:52:43天蝎座
日期:2014-08-13 16:03:21
5 [报告]
发表于 2011-03-18 13:51 |只看该作者
学习了,

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-10-04 06:20:00
6 [报告]
发表于 2011-03-18 17:03 |只看该作者
回复 1# lsstarboy


    思路很清晰,多个外网IP地址如果是跟内网的服务器一一对应的话,我现在采用的是通过设置外网卡别名IP地址,只做一个NAT就可以了。

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
7 [报告]
发表于 2011-03-18 21:11 |只看该作者
回复  lsstarboy


    设置外网卡别名IP地址
b1uesky 发表于 2011-03-18 17:03



    没看懂你的意思,愿闻其详!

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-10-04 06:20:00
8 [报告]
发表于 2011-03-20 08:31 |只看该作者
回复 7# lsstarboy

   将多个IP均设置为外网卡的地址,同时针对该网卡做一个NAT,或者做端口映射redirect_port,或者做地址redirect.
多个NAT,在考虑到内网不同的网段映射到不同的外网地址时候是个好的选择。

论坛徽章:
0
9 [报告]
发表于 2011-11-02 15:37 |只看该作者
s收藏了 改天研究一下

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
10 [报告]
发表于 2011-11-04 08:43 |只看该作者
谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP