免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dreamever
打印 上一主题 下一主题

[网络管理] linux网桥做流量控制时使用iptables的MARK问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-06-27 23:36 |只看该作者
我访问一个网站,它的IP是211.152.50.239
之前我把MARK语句改了

  1. # Generated by iptables-save v1.2.11 on Sat Jun 23 01:46:41 2007
  2. *mangle
  3. :PREROUTING ACCEPT [17070:3759946]
  4. :INPUT ACCEPT [5343:360470]
  5. :FORWARD ACCEPT [11720:3399196]
  6. :OUTPUT ACCEPT [6097:660225]
  7. :POSTROUTING ACCEPT [17817:4059421]
  8. [0:0] -A PREROUTING -d 211.152.50.239 -i eth2 -j MARK --set-mark 0xb
  9. [0:0] -A PREROUTING -d 211.152.50.239 -i eth2 -j RETURN
  10. [31:18061] -A PREROUTING -d 192.168.0.3 -i eth1 -j MARK --set-mark 0x16
  11. [31:18061] -A PREROUTING -d 192.168.0.3 -i eth1 -j RETURN
  12. COMMIT
  13. # Completed on Sat Jun 23 01:46:41 2007
复制代码


然后访问这个网站,流量结果为:

  1. [root@localhost ~]# tc -s qdisc ls dev eth1
  2. qdisc htb 1: r2q 10 default 20 direct_packets_stat 0
  3. Sent 18406 bytes 235 pkts (dropped 0, overlimits 0)

  4. qdisc sfq 10: parent 1:10 quantum 1514b perturb 10sec
  5. Sent 17260 bytes 220 pkts (dropped 0, overlimits 0)

  6. qdisc sfq 20: parent 1:20 quantum 1514b perturb 10sec
  7. Sent 1146 bytes 15 pkts (dropped 0, overlimits 0)
复制代码

流量是到子类10上去了。

论坛徽章:
0
22 [报告]
发表于 2007-06-27 23:40 |只看该作者
我看东西就是不仔细,所以被你说的团团转,呵呵。

论坛徽章:
0
23 [报告]
发表于 2007-06-27 23:49 |只看该作者
我看东西也不够仔细,早该发现是 -s 与 -d 的问题

论坛徽章:
0
24 [报告]
发表于 2007-06-28 09:04 |只看该作者

十分感谢各位的分析

十分感谢各位的分析

我之前忘了把拓扑告诉大家了,简易拓扑如下:

使用网桥时:内部(90.0.11.66)------------------(eth2)网桥(br0)(eth1)---------------------外部(90.0.11.0/24)
            其实上面是同一个网络,内外网的说法有问题的,我是想突出说明问题,希望没有造成误解。在这里是想限制90.0.11.66的网速,所以我觉得 -i eth2 -s 90.0.11.66/32   和 -i eth1 -d 90.0.11.66/32 应该没有逻辑错误吧。

使用网关NAT:内部(192.168.1.6)---------(eth2:192.168.1.3)网关(nat)(eth1:90.0.11.77)----------------外部(90.0.11.0/24)
            iptables:-i eth2 -s 192.168.1.6/32  和  -i eth1 -d 192.168.1.6/32 对这个pc限速。

论坛徽章:
0
25 [报告]
发表于 2007-06-28 11:27 |只看该作者
原帖由 platinum 于 2007-6-27 23:20 发表于 18楼  
你又做错了
iptables -t mangle -A PREROUTING -i eth2 -s 90.0.11.66/32 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -i eth2 -s 90.0.11.66/32 -j RETURN
这个之前没有匹配到,是因为 -s 的问 ...


人家不是说第一种是bridge方式么?

论坛徽章:
0
26 [报告]
发表于 2007-06-28 11:42 |只看该作者
谁会想到 90.0.11.66 是个内网地址?

论坛徽章:
0
27 [报告]
发表于 2007-06-28 12:19 |只看该作者

非常感谢楼上的兄弟们!

根据大家的看法我做了以下测试:


tc qdisc add dev eth1 root handle 1: htb default 20

tc class add dev eth1 parent 1: classid 1:1 htb rate 100mbit burst 1k

tc class add dev eth1 parent 1:1 classid 1:10 htb rate 100kbit  burst 1k

tc class add dev eth1 parent 1:1 classid 1:20 htb rate 100mbit burst 1k

tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
tc filter add dev eth1 protocol ip parent 1:0 prio 8 handle 11 fw flowid 1:10

iptables -t mangle -F
iptables -t mangle -A PREROUTING -i eth2 -d 59.68.192.130/32 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -i eth2 -d 59.68.192.130/32 -j RETURN



tc qdisc add dev eth2 root handle 1: htb default 40

tc class add dev eth2 parent 1: classid 1:1 htb rate 100mbit burst 100m

