
ポートから出る帯域幅を制限するためにしばらく使用してきた帯域幅スクリプトに問題があります。
発信ポート速度を変更したいと思うまで、最初はうまくいきました。より高い数字(200mbit〜400mbit)に切り替えてスクリプトを再起動しました。何らかの理由で新しい帯域幅制限は適用されず、以前の制限はまだ適用されます。サービスを初期化するためのスクリプトを設定しました。これはコードの一部です。
# Interface
interface=eth0
# Define the upload, follow units can be
upload_limit=400mbit
start() {
# Start the tc configuration and set all packets default to 10
/sbin/tc qdisc add dev $interface root handle 1:0 htb default 10
# Set default speed for all packets
/sbin/tc class add dev $interface parent 1:0 classid 1:10 htb rate 1000mbit ceil 1000mbit prio 0
# Set speeds for packets marked with 20
/sbin/tc class add dev $interface parent 1:0 classid 1:20 htb rate $upload_limit ceil $upload_limit prio 0
# Mark packets for port 182 to 20 so that tc can handle the traffic.
/sbin/iptables -A OUTPUT -t mangle -p tcp --sport 182 -j MARK --set-mark 20
/sbin/service iptables save
# Assign it to appropriate qdisc
tc filter add dev $interface parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
}
stop() {
/sbin/tc qdisc del dev $interface root
}
誰でも私にアドバイスを与えることができますか?
答え1
IMHO、以前のルールがまだ存在する理由は、追加する行があり、削除する行がないため、「魔法」を引き起こしたiptablesルールがまだ存在するためです。 iptablesルールファイルを確認してください。以前のバージョン(ポート)では、「iptables -D OUTPUT -t mangle -p tcp --sport 182 -j MARK --set-mark 20」に似た行がたくさんあるはずです。 (スクリプトを実行するたびに新しいスクリプトを作成して後で保存するため)
stop() 関数に Iptables コマンドを配置して、マングルテーブルルールをクリーンアップします。次のようになります。 /sbin/iptables -D OUTPUT -t mangle -p tcp --sport 182 -j MARK --set-mark 20