论坛风格切换切换到宽版
  • 1272阅读
  • 9回复

[问题求助][保留] [Ubuntu] 小结备忘:LINUX路由和QOS限速——另请各大侠改进QOS脚本显示流量 [复制链接]

上一主题 下一主题
离线5136456.
 
发帖
2120
C币
-235562
威望
415
贡献值
1
银元
-1
铜钱
4813
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
关注和试用LI.NUX很长时间了,但较少实际用起来,刚好单位需一个路.由器,有闲置老机,提升下自己实战能力.吧!网上文章好多笔误,因此有些小波折,希望把这次经历总结下,为了忘却的纪念。--- 印刷

安装好UBUNTU SERVER 8.04.后,设置双.网卡:eth0为外网网卡,eth1为内网网卡,(        游戏          )

sudo .vi /etc./network/interfaces<性病>

auto eth0
iface et.h0  inet static    外汇
address  外网网卡I.P.
netmask  子网掩码
gateway  网关
auto eth1
iface e.th1 inet static外贸
address.  内网网卡IP           建材
netmask  子网掩码

sudo /etc/in.it..d/networking restart--- 印刷

还有设置DNS服务器
sudo vi  /etc/reso.lv.conf(实际系统默.认的并不存在resolv.conf该文件,属于自己创建)    美容
names.erver   主DNS[成人用品]
nameserver   后备DNS.[成人用品]

要想使LINUX系统达到这种目的,首先得查看LINUX系统的内核中是否打开了IP转发功能,可以通过下列命令来查.看: .服务器
  sudo  cat /proc/.sys/net/.ipv4/ip_forward[成人用品]
如果用此命令返回的结果是0,那么就表明LINUX内核没有.启用.IP转发功能。就可以通过下示命令来启用:.
  sudo. echo 1 > /proc/sys./net//ipv4/ip_forward.
通过固定公网IP地址方式.连接互联的实现方法如下:    健康
  sudo iptables –t nat –A POST.ROUTING –s 192.168.1.0/24 -j SNAT ––to. XXX..XXX.XXX.XXX             电子
XXX是外网网卡IP,我的路由还没做.防护,先隐藏了,.对IPTABLES还不熟悉,呵呵。.

用后发现还不能上网,一番检查,还不行,暴汗……猛然想起可能是ISP.对上网网卡的MAC地址.绑定了,我改……电脑
其.实就是在网卡配置文件中加一行pre-up ifconfig eth0. hw ether 88:88:88:88:88:88(MAC地址)教育

sudo vi /etc/network/.interfa.ces           女人


auto eth0
i.face eth0  inet static             电子
pre-up ifconfig eth0 h.w ether 88:88:88:88:.88:88    外汇
address  外.网网卡IP服务器
netmask  子网掩码
gateway  网关
auto eth1
iface et.h1 inet static           建材
address  内网网.卡IP             汽车
netmask  子网掩码

su.do /etc/init.d/networking .restart.

能PING能了,网卡配置能保存,把.NAT和QOS做成一脚本,设置主属为ROOT,.否则运行无权限,开机时运行。QOS如下:.
#!/bin/sh

# .BY ZWY 090916.

#. Coyote local. command init script<性病>



echo. "1" >/proc/sys/.net/ipv4/ip_forward外贸

#打开内核IP转发功能



iptables -A POST.ROUTING -t nat -s 192.16.8.1.0/24 -j. SNAT --to XXX.XXX.XXX.XXX.

#设置IP转发规则,但没有做任何防护:.裸奔!呵呵。域名





ODEV.="eth0"   #外网网卡          婚庆

ID.EV="eth1"    #内网网卡教育



UP="64kbps"    #上行总带宽:注意单位其实应该是KB/S,TC写法如.此没办.法,如下同单位。电影

DOWN="256kbps"   .#下行总带宽           建材



UPLOADrate="4kbp.s"     #限速范围IP上行.保证带宽.

U.PLOADceil="32kbps"     #限速.范围IP上行最大带宽学习

DOWN.LOADrate="16kbps".   #限速范围IP下行保证带宽.

DOWNL.OADceil=."128kbps"   #限速范围IP下行最大带宽.