tc class add dev eth2 parent 1:1 classid 1:30 htb rate 100kbit  burst 1k

tc class add dev eth2 parent 1:1 classid 1:40 htb rate 100mbit burst 99m

tc qdisc add dev eth2 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth2 parent 1:40 handle 40: sfq perturb 10
tc filter add dev eth2 protocol ip parent 1:0 prio 8 handle 22 fw flowid 1:30

iptables -t mangle -A PREROUTING -i eth1 -d 192.168.0.3/32 -j MARK --set-mark 22
iptables -t mangle -A PREROUTING -i eth1 -d 192.168.0.3/32 -j RETURN

测试发现,上传到59.68.192.130/32 的数据流量确实走的10子类,而从59.68.192.130/32 下载的数据流量走的是40子类。

改为:
iptables -t mangle -A PREROUTING -i eth1 -s 59.68.192.130/32 -j MARK --set-mark 22
iptables -t mangle -A PREROUTING -i eth1 -s 59.68.192.130/32 -j RETURN

测试发现,从59.68.192.130/32 下载的数据流量走的是30子类,如此看来前面问题的发生跟nat有关,不是MARK有问题。数据进来的时候先经过mangle的prerouting,然后进nat的prerouting。所以,在mangle的prerouting匹配192.168.0.3是匹配不到的。
不知以上分析的是否正确,错误之处敬请指出。

内部(192.168.0.3)--------(eth2:192.168.0.1)网关(nat)(eth1:90.0.11.77)---------外部(90.0.11.0/24)---------FTP服务器(59.68.192.130)

[ 本帖最后由 dreamever 于 2007-6-28 12:27 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2007-06-28 14:22 |只看该作者
没错,就是这个意思。
不过昨天我确实没看清楚开始是做的BRIDGE,呵呵。

论坛徽章:
0
29 [报告]
发表于 2007-06-28 16:10 |只看该作者

但是确实搞不清楚网桥为什么不行?

我把27楼的nat 换成网桥还是不行,不知道为什么。做法如下:
内部(90.0.11.66)----------(eth2)网桥(br0)(eth1)---------外部(90.0.11.0/24)---------FTP服务器(59.68.192.130)

tc qdisc add dev eth1 root handle 1: htb default 20

tc class add dev eth1 parent 1: classid 1:1 htb rate 100mbit burst 1k

tc class add dev eth1 parent 1:1 classid 1:10 htb rate 100kbit  burst 1k

tc class add dev eth1 parent 1:1 classid 1:20 htb rate 100mbit burst 1k

tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
tc filter add dev eth1 protocol ip parent 1:0 prio 8 handle 11 fw flowid 1:10

iptables -t mangle -F
iptables -t mangle -A PREROUTING -i eth2 -d 59.68.192.130/32 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -i eth2 -d 59.68.192.130/32 -j RETURN



tc qdisc add dev eth2 root handle 1: htb default 40

tc class add dev eth2 parent 1: classid 1:1 htb rate 100mbit burst 100m

tc class add dev eth2 parent 1:1 classid 1:30 htb rate 100kbit  burst 1k

tc class add dev eth2 parent 1:1 classid 1:40 htb rate 100mbit burst 99m

tc qdisc add dev eth2 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth2 parent 1:40 handle 40: sfq perturb 10
tc filter add dev eth2 protocol ip parent 1:0 prio 8 handle 22 fw flowid 1:30


iptables -t mangle -A PREROUTING -i eth1 -s 59.68.192.130/32 -j MARK --set-mark 22
iptables -t mangle -A PREROUTING -i eth1 -s 59.68.192.130/32 -j RETURN

后来干脆使用br0,不过没用,还是没有效果。


tc qdisc add dev br0 root handle 1: htb default 20

tc class add dev br0 parent 1: classid 1:1 htb rate 100mbit burst 1k

tc class add dev br0 parent 1:1 classid 1:10 htb rate 100kbit  burst 1k

tc class add dev br0 parent 1:1 classid 1:20 htb rate 100mbit burst 1k

tc qdisc add dev br0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev br0 parent 1:20 handle 20: sfq perturb 10
tc filter add dev br0 protocol ip parent 1:0 prio 8 handle 11 fw flowid 1:10

iptables -t mangle -F
iptables -t mangle -A PREROUTING -i br0 -d 59.68.192.130/32 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -i br0 -d 59.68.192.130/32 -j RETURN
iptables -t mangle -A PREROUTING -i br0 -s 59.68.192.130/32 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -i br0 -s 59.68.192.130/32 -j RETURN


不知兄弟们有何高见

[ 本帖最后由 dreamever 于 2007-6-28 16:13 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2007-06-28 16:16 |只看该作者
贴 iptables-save -ct mangle,看是否在网桥下被匹配并打包了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP