免费注册 查看新帖 |

Chinaunix

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

[网络管理] iptables使用mark标记后再snat出现问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-17 18:13 |只看该作者 |倒序浏览

先简单说说需求。两个wan口,n个lan口,根据不同的协议进行不同的转发。
我用的是clearos(软路由)和layer7-user-space。
对每个满足设置协议的数据包打标记8。如果标记8则转发到wan1,否则转发到wan2。
之后设置snat,如果标记8,snat的源地址改为wan1的地址。否则同理设置为wan2的。
感觉这样设置没问题了。但是出现了下面的情况。

上面的policy ACCEPT接受0个包,为什么下面的规则还有处理的数据包?

下面附上我的设置。  我的layer7给QQ协议打标记8,经测试,这步肯定没问题。
我的环境是用虚拟机搭建的。wan1和wan2其实都是局域网内分配的,网管是192.168.72.254
我执行了下面的脚本

#! /bin/sh
ip route add table 8 via 192.168.72.254 dev eth1 #这个是wan2,对应的IP是192.168.72.106
ip route add table 10 via 192.168.72.254 dev eth0 #这个是wan1,对应的IP是192.168.72.103
iptables -F
iptables -t mangle -A PREROUTING -s 192.168.164.0/24 -j NFQUEUE
iptables -t mangle -A PREROUTING -d 192.168.164.0/24 -j NFQUEUE #这两步是为了layer在用户态可以执行,这步设置没问题

iptables -t nat -A POSTROUTING -m mark ! --mark 8 -j SNAT --to-source 192.168.72.103
iptables -t nat -A POSTROUTING -m mark --mark 8 -j SNAT --to-source 192.168.72.106

跟踪各个规则,发现在POSTROUTING的mangle点的hook函数中,还可以检测到被标记的数据包。
到下一个hook函数,也就是nat表中的函数,就检测不到了。
出现了上面图片的结果。
这什么情况啊?完全没头绪

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2013-12-17 18:57 |只看该作者
你现在数据包不是能发送到对应的wan口吗.
你试试在nat的时候,不用mark,直接-o ethx -j SNAT ...
这样能不能满足要求

论坛徽章:
0
3 [报告]
发表于 2013-12-17 19:20 |只看该作者
还是不可以啊。只能转发到第一个eth0。会不会是通过fwmark来识别不同的路由表的时候出了问题?回复 2# chenyx


   

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
4 [报告]
发表于 2013-12-17 19:31 |只看该作者
不清楚,你先保证数据包按照你的要求被转发到相应的端口.

论坛徽章:
0
5 [报告]
发表于 2013-12-17 19:40 |只看该作者
回复 4# chenyx

在POSTROUTING上先执行mangle挂载的hook函数,然后是nat挂载的hook函数。
在mangle的hook点,QQ协议数据包发往eth1,但是到了nat,发往eth0的数据包就成了0。好奇怪


   

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
6 [报告]
发表于 2013-12-17 19:46 |只看该作者
我记得策略路由应该可以根据你的数据包的mark选择路由表吧,你测试下

论坛徽章:
0
7 [报告]
发表于 2013-12-17 21:15 |只看该作者
回复 6# chenyx

使用fwmark可以根据标记选择路由表
从结果看,应该是已经选择了正确的路由表,QQ协议数据包确实发往eth1。但是在POSTROUINT的第二个hook函数中,发往eth1的数据包没了


   

论坛徽章:
0
8 [报告]
发表于 2013-12-18 23:25 |只看该作者
学习学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP