[zz]linux下的虚拟机网络流量控制

本文介绍了如何使用Linux下的TC(Traffic Control)工具来限制虚拟机的网络流量。通过具体步骤和实例展示了如何配置内核参数,实现对KVM虚拟机网络带宽的有效控制,并验证了流量控制的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自http://www.cnblogs.com/lin-victor/archive/2012/05/14/2499101.html

关于如何限制虚拟机的网络流量问题,可以使用linux下的TC (traffic control),关于如何使用linux的tc命令参加下面几个链接:

利用TC命令为KVM限制各VM的网卡带宽 :http://www.fuwuqiweihu.com/iproute-tc-kvm-vm-network-limit/

TC控制流量: http://www.chinaunix.net/jh/4/350969.html

                    http://www.bitscn.com/os/linux/201003/183181_7.html 

                    http://www.chinaz.com/server/2009/0807/85806.shtml

 

发现ubuntu已有tc命令于是:

输入命令:

tc qdisc add dev eth0 root tbf rate 10Mbit latency 50ms burst 10000 mpu 64 mtu 150000

出现错误:

RTNETLINK answers: No such file or directory

问题出在相关模块没有加载,遂查找流量控制内核选项要求 http://linux-ip.net/articles/Traffic-Control-HOWTO/ 第5章 Software and tools 中有介绍 “Kernel requirements”:

#
# QoS and/or fair queueing
#
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_CSZ=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_POLICE=y

重新按照上述要求编译内核,重启后问题解决。

相关信息及测试数据:

系统版本: Linux nc2 3.2.0-rc3 #4 SMP Mon May 14 17:09:56 CST 2012 i686 GNU/Linux

 

未流量控制前信息:

root@nc2:~/lguest/botnet_lguest# tc -s qdisc ls dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 10413 bytes 86 pkt (dropped 0, overlimits 0 requeues 0)

 

测试网络流量:

root@nc2:~/start-kvm# scp ubuntu161.img root@nc1:/root
ubuntu161.img                                         20%  539MB  63.3MB/s   00:33 ETA

吞吐量为63.3MB/s

 

执行流量控制:

root@nc2:~/start-kvm# tc qdisc add dev eth0 root tbf rate 10Mbit latency 50ms burst 10000  mpu 64 mtu 150000

执行流量控制后信息:

root@nc2:~/start-kvm# tc qdisc ls dev eth0
qdisc tbf 8003: root refcnt 2 rate 10000Kbit burst 9997b lat 50.0ms

测试网络流量:

root@nc2:~/start-kvm# scp ubuntu161.img root@nc1:/root                                

ubuntu161.img                                          0%   18MB   1.2MB/s   36:13 ETA

吞吐量为1.2MB/s

 

 

测试结果显示流量控制成功!

 Note:  linux 下的流量控制只控发不控收,因此假设linux虚拟机的虚拟eth0 对应的TUN/TAP端口名称为tap0, 则如何对虚拟eth0实行TC控制,控制的是虚拟机的发包,如果对tap0设置TC控制则是对间接对虚拟机的接包进行控制。

 

 

 

通过命令 'tc qdisc ls dev eth0'

 

 
 
 

转载于:https://www.cnblogs.com/zhangzhang/archive/2013/03/25/2980607.html

### 虚拟机网络配置选项 #### NAT 模式 NAT(Network Address Translation)模式下,虚拟机通过宿主机上的NAT服务访问外部网络。虚拟机网络流量会经过宿主机中的虚拟NAT设备进行转发,并共享宿主机的物理网络接口连接到外网。对于外部网络来说,这些虚拟机看起来像是宿主机上的应用程序[^2]。 在这种模式中,所有使用NAT方式联网的虚拟机会共用同一个IP地址来访问互联网,而它们之间的内部通信则依赖于私有的子网环境。值得注意的是,在单个宿主机内通常只会存在一个NAT类型的虚拟网络实例;这意味着即使有多个虚拟机选择了NAT作为其网络适配器的工作模式,也能够互相之间建立联系并交换数据包[^3]。 ```bash # 配置 VMware 中的 NAT 网络参数示例命令 vmware-networks --configure /etc/vmware/networking.conf ``` #### 桥接模式 桥接模式使得每台虚拟机能像真实的计算机一样直接接入局域网(LAN),获得独立的MAC地址以及由DHCP服务器分配给它的唯一IP地址。这样做的好处在于它能提供更好的性能表现并且更容易管理因为可以直接利用现有的企业级网络安全策略服务资源。 当选择此模式时,建议确保宿主机所在的物理网络支持额外设备加入,并且有足够的可用IP范围供新成员获取合法的身份认证信息以便正常运作。 ```xml <!-- 设置 VMware Workstation Pro 的虚拟机为桥接模式 --> <nic type="bridged"> <mac address="00:50:56:XX:YY:ZZ"/> </nic> ``` #### Host-Only (仅主机) 模式 Host-only模式创建了一个封闭的小型专用网络,其中只有该特定宿主机及其关联的虚拟机可以相互通信。这种隔离特性非常适合测试目的或是构建安全敏感的应用场景,因为它不会暴露任何端口至外界internet或公司内部LAN之中。 在这个环境下,默认情况下所有的VM都将被赋予来自预定义池内的静态IPv4/IPv6地址之一,除非管理员另行指定其他规则来进行更精细控制。 ```json { "network": { "type": "hostonly", "adapter": [ {"ip": "192.168.77.1", "netmask": "255.255.255.0"} ] } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值