Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4360
  • 博文数量: 0
  • 博客积分: 14
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-09 19:46
我的朋友
最近访客
     该分类下暂时没有公开的博文,给他留言提醒一下吧。
给主人留下些什么吧!~~

lsstarboy2011-06-17 21:39

superzjq: 感觉ipfw的nat实现机制有些问题啊  虽然现在是内核nat  
但整个机制还是沿用natd的  貌似开发团队都把精力放在dummynet上了  
我想大多数人第一次接触i.....
看了你的规则,感觉你仍然没有进入ipfw的思维方式。状态规则就相当于vip通道,并且它的检测是根据源地址、源端口和目标地址、目标端口以及协议的,在内网网卡上直接用allow是很不合适的,进入FB后仍然会再次匹配。
状态规则跟nat命令联用比较多。
内核的nat跟natd在ipfw规则部分是一样的,只是不需要再经过divert,所以速度要快一点。
我一直认为做nat用状态规则会很累。

回复  |  举报

lsstarboy2011-06-15 09:49

superzjq: 非常感谢老师的关注:)使用skipto可以解决这个问题
但还有点疑问,one_pass不是只跟nat和pipe有关吗,limit应该是属于动态规则吧 ?
在下不才  针对两种情况进.....
状态表相当于vip通道,匹配数据包的时候,先检查状态表再检查后面的规则。

现在用你的规则作为例子,假设192.168.1.2产生了一个数据包,通过em1进入,这时产生了一个状态规则,可以用ipfw -de列出。这个数据包被允许进入服务器。
但是当到达外网网卡的时候,这时再次匹配,仍然是状态规则优先,于是ipfw检测到仍然是由em1进来的数据包,所以还是匹配了100,随即中止匹配。
也就是说,按你的规则,从192.168.1.0/24发出的数据包,要两次经过100规则。这点你可以通过ping试一下,发一次icmp包,100规则会出现两次计数,并且可以在外网网卡上抓包,会抓到内网ip的包。

回复  |  举报

lsstarboy2011-06-14 22:52

superzjq: 非常感谢老师的关注:)使用skipto可以解决这个问题
但还有点疑问,one_pass不是只跟nat和pipe有关吗,limit应该是属于动态规则吧 ?
在下不才  针对两种情况进.....
我又重新测试了规则,你是对的。
不过我理解不应该是bug。应该是先检查状态表,第二次也会同样匹配该状态表中的规则而中止后面的匹配。详细内容测试后再写。

回复  |  举报

lsstarboy2011-05-30 15:15

superzjq: 老师您好,能否帮我看下这段配置
ipfw add allow ip from 192.168.1.0/24 to any in via em1 limit src-addr 10
ipfw add nat 1 ip from 192.168.1.0/24 to any.....
不好意思,上一次测试没注意one_pass的问题!
在one_pass模式下,数据包不会再入ipfw了,所以就造成内网的数据到达不了nat规则。
你的第一条规则应该把allow改为skipto 200,变成:

ipfw add 100 skipto 200 ip from 192.168.1.0/24 to any in via em1 limit src-addr 10
ipfw add 200 nat 1 ip from 192.168.1.0/24 to any out via em0

回复  |  举报

lsstarboy2011-05-28 17:10

superzjq: 老师您好,能否帮我看下这段配置
ipfw add allow ip from 192.168.1.0/24 to any in via em1 limit src-addr 10
ipfw add nat 1 ip from 192.168.1.0/24 to any.....
不应该出现这种情况,我测试了一下,没有出现你说的结果。
建议:(1)ipfw show,多看一下数据包的数量,有条件的话,只连接几台机器试试。
     (2)加上log看看日志里怎么说。

回复  |  举报
留言热议
请登录后留言。

登录 注册