iptables 是 Linux 系统中用于配置内核防火墙的一个命令行工具,它本身并不直接提供流量整形的功能。但是,你可以结合 tc(traffic control)工具来实现流量整形。以下是一个基本的步骤指南:
首先,确保你已经安装了 iptables 和 iproute2(包含 tc 命令)。
sudo apt-get update
sudo apt-get install iptables iproute2
HTB 是一种常用的流量整形算法,它允许你为不同的流量类别设置带宽限制。
sudo tc qdisc add dev eth0 root handle 1: htb default 30
这里,eth0 是你的网络接口,handle 1: 是队列的句柄,default 30 是默认类别。
接下来,创建一个主类和多个子类来分配带宽。
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbit ceil 1mbit
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 256kbit ceil 1mbit
这里,rate 是保证的带宽,ceil 是最大带宽。
使用 iptables 和 tc 过滤器将流量导向不同的类别。
sudo iptables -A POSTROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 10
sudo iptables -A POSTROUTING -t mangle -p tcp --dport 443 -j MARK --set-mark 20
这里,我们将 HTTP 流量(端口 80)标记为类别 10,将 HTTPS 流量(端口 443)标记为类别 20。
最后,将标记与之前创建的类别关联起来。
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 20 fw flowid 1:20
使用以下命令验证配置是否正确:
sudo tc -s qdisc ls dev eth0
sudo tc -s class ls dev eth0
sudo iptables -t mangle -L -v -n
通过以上步骤,你可以使用 iptables 和 tc 实现基本的流量整形。对于更复杂的场景,可能需要进一步调整和优化配置。