$Date: 2023/07/06 20:22:18 $
従来のQoS技術では、事前にホストあるいはアプリケーションなどの単位でクラスを定義し、そのクラスごとに送信量の制御をすることはできても、刻々と変化するホスト単位での送信量に応じた動的なフロー制御を行うことは不可能でした。例えば、同じアプリケーションを利用しているユーザ間で、特定ユーザが帯域を占有するほどの過大な通信を行っていた場合、他のユーザの通信状況にまで影響が及びますが、この場合、どのユーザがどれほどの通信を行うのか事前に予測することは不可能であり、また、ユーザごとにクラス分けするといった行為も公平性に欠けてしまい、このような帯域の占有行為を防御するための有効な手段はありませんでした。
Dynamic Class Control(DCC)とはQoSの技術の一つであり、ホストごとの送信量/受信量を監視し、その送信量/受信量に応じて動的にフロー制御をする技術です。同じクラスを使用しているトラフィックのうち、特定ユーザのトラフィックにより帯域の占有がなされている場合、その通信を自動的に一定時間遮断したり、使用可能な帯域を動的に変更します。これにより、前述した帯域の占有行為を防御することが可能となり、ユーザ間に公平性をもたらします。
また、Rev.10.01系以降のファームウェアでは、WinnyやShareの検知、IPマスカレード変換セッション数制限をトリガとして、それらを使用しているホストのフローを制御することもできます。Dynamic Class Control により制御されていることをWeb画面上に表示してホストに通知することができます。
ヤマハルーターでは以下の機種およびファームウェアで、Dynamic Class Control機能をサポートしています。
機種 | ファームウェア |
---|---|
vRX VMware ESXi版 | すべてのリビジョン |
vRX Amazon EC2版 | |
RTX3510 | |
RTX1300 | |
RTX1220 | |
RTX830 | |
NVR700W | |
RTX1210 | |
RTX5000 | |
RTX3500 | |
FWX120 | |
RTX810 | |
RTX1200 | |
SRT100 |
上り帯域において帯域制御を行っているネットワーク(図1)を例に取り、本機能による動的なフロー制御を実現する過程を説明します。なお、監視対象とするクライアントごとの帯域は送信元と宛先のどちら側の視点でも設定することが可能ですが、この例では送信元のクライアントごとに送信帯域の閾値を設定します。
LAN インタフェースにおいてのみ DCC が設定できます。
1インタフェースにつき、帯域を監視できるホストの最大数は512です。
1インタフェースにつき、DCC によって同時に制御可能なホストの最大数は64です。
DCC を適用しているインタフェースと同一のインタフェースで帯域検出QoS、または、負荷通知QoSを併用している場合、帯域検出QoS、または、負荷通知QoSにより、動的にインタフェース速度やクラス帯域が変更されたり、帯域検出用測定パケットの送信時にはQoSアルゴリズムが一時的に優先制御へ切り替わるため、そのタイミングで DCC の制御内容が全てリセットされます。この場合、両機能を有効に働かせるためには時間関連のパラメータを両機能で調整する必要があります。例えば、600秒間隔で帯域検出を行っているときに、queue INTERFACE class control コマンドの threshold オプションに threshold=30%,630 と設定しても DCC が過剰送信を検知することはできません。
IPマスカレード変換セッション数制限をトリガとするには、nat descriptor masquerade session limitコマンドの設定が必要です。
DCCを設定するインタフェースとWinny/Share検知もしくはIPマスカレードを設定するインタフェースは同じである必要はありませんが、queue class controlコマンドのwatchオプションはWinny/Share検知の監視対象となるホストもしくはIPマスカレードの内側アドレスを含むように設定する必要があります。
Winny/Share検知をトリガとした場合でもDCCが設定されているクラス内ではWinnyセッション、Shareセッションだけを制御の対象とすることはできず、必ずホスト単位で制御されます。
ホストへ制御されていることを通知するように設定してあっても、ポート番号80番以外のhttpサーバーやhttpsサーバーへアクセスした場合には通知画面は表示されません。
IPマスカレード変換セッション数制限をトリガとして制御が開始された場合、使用しているセッション数が制限数以下になるまでは新たなセッションを作ることができないため、通知画面は表示されずエラーとなります。 また、DCCを設定しているインタフェースとWebアクセスに使用するインタフェースが同一かつ、 FORWARDING パラメータを reject に設定した場合、通知画面の表示の契機となるWebアクセスができなくなるため、通知画面は表示されずエラーとなります。
INTERFACE ... | LAN インタフェース名 |
CLASS ... | DCCを有効にするクラス(1..16) |
IP_ADDRESS | |
|
サーバなどの監視対象から除外するホストのIPアドレスを設定する(空白で区切って複数指定可能、ハイフン「-」を使用して範囲指定も可能) |
OPTION = VALUE列 |
OPTION | VALUE | 説明 |
---|---|---|
forwarding | reject, 1..16 | 過剰送信と見なしたトラフィックの転送先のクラス |
watch | source | 送信元IPアドレス単位で帯域を監視する |
destination | 宛先IPアドレス単位で帯域を監視する | |
threshold | 占有率,秒数 | 過剰送信と見なす閾値を帯域の占有率と占有時間をカンマ「,」で結び設定する(占有率 1%..100%、秒数 10..86400) |
time | infinity, 10..604800 | 過剰送信と見なしたトラフィックを遮断する時間、または、使用するクラスを変更する時間(秒) |
mode | forced | 動作モードを強制制御モードにする |
adaptive | 動作モードを適応制御モードにする | |
trigger | winny | Winny検知をトリガとして制御を開始する |
share | Share検知をトリガとして制御を開始する | |
masquerade-session | IPマスカレード変換セッション数制限をトリガとして制御を開始する | |
notice | on | 制御されていることを通知する |
off | 制御されていることを通知しない |
監視対象のインタフェースに適用されている QoS 種別が shaping の場合は、queue INTERFACE class property コマンドで設定されたクラス帯域に対する占有率(クラス帯域に保証値と上限値を指定している場合は保証値に対する占有率)を監視する。QoS 種別が priority の場合は、インタフェース帯域に対する占有率を監視する。監視時は10秒毎に占有率を求め、その占有率が指定秒数を超えたときに閾値超過と判定される。例えば、threshold=70%,30 と設定した場合、帯域使用率70%以上である10秒間が連続して3回続いたときに閾値超過と判定される。
同一のホストから(watch = source)、あるいは、同一のホスト宛て(watch = destination)の過剰送信を検知した場合、そのトラフィックは FORWARDING パラメータに指定されたクラスへ転送され、転送先のクラス設定に従ってパケットの送出が行われる。なお、FORWARDING パラメータに reject を指定した場合、当該トラフィックは遮断される。また、FORWARDING パラメータは省略することも可能で、この場合転送制御は行われないが、threshold を超過しているホストを show status qos コマンドから確認することができる。
TIME パラメータは転送制御が行われる時間を示し、infinity を指定した場合は、無期限に対象のトラフィックの遮断、または、使用クラスの変更がなされる。
MODE パラメータは動作モードを指定する。forced を指定した場合は、THRESHOLD パラメータで指定した占有時間が経過したら直ちに当該フローの制御を実行する。また、TIME パラメータで指定した制御時間が経過したら直ちに当該フローの制御を解除する。adaptive を指定した場合は、THRESHOLD パラメータで指定した占有時間が経過しても当該クラスの使用帯域が保証帯域の90%未満である間は制御を保留する。また、TIME パラメータで指定した制御時間が経過しても当該クラスの使用帯域が保証帯域の90%以上である間は制御解除を保留する。
制御が保留されているホストは show status qos コマンドで表示されず、制御が保留されている間に threshold の占有率を割ったらその時点で制御は解除される。
MODE パラメータは Rev.10.01 系以降で使用可能。
TRIGGER パラメータは制御開始のトリガとなるルーター内部のイベントを指定する。カンマ「,」で区切って併記することができる。
TRIGGER パラメータは Rev.10.01 系以降で使用可能。
NOTICE パラメータは Dynamic Class Control により制御されていることをホストに通知するかどうかを指定する。on を指定した場合は、当該ホストが制御されてから初めていずれかの HTTP サーバー (ポート番号:80) へ Web アクセスをしたときに、Web 画面上にその旨を表示して通知する。NOTICE パラメータは Rev.10.01 系以降、かつ、HTTP サーバー機能を搭載している機種で使用可能。
INFO ... | 表示する情報の種類 |
|
使用帯域 |
|
キューイングしているパケット数 |
|
Dynamic Class Control の制御状況 |
|
すべての情報 |
INTERFACE |
|
|
CLASS ... | クラス(RTX3510: 1..250; vRX VMware ESXi版、vRX Amazon EC2版、RTX5000、RTX3500、RTX3000: 1..100; 他の機種: 1..16) |
ip route default gateway 172.16.10.254 ip route 192.168.1.0/24 gateway tunnel 1 ip lan1 address 192.168.2.1/24 queue lan2 type shaping queue lan2 class property 1 bandwidth=15m queue lan2 class property 2 bandwidth=4m queue lan2 class property 3 bandwidth=10m queue lan2 class property 4 bandwidth=100k (1) queue lan2 class control 2 forwarding=reject (2) queue lan2 class control 3 forwarding=4 (3) ip lan2 address 172.16.10.1/24 tunnel select 1 ipsec tunnel 101 ipsec sa policy 101 1 esp aes-cbc sha-hmac anti-replay-check=off ipsec ike always-on 1 on ipsec ike pre-shared-key 1 text 2's-wA9R7+j9#k53I ipsec ike remote address 1 172.16.2.1 queue tunnel class filter list 1 2 tunnel enable 1 ipsec auto refresh on queue class filter 1 1 ip * * tcp 108 * queue class filter 2 3 ip * * tcp * ftp
(1) | DCC で使用する転送先のクラスを用意します。 |
(2) | クラス2を使用する通信に対し DCC を実行します。 |
reject を設定しているので、過剰に送信を行っているホストからの当該トラフィックを一定時間遮断します。 | |
(3) | クラス3を使用する トンネル内の通信に対し DCC を実行します。 |
過剰に送信を行っているホストからの当該トラフィックの使用するクラスを、一定時間クラス4へ変更します。 |
ip route default gateway 172.16.10.254 queue lan1 type shaping (1) queue lan1 class filter list 1 2 3 (2) queue lan1 class property 1 bandwidth=6m,100m (2) queue lan1 class property 2 bandwidth=5900k,100m queue lan1 class property 3 bandwidth=100k (3) queue lan1 class control 2 forwarding=3 watch=destination (4) threshold=20%,300 time=1800 ip lan1 address 192.168.1.1/24 ip lan2 address 172.16.10.1/24 ip lan2 nat descriptor 1 nat descriptor type 1 nat nat descriptor address outer 1 172.16.10.1-172.16.10.10 nat descriptor static 1 1 172.16.10.1=192.168.1.10 10 queue class filter 1 1 ip * * udp * * queue class filter 2 1 ip * * tcp ftp * queue class filter 3 1 ip * * tcp * ftp
(1) | 受信方向で QoS をかける必要があるため、LAN1 に QoS の設定をします。 |
ファイル交換ソフトの多くは TCP を使用するため、受信側でホストに届く前に QoS でパケットを落とすことによって TCP のフロー制御が働き、当該コネクションのウィンドウサイズが小さくなることを利用します。 | |
なお、LAN側で QoS をかける場合、帯域を絞る必要はありません。この例では100BASE-TXを使用しているため、DCC で抑制するクラス3以外のクラス1/クラス2の帯域の上限値には LAN の最大速度である100Mを設定しています。WAN回線の下り速度が最大12Mであっても、瞬間的にバーストすることで受信速度が12Mを超えることもあり得るので、余裕を持った帯域を設定しておくのが良いでしょう。 | |
(2) | DCC による制御を受けさせたくないパケットの使用するクラスを用意し、フィルタリングします。 |
(3) | DCC で使用する転送先のクラスを用意します。 |
(4) | クラス2を使用する通信に対し DCC を実行します。 |
UDP パケットと FTP 以外のトラフィックではすべてデフォルトクラスのクラス2が使用されますが、長時間受信状態が続くというファイル交換ソフトの特性を踏まえ、目的のトラフィックだけが制御されるように threshold パラメータを調整します。また、受信方向に DCC を実行するので、受信ホストは宛先ホストとなります。よって、宛先IPアドレス単位で帯域の監視をするように watch パラメータには destination を設定します。 | |
以下のように mode パラメータに adaptive を設定すれば、ファイル交換ソフトのトラフィックも含めてクラス2の使用帯域が同クラスの保証帯域5900Kbit/sの90%である5310Kbit/s未満である間はファイル交換ソフトのトラフィックも制御されずに帯域を使い続けることができますが、クラス2を使用するファイル交換ソフト以外のトラフィックの使用帯域が5310Kbit/s以上である間はファイル交換ソフトのトラフィックは制御され続けます。 queue lan1 class control 2 forwarding=3 watch=destination threshold=20%,300 time=1800 mode=adaptive |
|
以下のように LAN2 の out 方向にWinny検知を設定したうえで trigger パラメータに winny を設定すると、LAN1配下のホストによる Winny の使用を検知した時点でその使用帯域に依らずに制御を開始します。 queue lan1 class control 2 forwarding=3 watch=destination threshold=20%,300 time=1800 trigger=winny ip lan2 secure filter out dynamic 100 ip lan2 intrusion detection out on ip lan2 intrusion detection winny on ip lan2 intrusion detection default off ip filter dynamic 100 * * tcp |
|
以下のように LAN2 にIPマスカレードを設定したうえで trigger パラメータに masquerade-session を設定すると、LAN1配下のホストのIPマスカレード変換セッション数がIPマスカレード変換セッション数制限機能の制限値に達した時点でその使用帯域に依らずに制御を開始します。 queue lan1 class control 2 forwarding=3 watch=destination threshold=20%,300 time=1800 trigger=masquerade-session ip lan2 nat descriptor 1 nat descriptor type 1 masquerade nat descriptor masquerade session limit 1 1 200 |
|
なお、制御されているホストが初めていずれかの HTTP サーバーへ Web アクセスをすると以下のような通知画面が表示されます。![]() |