12.2. route クラス選別器

このクラス選別器は、経路テーブルの結果に基づいてフィルタ動作をします。 パケットがクラス間を遷移して "route" フィルタでマークされたクラスに到達すると、 このフィルタは経路テーブルの情報に基づいてパケットを振り分けます。

# tc filter add dev eth1 parent 1:0 protocol ip prio 100 route

ここでは route クラス選別器を親ノード 1:0 に priority 100 で追加しています。 パケットがこのノードに到達すると (ここでは root なのですぐに到達します)、 この選別器は経路テーブルを見ます。 マッチしたらこのパケットは指定されたクラスに送られ、 priority 100 が与えられます。 続いて、これを動作させるために、 適切なルーティングエントリを追加します。

ここでは、送信先または発信元によって 'realm' を定義します。 やり方は、例えば次のようになります。

# ip route add Host/Network via Gateway dev Device realm RealmNumber

例えば、送信先のネットワークが 192.168.10.0 の場合に realm 番号 10 を与えるには次のようにします:

# ip route add 192.168.10.0/24 via 192.168.10.1 dev eth1 realm 10

route フィルタを追加する際には、 ネットワークやホストを意味する realm 番号が利用でき、 これによって経路をフィルタにどのようにマッチさせるかを指定できます。

# tc filter add dev eth1 parent 1:0 protocol ip prio 100 \
  route to 10 classid 1:10

このルールは、ネットワーク 192.168.10.0 に向かうパケットにマッチし、 id が 1:10 のクラスに送ります。

route フィルタは経路の発信元を用いてもマッチできます。 例えば Linux ルータの eth2 にサブネットワークが接続されているとします。

# ip route add 192.168.2.0/24 dev eth2 realm 2
# tc filter add dev eth1 parent 1:0 protocol ip prio 100 \
  route from 2 classid 1:2

このフィルタでは 192.168.2.0 サブネットワークから来た (realm 2) パケットにマッチし、id が 1:2 のクラスに送ります。