INET="19.2.168.1." .   #限速网段--------------彩票



IPS="100"  .               .#限速范围起始IP健康

IPE="110."              .   #限速范围结束IP             电子



outdown="4k.bps"      #不在限速范围IP共享(总)下行速.度<性病>

o.utup="1kbps"      .    #不在限速范围IP共享(总)上行速度  域名



t.c q.disc del dev $ODEV root 2>/dev/null       #清除队列规则(初始化).

tc qdisc d.el dev $IDEV root 2>/dev/n.ull.



tc qdisc add d.ev $ODEV root han.dle 10: htb default 2254        #设置根队列          婚庆

tc qdisc add dev $IDEV root handle 10: htb .defaul.t 2254虚拟主机



tc class add dev $ODEV parent 10: clas.sid 10:1 htb rate $UP ceil $U.P    .         #设置总速度

tc class add dev $IDEV p.arent 10: classid 10:1 htb rate $DO.WN ceil $DOWN--------------彩票



#开始设置限速范围IP规则



i=$IPS;

while [ $i -le $IPE. ] .

do

tc class add. dev $ODEV parent 10:1 classid 10:2$i htb rate $UP.L.OADrate ceil $UPLOADceil prio 1<性病>

tc qdisc add dev. $ODEV parent 10:2$i. handle 100$i: pfifo虚拟主机

tc filter add dev $ODEV parent 10: prot.ocol ip prio 100. handle 2$i fw classid .10:2$i健康

tc class add dev $IDEV parent 10:1 cl.ass.id 10:2$i htb rate $DOWNLOADrate ceil $DOWNLOA.Dceil prio 1 .

tc qdisc add dev $IDEV pa.rent 10:2$i handle. 100$i: pfifo.

tc filt.er add dev $.IDEV parent 10: protocol ip prio 100 handle 2$i fw cl.assid 10:2$i            杀毒

iptables -t .mangle -A PREROUTING -s $INET$i. -j MARK --set-mark 2$i           女人

iptables -t. mangle -A POSTROUT.ING -d $INET$i -j MARK --set-mark 2$i域名

i=`expr $i. + 1` 学习

done



#不在限速范围IP规则



tc class add dev $ODEV p.arent 10:1 classid 10:2254 htb rate. $outup ceil $outup pr.io 1[成人用品]

tc qdisc add dev $ODEV parent .10:2254 handle .100254: pfifo(        游戏          )

tc filter add dev $ODEV parent 1.0: protocol ip prio 1.00 handle 2254 fw classid 1.0:2254域名



tc class add dev $IDEV pa.re.nt 10:1 classid 10.:2254 htb rate $outdown ceil $outdown prio 1 .

tc qdisc add dev $IDEV parent 10:2254 handle 100.254:. pfifo           鲜花

tc filter add dev $IDEV parent 10: protocol ip prio 100 handle 2.254 fw cla.ssid 10:225.4           鲜花
复制代码

这些都是.我亲自做并确保能用的,除非笔误.。希望对新手有用。电影

另请教下高手:帮我看下QOS脚本.,用TC命.令时已建立一个计算每个IP连接速度的东东(不知怎样称呼,或叫缓冲区吧),可不可在另一个脚本中调用这些数据,用来显示每IP正在使用的流量?.能不能给些提示或者帮写个脚本?健康

[ .本帖最后由 shd.nzwy 于 2009-9-26 20:34 编辑 ]              乙肝

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线yy12345678.
发帖
1953
C币
-61089
威望
319
贡献值
1
银元
-5
铜钱
4298
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:[保留]
回复:本主题由 platinum 于 2009-9-26 17:08 加入精华  

    特别感谢白金版主曾经的几次帮助,这次也是参考论坛上各位大大的文章,自己动手实践下,作个笔记,希望不要忘记了,也希望对新手有所帮助。网上也有些QOS脚本,较复杂,我这个简单些,适合入门者改改就用(已对QOS规则作简要说明)。

更希望高手给些建议,帮助解决如何实现查看每IP实时流量。

[ 本帖最后由 shdnzwy 于 2009-9-26 20:35 编辑 ]

