iptables:すべてのホストのMacアドレスあたりのクォータをダウンロードする

iptables:すべてのホストのMacアドレスあたりのクォータをダウンロードする

Linuxルーターですべてのホストのダウンロードクォータを設定するには?

以下は、多くのゲストと共有されるWi-Fiネットワークです。

  • 訪問者あたりのダウンロードクォータは、最初は制限なしで150 MBでなければなりません。
  • クォータに達すると、ダウンロード速度は50k / sに制限する必要があります。
  • フィルタリングはmacアドレスベースで行う必要があり、IPアドレスはdhcpによって変更されることがあります。

ガーゴイルルータは同様の機能を実装していますが、残念ながらここではガーゴイルを使用することはできません。これを実装するには、tcとiptablesを使用する必要があります。

これ回答良い出発点は次のとおりです。

iptables -A INPUT -p tcp -s 192.168.0.2 -m quota --quota 13958643712 -j ACCEPT
iptables -A INPUT -p tcp -j CLASSIFY --set-class 1:12

IPの代わりにMACアドレスを使用することは簡単ですが、アドレスを事前に知っておく必要がありますが、ここではそうではありません。

答え1

いくつかの研究の最後に、以下を発見しました。

まず、いくつかの構成は次のとおりです。

# download quota (Mb)
dl_quota_mb=150
dl_quota=$(($dl_quota_mb * 1024 * 1024))

# max speed once overquota (k/s)
dl_cap_kb=50
dl_cap=$(($dl_cap_kb * 8))

# wifi interface
if_lan=wlan0

# lan subnet
lan=192.168.1

ダウンロード速度を制限するには、IPごとにtcクラスを作成します。

TCA="tc class add dev $if_lan"
TQA="tc qdisc add dev $if_lan"
SFQ="sfq perturb 10"

$TQA root handle 1: htb
# over quota speed limits
for i in `seq 1 254`; do
    $TCA parent 1: classid 1:$i htb rate ${dl_cap}kbit ceil ${dl_cap}kbit prio 2
    $TQA parent 1:$i handle $i: $SFQ
done

アカウント機能を使用してLAN IP用のIPsetを作成します。

ipset create IP_QUOTA bitmap:ip range $lan.0/24 counters
ipset add IP_QUOTA $lan.1-$lan.254

iptablesを使用して過剰なipsパケットを分類して制限を適用します。

IPT="iptables -t mangle"
IPT_POST="iptables -t mangle -A POSTROUTING -o $if_lan"

$IPT -N overquota
$IPT_POST -m set --match-set IP_QUOTA dst --bytes-gt $dl_quota -j overquota

# classify packets
for i in `seq 1 254`; do
    $IPT -A overquota --dst $lan.$i -j CLASSIFY --set-class 1:$i
done

これにより、IPアドレスあたりのダウンロードクォータが提供されます。 Macアドレスあたりのダウンロードクォータを取得する1つの方法は、mac / ipペアの変更を監視し、それに応じてIPカウンタを設定/リセットすることです。

プロジェクトgithubはOpenWrtのための完全なソリューションを実装します。

メモ:2017年6月現在、GargoyleのダウンロードクォータはIPアドレスに基づいて計算されます。最後に、Gargoyleでこのようなものを実装することをお勧めします。

関連情報