使用iptables进行流量整形主要涉及到两个模块:tc(Traffic Control)和iptables。以下是使用这两个模块进行流量整形的基本步骤:
首先,确保你的系统上安装了tc和iptables。在大多数Linux发行版中,这些工具通常是预装的。如果没有,可以使用包管理器进行安装。
sudo apt-get install iproute2 iptables # Debian/Ubuntu
sudo yum install iproute iptables # CentOS/RHEL
确定你要进行流量整形的网络接口,例如eth0。
ip link set eth0 up
使用tc命令创建一个队列规则,并将其应用到网络接口上。
sudo tc qdisc add dev eth0 root handle 1: htb default 30
为不同的流量类型创建类。例如,为HTTP流量创建一个类。
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 2mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbit ceil 1mbit
使用iptables标记特定类型的流量,以便tc可以根据这些标记进行流量整形。
sudo iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 10
将标记的流量绑定到之前创建的类。
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
使用tc命令监控流量整形的效果,并根据需要进行调整。
sudo tc -s qdisc ls dev eth0
sudo tc -s class ls dev eth0
假设你想限制IP地址为192.168.1.100的设备的带宽。
创建队列规则:
sudo tc qdisc add dev eth0 root handle 1: htb default 30
创建类:
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 2mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 256kbit ceil 512kbit
使用iptables标记流量:
sudo iptables -t mangle -A PREROUTING -s 192.168.1.100 -j MARK --set-mark 10
将标记的流量绑定到类:
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
通过以上步骤,你可以使用iptables和tc进行基本的流量整形。根据具体需求,你可能需要进一步调整和优化配置。