离线lj80117.
发帖
2080
C币
-140273
威望
384
贡献值
1
银元
-3
铜钱
4627
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:[保留]
我也网上参考的例子,但是用perl脚本,我这里没办法执行。代码如下:
#!/usr/bin/perl -w

# Date:2009-03-14

# Author:HyphenWang

# Version:1.3

use strict;

my $IPTABLES_CMD="/sbin/iptables -v -n -x -L FORWARD";

my $BANIP_CMD="/root/banip.sh";

my $SEC="3";

my $ZERO="1";

#my $BANIP="1";

my $BANSEC="60";

#my $HTML="1" if (defined $ARGV[0] and $ARGV[0] eq "-p");

my ($HTML,$BANIP);

my $limit_input_rate=200;

my $limit_output_rate=35;

my @exclude_ip=qw(30 153 155 200 221);

my @vzserver_ip=qw(135);

#@exclude_ip=(@exclude_ip,@vzserver_ip);

  push (@exclude_ip,@vzserver_ip);

my (%first_input,%first_output);

my (%second_input,%second_output);

my (%ban_ip,$input_rate,$output_rate);



if (defined $ARGV[0]) {

  for (@ARGV) {

    $HTML = 1 if $_ eq "-p";

    $BANIP = 1 if $_ eq "-b";

  }

}



sub get_ipflow {

  my ($ip_input,$ip_output)=@_;

  for my $line (`$IPTABLES_CMD`) {

    my @columns = split(/\s+/,$line);

    $ip_input->{$columns[-1]}=$columns[2] if ($columns[3] eq "ACCEPT" and $columns[-1] =~ m/192\.168\.228\.\d+/);

    $ip_output->{$columns[-2]}=$columns[2] if ($columns[3] eq "ACCEPT" and $columns[-2] =~ m/192\.168\.228\.\d+/);

    $ban_ip{$columns[-1]}=1 if ($columns[3] eq "DROP" and $columns[-1] =~ m/192\.168\.228\.\d+/);

    $ban_ip{$columns[-2]}=1 if ($columns[3] eq "DROP" and $columns[-2] =~ m/192\.168\.228\.\d+/);

  }

}

get_ipflow(\%first_input,\%first_output);

sleep $SEC;

get_ipflow(\%second_input,\%second_output);



if (! defined $BANIP) {

  if (! defined $HTML) {

    print "Now is ".localtime()."\n";

    print "-"x53,"\n";

    print "IP Address\t\tIn Flow Rate\tOut Flow Rate\n";

  }

  else {

  print<<EOF;

<table cellspacing="0">

<tr><td><table border="1" align="left" cellspacing="0">

<tr align="center" bgcolor="#FFFF00">

<td width="200">IP Address</td>

<td width="200">In Flow Rate</td>

<td width="200">Out flow Rate</td>

</tr>

EOF

  }

}



for my $ip (keys %first_input) {

  if ($ZERO != 1) {

          if (defined $second_input{$ip} and defined $second_output{$ip} and int(($second_input{$ip}-$first_input{$ip})/1024/$SEC) == 0) {

      next;

    }

  }

  if (defined $second_input{$ip} and defined $second_output{$ip}) {

    $input_rate = ($second_input{$ip}-$first_input{$ip})/1024/$SEC;

    $output_rate = ($second_output{$ip}-$first_output{$ip})/1024/$SEC;

    if (! defined $BANIP) {

      if (! defined $HTML) {

        printf ("%s\t\t%.f KByte/s\t%.f KByte/s\n",$ip,$input_rate,$output_rate);

      }

      else {

        printf ("<tr><td>%s</td>\n<td>%.f KByte/s</td>\n<td>%.f KByte/s</td>\n</tr>\n",$ip,$input_rate,$output_rate);

      }

    }

    if ($input_rate >= $limit_input_rate and ! grep ("192.168.228.$_" eq $ip,@exclude_ip)) {

      #system ("$BANIP_CMD INPUT $ip $BANSEC &");

      print $ip,"\n" if defined $BANIP;

      $ban_ip{$ip}=1;

    }

    if ($output_rate >= $limit_output_rate and ! grep ("192.168.228.$_" eq $ip,@exclude_ip)) {

      #system ("$BANIP_CMD OUTPUT $ip $BANSEC &");

      print $ip,"\n" if defined $BANIP;

      $ban_ip{$ip}=1;

    }

  }

}

