目录:
- 1、linux 路由器限速实现方法
- 2、linux网络设置限速/丢包/延时/乱序
- 3、如何对linux下某个端口限速
- 4、linux下有什么可以限制网速的软件
- 5、linux中如何控制端口流量
linux 路由器限速实现方法
linux的开源和免费使得越来越多的厂家用它来做防火墙和路由器,今天本文用linux来打造一台高性能的能够限速的路由器。文章就以red hat为例教大家在linux下进行路由器限速。
linux的开源和免费使得越来越多的厂家用它来做防火墙和路由器,如海蜘蛛,飞鱼星等,其实我们也可以用linux来打造一台高性能的路由器。下面就以red hat为例(其他版本大同小异)教大家做一台能限速的`路由器,如何在linux下进行路由器限速就不再困难了。
安装linux如果是新手请安装时安装图形桌面。Linux路由器限速的设置步骤如下:
路由器限速第一步:建立adsl连接,在系统设置——网络设置处有。在图形界面下很容易搞定。
路由器限速第二步:打开IP转发和伪装(也就是路由与NAT)
1、作为根用户打开/etc/sysconfig/network文件,在文件增加以下一行:
GATEWAYDEV=PPP0 这句话的作用是设定默认路由,有时没有也可
2、打开IP转发功能:打开/etc/sysctl.conf文件,修改net.ipv4.ip_forward=0一行,改0改为1
3、重启系统
路由器限速第三步:设置iptables防火墙,决定那些IP能通过linux服务器上网。
下面以允许192.168.0.0网段为例:
1、打开终端在#字提示符下输入以下命令:
iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE #这句意思是伪装从pppo出去的IP
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT #这句意思是转发来自192。168。0。0网段的通讯
iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT #这句意思是转发到达192。168。0。0网段的通讯
iptables -A FORWARD -s ! 192.168.0.0/24 -j DROP #这句意思是拒绝转发非192.168.0.0网段的通讯。
2、保存以上防火墙规则,以保证重启后还有效, 输入命令:iptables-save /etc/sysconfig/iptables,这样,你的linux路由器应该就能跑起来了。
linux做路由器限速的实现:在linux中有专门限速的软件--tc,但TC的语法新手难以掌握,我们可以在防火墙上通过限定某个IP或某段IP在一秒内通过的数据包的数量来限速。
下面以限制192.168.0.2这个IP的网速为例说说,在桌面环境下打开/etc/syscofngi/iptables 有没有发现,刚才的设定全记录在这个文件里,现在做的就在这个文件里添加规则就得了。
1、先要找到filter
2、在filter下面一行增加以下两行:
-A FORWARD -m limit -d 192.168.0.2 --limit 30/sec -j ACCEPT # 这句意思是限定每秒只转发30个到达192。168。0。2的数据包(约每秒45KB 一个数据包是1.5KB)
-A FORWARD -d 192.168.0.2 -j DROP #这句作用是超过限制的到达192.168.0.2的数据包不通过)
3、路由器限速经过重启系统就实现了。
linux网络设置限速/丢包/延时/乱序
1. 限速/取消限速/测试限速
限速: wondershaper eth0 10000 8000 下行10000kb/s 上行8000kb/s
取消限速: wondershaper clear eth0
测试限速: server端: iperf3 -s client端: iperf3 -c serverip -i 1
查看指定端口速度: iftop -i eth0
2. 模拟丢包
tc qdisc add dev eth0 root netem loss 1%
3. 模拟延时
tc qdisc add dev eth0 root netem delay 100ms
4. 模拟乱序
tc qdisc add dev eth0 root netem delay 10ms reorder 25%
参考
如何对linux下某个端口限速
iptables不行,需要用tc进行流量控制。
iptables可以通过限制包的数量来控制速度 --m limit --limit xx/s
linux下有什么可以限制网速的软件
专门的限速软件,只有linux防火墙如:pfsence,不过默认的iptables防火墙也可以限速的
如以ip地址来限速
iptables -A FORWARD -m limit -d 202.96.209.6 --limit 2400/s --limit-burst 100 -j ACCEPT
iptables -A FORWARD -d 202.96.209.6 -j DROP
iptables -A FORWARD -m limit -s 202.96.209.6 --limit 2400/s --limit-burst 100 -j ACCEPT
iptables -A FORWARD -s 202.96.209.6 -j DROP
限制某网段
iptables -A FORWARD -s 192.168.100.0/24 -m limit --limit 100/s -j ACCEPT
iptables -A FORWARD -s 192.168.100.0/24 -j DROP
以协议icmp放ddos限速
iptables -A INPUT -f -m limit --limit 150/sec --limit-burst 100 -j ACCEPT
限制ssh接入频率
iptables -A INPUT -p tcp –dport 22 -s 10.1.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -j ratelimit
linux中如何控制端口流量
配置网卡
建立一台虚拟机,并安装完成后以桥接的方式在虚拟机上面添加两张网卡。分别为eth0和eth1。
eth0: a.b.c.d(外网的上网地址)
eth1: 172.16.44.1(做为内网的网关)
Tip
原先我使用eth0:0的这种虚拟网卡的形式去配置一直不成功,后来使用双网卡的时候一直忘了把eth0:0这张虚拟网卡删掉导致了限速配置一直不成功,浪费了大把的青葱。
配置iptables nat
#开启ip_forward
echo "1"/proc/sys/net/ipv4/ip_forward
#清除原来的防火墙规则
iptables -F
iptables -t nat -F
iptables -t mangle -F
#添加nat转发
iptables -t nat -A POSTROUTING -s 172.16.44.0/24 -o eth0 -j MASQUERADE
通过执行上面的代码后,局域网内的电脑就可以上网了。
端口转发
由于我的内网还挂了网站,所以要开启80端口的转发。
iptables -t nat -I PREROUTING -p tcp -d a.b.c.d --dport 80 -j DNAT --to 172.16.44.210:80
iptables -t nat -I POSTROUTING -p tcp -d 172.16.44.210 --dport 80 -j SNAT --to 172.16.44.1
这条命令指定外网地址a.b.c.d的80端口转发到172.16.44.210:80上。由于是双网卡,所以需要做一下回路。
下载限速
下载限速要在eth1上面做,判断数据包的目的地址来做限制。tc包括三部分:队列、类、过滤器。我使用了htb方式去限制速度,也可以使用cbq,但cbq配置比较复杂一点,而且据说性能没htb好。
#删除原来的tc规则队列
tc qdisc del dev eth1 root
#添加tc规则队列
tc qdisc add dev eth1 root handle 10: htb default 256
#生成根类
tc class add dev eth1 parent 10: classid 10:1 htb rate 100mbit ceil 100mbit
#支类列表用于限制速度
#这里的rate指的是保证带宽,ceil是最大带宽。
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 400kbps ceil 400kbps prio 1
#添加支类规则队列
#采用sfq伪随机队列,并且10秒重置一次散列函数。
tc qdisc add dev eth1 parent 10:10 handle 101: sfq perturb 10
#建立网络包过滤器,设置fw。
tc filter add dev eth1 parent 10: protocol ip prio 10 handle 1 fw classid 10:10
#在iptables里面设定mark值,与上面的handle值对应。
iptables -t mangle -A POSTROUTING -d 172.16.44.130 -j MARK --set-mark 1
通过上面的代码就可以限制172.16.44.130这台机子的下载速度到400kbps。
Tip
经过实际测试这里的kbps实际上就是KB/S每秒千字节。另一个单位是kbit,这个才是每秒千比特。这里的172.16.44.130也可以写成一个网段,比如:172.16.44.0/24
上传限速
上传限速的原理其实跟下载的差不多,只不过限制的网卡不同,要在eth0上过滤来源地址去限制。
#删除原来的tc规则队列
tc qdisc del dev eth0 root
#添加tc规则队列
tc qdisc add dev eth0 root handle 20: htb default 256
#生成根类
tc class add dev eth0 parent 20: classid 20:1 htb rate 100mbit ceil 100mbit
#支类列表用于限制速度
tc class add dev eth0 parent 20:1 classid 20:10 htb rate 40kbps ceil 40kbps prio 1
#添加支类规则队列
tc qdisc add dev eth0 parent 20:10 handle 201: sfq perturb 10
#建立网络包过滤器
tc filter add dev eth0 parent 20: protocol ip prio 100 handle 2 fw classid 20:10
iptables -t mangle -A PREROUTING -s 172.16.44.130 -j MARK --set-mark 2
Tip
跟下载不同的是POSTROUTING要改成PREROUTING,-d改成-s。
观察连接数
通过iptables的nat连接可以通过下面的代码查看。至于统计连接数可以写代码实现,也可以利用awk,grep等工具。反正里面的内容就是文本,处理起来也比较简单。
cat /proc/net/ip_conntrack
写在结尾
到此上网、端口转发和流量限制都已经实现。下次再考虑配置个dhcp server和dnsmasq。至于一些路由器其它诸如mac地址绑定,限制上网等用到的时候再去研究研究。