iptablesによる負荷分散とDoS対策:習うより慣れろ! iptablesテンプレート集(3)(1/4 ページ)
iptablesを応用すれば、簡易負荷分散システムを構築できる。さらに、DoS対策やQoSの実現方法を紹介する。(編集部)
第1回ではfilter、第2回ではnatテーブルを主に使用したiptablesのテンプレートを紹介しました。今回は、mangleテーブルを利用したテンプレートや以前紹介したテンプレートを応用した負荷分散方法、DoS対策を紹介します。
mangleテーブルによるQoS
mangleは、特別なパケット変換に使われるテーブルです。mangleテーブルを用いることで、IPv4パケットのIPヘッダ中で定義されているTOS(Type Of Service)フィールドの値を書き換えることができます。TOSフィールドはパケット処理の優先度付けに利用され、通信品質を制御するQoS(Quality of Service)を可能にします。
ただし、iptables自身にTOSフィールドの値で通信帯域幅をコントロールしたり、パケットの遅延を制御したりする機能はありません。そうした要求を満たすには、iproute2(コラム参照)を導入し、iproute2に含まれるipコマンドやtcコマンドを使用する必要があります(注)。
簡単な仕組みに見えるQoSですが、通信経路上のすべてのルータがQoSを解する必要があります。1つでもTOSフィールドの扱いが不完全なルータが存在すると、動作に異常が生じる場合があります。そのため、インターネットへと出ていくパケットに対してTOSフィールドを設定する機会はまれです。また、TOSフィールドそのものが、現状ではDSCP(Differentiated Services Code Point)として見直されたり、ECN(Explicit Congestion Notification)に流用されるなど、あまり使われるケースがないのが現状です。mangleテーブルを使用したサンプルをあまり見かけないのはこのためです。
mangleテーブルで書き換えが可能な値には、主に次のものがあります。
- TOS
TOSフィールドの値を新たに設定/変更できる。値はTOS名または数値(10進または16進数)。
例:
--set-tos TOS名または数値
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- DSCP
TOSフィールドは、新たにDS(Differentiated Services:DiffServ)フィールドとして再定義されている。このDSフィールドに、DiffServ対応のルータなどが行う優先度制御動作を決めるための値を設定する。
例:
--set-dscp DSCPの数値(10進または16進数) --set-dscp-class DiffServクラス(BE、EF、AFxx、CSx)
- ECN
ECNビット(輻輳通知機能に使われるECEやCWRフラグ)を削除できる。
例:
--ecn-tcp-remove
- MARK
パケットに特別なマークを付ける。ただし、マークが維持されるのはパケットがカーネルの中で処理されている間のみ。通常はiproute2と組み合わせて、マークが付いているパケットのルーティングを切り替えたり、帯域制限やClass Based Queuingに使用する。マーク値によってどのように処理するかは、ip/tcコマンドとの連携操作による。
例:
--set-mark mark マーク値(符号なしの整数:32bitシステムでは4294967296通り)
コラム iproute2
カーネルコンパイル時にオプションを有効にしていれば、iproute2を利用してクラス分け、優先度付け、共有化、制限など、さまざまなトラフィック制御が可能になります。iproute2には、トラフィック制御関連の設定を行うtcコマンド、ネットワークインターフェイスの設定を行うipコマンドなどが用意されています。ipコマンドは、以下のようにifconfigコマンドやrouteコマンドの代わりに使用できます。
$ ip link list $ ip address show $ ip route show $ ip neigh show
iptablesのmangleテーブルとiproute2のip、tcコマンドを駆使することでさまざまなトラフィック制御を実現することができますが、その話はいつかまた別の機会に。
Copyright © ITmedia, Inc. All Rights Reserved.