if (! defined $BANIP) {

  if (! defined $HTML) {

    print "-"x53,"\n";

    print "Banned IP Address:\n";

  }

  else {

  print<<EOF;

</table></td></tr>

<tr><td><p><br></p></td></tr>

<tr><td><table border="1" align="left" cellspacing="0">

<tr>

<td  width="200" align="center" bgcolor="#FF0000">Banned IP Address</td>

</tr>

EOF

  }

}

if (! defined $BANIP) {

  for (keys %ban_ip) {

    if (! defined $HTML) {

    print "$_\n";

    }

    else {

    print<<EOF;

<tr>

<td>$_</td>

</tr>

EOF

    }

  }

}

if (defined $HTML) {

  print<<EOF;

</table></td></tr></td></table>

<br>

限速:200 KByte/s,若检查时发现超出该值,会自动中断对应的客户端IP一分钟。

若您被中断了,请等待。

EOF

}
复制代码

调用的脚本:
#!/bin/bash

for i in `/root/ipflow.pl -b`

do

  /root/banip.sh INPUT $i 60 &

done
复制代码

另一个会被调用的脚本:
# Date:2009-03-12

# Author:HyphenWang

# Version:1.0

SEC="$3";

IPTABLES="/sbin/iptables"

case $1 in

"INPUT")

  $IPTABLES -I FORWARD -d $2 -j DROP

;;

"OUTPUT")

  $IPTABLES -I FORWARD -s $2 -j DROP

;;

esac

sleep $SEC;

case $1 in

"INPUT")

  $IPTABLES -D FORWARD -d $2 -j DROP

;;

"OUTPUT")

  $IPTABLES -D FORWARD -s $2 -j DROP

;;

esac

exit 0
复制代码

以上三个文件都放在/root目录中的,设置权限执行,我没学perl,希望熟悉的高手帮我转写成BASH脚本。谢谢!

离线tnka.
发帖
2076
C币
-60326
威望
404
贡献值
1
银元
-3
铜钱
4803
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
Re:[保留]
不错哦,看看

离线lj80117.
发帖
2080
C币
-140273
威望
384
贡献值
1
银元
-3
铜钱
4627
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
Re:[保留]
直接上个海蜘蛛路由更好

离线pyemail.
发帖
2011
C币
-627237
威望
378
贡献值
4
银元
-4
铜钱
4531
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
回复楼上,这个只是暂时只有路由功能,以后还要加入LAMP结构的单位网站,还想挂个论坛,方便单位同事交流的平台。再者我还可以做SAN实验,用来脱机BT下载也不错啊。最重要的是提升自己的实战能力,ROS我也会做,但实施过程来说还是自己用LINUX自己做好些,以后学IPTABLES方便,在高端应用上多学习一些知识和实际能力。

[ 本帖最后由 shdnzwy 于 2009-9-27 16:42 编辑 ]

离线yinghua568.
发帖
2106
C币
-193246
威望
397
贡献值
1
银元
-3
铜钱
4783
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
Re:[保留]


QUOTE:原帖由 Hancock 于 2009-9-27 13:21 发表
直接上个海蜘蛛路由更好

有些事还是自己去作有意思!

离线gjj3000gjj.
发帖
2013
C币
-140552
威望
393
贡献值
1
银元
-3
铜钱
4575
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
Re:[保留]
正需要perl脚本呢,脚本就来了,哈哈,先看看!

离线citurlong.
发帖
2070
C币
-235437
威望
395
贡献值
1
银元
-3
铜钱
4735
人人网人气币
0
只看该作者 8楼 发表于: 2010-04-13
Re:[保留]
使用ubuntu 这个还是很少的文章

离线lj80117.
发帖
2080
C币
-140273
威望
384
贡献值
1
银元
-3
铜钱
4627
人人网人气币
0
只看该作者 9楼 发表于: 2010-04-13
Re:[保留]
沉得好快,希望兄弟把这个脚本换成BASH SHELL脚本,我国庆放假有时间再实验下,谢谢。
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个