- 論壇徽章:
- 0
|
linux網(wǎng)橋做流量控制時使用iptables的MARK問題
環(huán)境:
MagicLinux2.0 內(nèi)核: 2.6.15.3
iptables版本:iptables v1.3.7
網(wǎng)橋:bridge-utils-1.2
route -V : route 1.98
給內(nèi)核打了layer7補(bǔ)丁
eth1:外網(wǎng) eth2:內(nèi)網(wǎng)
配置網(wǎng)橋:
brctl addbr br0
brctl addif br0 eth1
brctl addif br0 eth2
ifconfig eth1 0.0.0.0
ifconfig eth2 0.0.0.0
ifconfig br0 0.0.0.0
去外網(wǎng)的隊列:
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
進(jìn)內(nèi)網(wǎng)的隊列:
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 1k
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配置:
iptables -t mangle -F
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
iptables -t mangle -A PREROUTING -i eth1 -d 90.0.11.66/32 -j MARK --set-mark 22
iptables -t mangle -A PREROUTING -i eth1 -d 90.0.11.66/32 -j RETURN
(對90.0.11.66這個地址限速100kbit,在這里是測試效果的,本意是用layer7來做p2p流量控制的。)
經(jīng)測試發(fā)現(xiàn)速度沒有改變,為了查找問題,我用u32試了試效果:
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 u32 match ip src 90.0.11.66/32 flowid 1:10
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 u32 match ip dst 90.0.11.66/32 flowid 1:30
(以上使用的是網(wǎng)橋,內(nèi)外網(wǎng)用的全部是90.0.11.0網(wǎng)絡(luò)地址,掩碼255.255.255.0)
測試發(fā)現(xiàn)效果很好。后來我懷疑是網(wǎng)橋的問題,我把網(wǎng)橋去掉,做了nat,內(nèi)部是192.168.1.0網(wǎng)絡(luò),外部是90.0.11.0網(wǎng)絡(luò)。經(jīng)測試還是老樣子,用u32可以,用iptables 的mark 就是不行,百思不得其解。
后來改用cbq隊列試了試,還是不行。
tc qdisc add dev eth1 root handle 1: cbq bandwidth 100mbit avpkt 1000 cell 8
tc class add dev eth1 parent 1: classid 1:1 cbq bandwidth 100mbit rate 100mbit maxburst 20 allot 1514 avpkt 1000 cell 8 weight 1mbit
tc class add dev eth1 parent 1: classid 1:10 cbq bandwidth 100mbit rate 100kbit maxburst 20 allot 1514 avpkt 1000 cell 8 weight 1mbit
tc class add dev eth1 parent 1: classid 1:20 cbq bandwidth 100mbit rate 100mbit maxburst 20 allot 1514 avpkt 1000 cell 8 weight 1mbit
tc filter add dev eth1 protocol ip parent 1:0 prio 8 handle 11 fw flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 4 handle 22 fw flowid 1:10
iptables -t mangle -F
iptables -t mangle -A PREROUTING -i eth2 -s 192.168.1.6/32 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -i eth2 -s 192.168.1.6/32 -j RETURN
iptables -t mangle -A PREROUTING -i eth2 -j MARK --set-mark 22
tc qdisc add dev eth2 root handle 1: cbq bandwidth 100mbit avpkt 1000 cell 8
tc class add dev eth2 parent 1: classid 1:1 cbq bandwidth 100mbit rate 100mbit maxburst 20 allot 1514 avpkt 1000 cell 8 weight 1mbit
tc class add dev eth2 parent 1:1 classid 1:30 cbq bandwidth 100mbit rate 100kbit maxburst 20 allot 1514 avpkt 1000 cell 8 weight 1mbit
tc class add dev eth2 parent 1:1 classid 1:40 cbq bandwidth 100mbit rate 100mbit maxburst 20 allot 1514 avpkt 1000 cell 8 weight 1mbit
tc filter add dev eth2 protocol ip parent 1:0 prio 8 handle 33 fw flowid 1:30
tc filter add dev eth2 protocol ip parent 1:0 prio 4 handle 44 fw flowid 1:40
iptables -t mangle -A PREROUTING -i eth1 -d 192.168.1.6/32 -j MARK --set-mark 33
iptables -t mangle -A PREROUTING -i eth1 -d 192.168.1.6/32 -j RETURN
iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 44
如此看來,問題應(yīng)該是出在mark上了。我加載的模塊:lsmod|grep ip
ipt_layer7 10668 0
ipt_MARK 1536 4
ipt_MASQUERADE 2048 1
iptable_nat 5764 1
ipt_ipp2p 6784 0
ip_nat_ftp 2176 0
ip_nat 12460 3 ipt_MASQUERADE,iptable_nat,ip_nat_ftp
ip_conntrack_ftp 5616 1 ip_nat_ftp
ip_conntrack 34508 5 ipt_MASQUERADE,iptable_nat,ip_nat_ftp,ip_nat,ip_conntrack_ftp
nfnetlink 3864 2 ip_nat,ip_conntrack
iptable_filter 1664 0
iptable_mangle 1792 1
ip_tables 16000 7 ipt_layer7,ipt_MARK,ipt_MASQUERADE,iptable_nat,ipt_ipp2p,iptable_filter,iptable_mangle
不知道是缺少補(bǔ)丁還是iptables的問題。MagicLinux2.0自帶的iptables版本是1.3.6,我自己編譯的1.3.7。
簡易拓?fù)淙缦拢?/font>
使用網(wǎng)橋時:內(nèi)部(90.0.11.66)------------------(eth2)網(wǎng)橋(br0)(eth1)---------------------外部(90.0.11.0/24)
使用網(wǎng)關(guān)NAT:內(nèi)部(192.168.1.6)---------(eth2:192.168.1.3)網(wǎng)關(guān)(nat)(eth1:90.0.11.77)----------------外部(90.0.11.0/24)
192.168.1.6和90.0.11.66是同一臺pc,想對這臺pc限速。
兄弟姐妹們,你們有何高見?? 
[ 本帖最后由 dreamever 于 2007-6-28 09:16 編輯 ] |
|