mangleテーブルでQoSを実現:iptablesテンプレート集 改訂版(6)(1/3 ページ)
この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
はじめに
サービスや送受信先といったパケットの種別に基づいて通信速度を制限したり、最低速度を確保したりといった通信のQoS(Quality of Service)を実現するには、iptablesのmangleテーブルを使うことができます。今回はmangleテーブルを使ったQoSの設定方法を紹介します。
関連リンク:
→Linuxで作るファイアウォール[パケットフィルタリング設定編]
http://www.atmarkit.co.jp/flinux/rensai/security05/security05a.html
→連載記事 「習うより慣れろ! iptablesテンプレート集」
http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html
→連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」
http://www.atmarkit.co.jp/flinux/index/indexfiles/newiptablesindex.html
mangleテーブルによるQoS
第1回および第2回の「filter」テーブル、第3回および第4回の「nat」テーブルに続き、「mangle」テーブルの利用方法を解説します。mangleテーブルでは、パケットのIPヘッダ中で定義されているTOS(Type Of Service)フィールドの値を書き換えることができます(図1)。TOSフィールドはパケット処理の優先度付けを行い、通信品質を制御するQoS(Quality of Service)に利用されます。
帯域制御の処理そのものは、QoSに対応したルータが行います。iptablesは、ルータが参照する、パケットのTOSやDSCPといった優先付けのための値を書き換えるだけです。
Linuxでも、NATを使ったルータ機能とともにiproute2を使用することで、QoSを実施できます。iproute2は、FedoraやCentOS、Ubuntuなどのディストリビューションでは、「iproute」というパッケージとして提供されています。本稿ではiproute2の使用方法までは解説しませんが、興味のある方はドキュメントなどを参考にしてください(コラム参照)。
それでは、QoS制御に対応するようパケットを書き換える方法を見てみましょう。QoS制御には「TOS」ベースのものと、「DiffServ」ベースのものがあります。現在では、TOSよりも柔軟な設定が可能なDiffServベースが使用されることが多いです。TOSもDiffServもIPパケットのTOS(Type Of Service)フィールドを使用しますが、DiffServではTOSフィールドを見直し、新たにDS(Differentiated Services)フィールドとして再定義したものを使用します。
TOSフィールドを書き換えるには、前述のとおりiptablesのmangleテーブルを使用します。TOSベースのQoSに対応するようiptablesを実行し、パケットを書き換えます。優先順位付けには、文字列や数値(10進数または16進数)を用います。
mangleテーブルで書き換えが可能な値には、主にTOS/DSCP/ECN/MARKといったものがあります。
TOS
TOSフィールドの値を新たに設定/変更できます。値はTOS名または数値(10進数または16進数)。
例:--set-tos TOS名または数値
指定可能なTOS名(数値) | 意味 | |
---|---|---|
高 ↑ |
Minimize-Delay (16または0x10) |
パケットを渡す際の遅延(delay)を最小限にする |
Maximize-Throughput (8または0x08) |
できる限り高スループットの経路を探す | |
優先度 | Maximize-Reliability (4または0x04) |
できる限りコネクションの信頼性が高く、できる限り信頼性の高いラインを使う |
↓ 低 |
Minimize-Cost (2または0x02) |
通信相手までの通過コストが最も少ない経路を見つける |
Normal-Service (0または0x00) |
特別の要件を持たない一般的なもの | |
表1 指定可能なTOS名(数値) |
DSCP
TOSフィールドは、新たにDS(Differentiated Services:DiffServ)フィールドとして再定義されています。このDSフィールドに、DiffServ対応のルータなどが行う優先度制御動作を決めるための値を設定します。
例:--set-dscp DSCPの数値(10進数または16進数) --set-dscp-class DiffServクラス(BE、EF、AF○○、CS○[○:数字])
ECN
ECNビット(輻輳通知機能に使われるECEやCWRフラグ)を削除できます。
例:--ecn-tcp-remove
MARK
パケットに特別なマーク(MARK値)を付けます。ただし、マークが維持されるのはパケットがカーネルの中で処理されている間のみです。通常はiproute2と組み合わせて、マークが付いているパケットのルーティングを切り替えたり、帯域制限やClass Based Queuing(CBQ:クラスごとのトラフィック制御)に使用します。マーク値によってどのように処理を行うかは、ip/tcコマンドとの連携操作によります。
例:--set-mark mark マーク値(符号なしの整数:32bitシステムでは4294967296通り)
コラム iproute2
カーネルコンパイル時にオプションを有効にしていれば、iproute2を利用してクラス分け、優先度付け、共有化、制限など、さまざまなトラフィック制御が可能になります。iproute2には、トラフィック制御関連の設定を行うtcコマンド、ネットワークインターフェイスの設定を行うipコマンドなどが用意されています。
【主なipコマンドの使用例】
$ ip link list $ ip address show $ ip route show $ ip neigh show
iptablesのmangleテーブルとiproute2のip、tcコマンドを駆使することで、さまざまなトラフィック制御を実現できます。
Copyright © ITmedia, Inc. All Rights Reserved.