** 説明:** 最近、誰かがブロガーにサーバーのアップロード帯域幅を制限する方法を尋ねていたので、以前よく使っていた制限スクリプトであるWonderShaper
を共有します。原理は、WonderShaper
がトラフィック調整コマンドを定義するためにtc
を使用し、特定のネットワークインターフェースを処理するためにQoS
を使用するというものです。送信トラフィックは、異なる優先度のキューに配置され、送信トラフィック速度を制限するための目的が達成されます。一方、受信トラフィックはパケットの破棄によって速度制限が行われます。使いやすいですし、必要な方は詳細をご覧ください。
使用方法#
プロジェクトのアドレス:ここをクリックしてアクセス
インストールはパッケージを直接使用することができますが、バージョンがあまり新しくないため、ここでは最新のソースコードをGithub
から取得します。
1. 依存関係のインストール
# Debian/Ubuntuシステム
apt install -y make git
# CentOSシステム
yum install make git -y
2. WonderShaper のインストール
git clone https://github.com/magnific0/wondershaper.git
cd wondershaper
make install
3. 速度制限の設定
# 使用方法
USAGE: wondershaper [-hcs] [-a <adapter>] [-d <rate>] [-u <rate>]
OPTIONS:
-h このメッセージを表示
-a <adapter> アダプターを設定
-d <rate> 最大ダウンロード速度を設定(Kbps単位)および/または
-u <rate> 最大アップロード速度を設定(Kbps単位)
-p /etc/conf.d/wondershaper.confのプリセットを使用
-c アダプターから制限を解除
-s アダプターの現在のステータスを表示
-v 現在のバージョンを表示
まず、ネットワークカードを確認します:
# ここでは、ネットワークカードを確認するための3つのコマンドを提供しますが、最初のコマンドを使用することをお勧めします
ifconfig
ip addr
route
例えば、eth0
ネットワークカードの速度を制限する場合は、次のコマンドを使用します:
# アップロード帯域幅を10Mに制限
wondershaper -a eth0 -u 10240
# ダウンロード帯域幅を10Mに制限
wondershaper -a eth0 -d 10240
# アップロードとダウンロードの両方を10Mに制限
wondershaper -a eth0 -d 10240 -u 10240
# ネットワークカードの制限ルールをクリア
wondershaper -c -a eth0
その後、速度をテストすることができます。次のコマンドを使用します:
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
./speedtest-cli
これは制限をかける前の速度テストです。
アップロード / ダウンロードを 10M に制限した後の速度テストです。
起動時に自動起動するように設定する#
通常、制限ルールを設定した後、サーバーを再起動すると、制限ルールが自動的に無効になります。そのため、ここでは少し設定を行い、起動時に自動的に有効にする方法について説明します。以下に 2 つの方法を説明します。
1. rc.local を使用する方法
これは最も簡単な自動起動の設定方法ですが、Debian 9
、Ubuntu 17+
ではrc.local
ファイルが存在しないため、これらのシステムを使用する場合は事前に設定する必要があります。
1. rc-local.serviceを追加します。以下は1つのコマンドですので、一緒にコピーして実行してください。
cat > /etc/systemd/system/rc-local.service <<EOF
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
EOF
2. rc-localファイルを作成します。以下は1つのコマンドですので、一緒にコピーして実行してください。
cat > /etc/rc.local <<EOF
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
EOF
3. 権限を追加し、起動時に自動的に実行されるようにします。
chmod +x /etc/rc.local
systemctl start rc-local
systemctl enable rc-local
最後に、起動時に実行するコマンドをrc.local
ファイルに追加します。以下のコマンドを使用します:
# CentOS 7システム
echo "wondershaper -a eth0 -d 10240 -u 10240" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
# CentOS 6、Debian、Ubuntuシステム
echo "wondershaper -a eth0 -d 10240 -u 10240" >> /etc/rc.local
chmod +x /etc/rc.local
ここで、制限コマンドを適切に変更してください。
2. Systemd を使用する方法
インストール時にSystemd
の設定ファイルも提供されているため、使用するのが簡単ですが、この方法はCentOS 7
、Debian 8+
、Ubuntu 16+
などにしか適用されません。
起動時に、デフォルトで/etc/conf.d/wondershaper.conf
が呼び出されるため、まずそのファイルを編集します:
nano /etc/conf.d/wondershaper.conf
以下のようになります:
[wondershaper]
# Adapter
#
IFACE="eth0"
# Download rate in Kbps
#
DSPEED="10240"
# Upload rate in Kbps
#
USPEED="10240"
パラメータは、ネットワークカード、ダウンロード、アップロードの制限です。編集が完了したら、Ctrl+x
、y
を押して保存して終了します。
次に、起動して自動的に実行するようにします:
systemctl start wondershaper
systemctl enable wondershaper