web-dev-qa-db-ja.com

Linux-デフォルトルートのヒットを見つける

これと同様の質問のようなもの-- ルーティングテーブルヒット? -iptablesを使用せず、カーネルルーティングテーブルで通常のルーティングヒットを探すことを除いて。

しかし、私のユースケースは、ファイアウォールのデフォルトルートを介して転送されているパケットの数を見つけて、削除する前にそれが役に立たないことを確認することです。上記の質問への回答にはキャッシュの検査が含まれますが、一部のパケットがキャッシュに到達せずに転送される可能性はありますか?

さらに、キャッシュを検査した後、推奨されるコマンド(route -neeC)終了したばかりで、デフォルトルートの「ルックアップヒット」を長期間(約24時間)検査したいと思います。それを行う方法に関する推奨事項はありますか?

乾杯。

2
FitzChivalry

IPv4のLinuxルーティングキャッシュは Linux 3.6 で削除されました(最適化された LPC-trie の使用のみを残します)。したがって、2012年以降のOSを搭載したLinuxシステムでは、ルーティングキャッシュ統計を取得する方法はありません。


デフォルトルートの使用法をタグにする簡単な方法は、このルートにレルム値を配置することです。 (同じゲートウェイを使用するより具体的なルートではなく)このルートに一致するパケットは、指定されたレルム値を持つものとして識別されます。したがって、デフォルトルートがeth0経由で192.0.2.1の場合、ルートは次のように設定されます。

ip route add default via 192.0.2.1 proto static realm 10

または、中断することなく、addchangeに置き換えることで、以前のデフォルトルート(レルムなし)を変更できます。

このレルムタグは、少なくとも他の2つのネットワークサブシステムで再利用できます: tc filter ... route またはnftables ' nft ... meta rtclassid


交通管制

tcは非常に粗雑で、通常はインターフェイスレベルで機能します。フィルタをアタッチする最も簡単な方法は、 prio qdisc、最も単純なクラスフルqdiscを使用することです。その特定の優先度プロパティは実際には使用されません。したがって、前の例に続いて:

tc qdisc add dev eth0 root handle 1: prio

次に、空のアクション(およびpref順序とcontinueコントロールを使用してフィルターを追加し、必要に応じて同様のフィルターを追加できるようにします) 、統計を取得するためだけに:

tc filter add dev eth0 parent 1: protocol ip pref 1 route to 10 action continue

これで、ルートレルム10に一致するすべてのIPパケットが、tc -s filter show dev eth0を使用して統計に表示されます。例:

# tc -s filter show dev eth0
filter parent 1: protocol all pref 1 route chain 0 
filter parent 1: protocol all pref 1 route chain 0 fh 0xffff000a to 10 
    action order 1: gact action continue
     random type none pass val 0
     index 1 ref 1 bind 1 installed 48 sec used 4 sec
    Action statistics:
    Sent 12230 bytes 79 pkt (dropped 0, overlimits 0 requeues 0) 
    backlog 0b 0p requeues 0

注:転送されたローカルで発信されたパケットの両方が一致しているため、測定で問題が発生する可能性があります。


nftables

nftablesは、あらゆる種類のファイアウォールを実行するために使用されるのではなく、いくつかのカウンターをインクリメントするために使用されます。

nftablesは、使用可能なすべてではなく、要求されたnetfilterのフックのみをインストールするため、通常、iptablesよりもフットプリントが小さくなります。ここでは、レルムに一致するルール(rtclassid式の役割)とそのカウンターが必要です。ローカルで発信されたパケットの場合は、outputフックを使用します。転送フックは、転送されたパケットのみに一致します。

nft add table ip mystats
nft add chain ip mystats forward '{ type filter hook forward priority 0; policy accept; }'
nft add rule ip mystats forward meta rtclassid 10 counter

これは、たとえば後で与えます:

# nft list ruleset
table ip stats {
    chain forward {
        type filter hook forward priority filter; policy accept;
        meta rtclassid 10 counter packets 1453 bytes 118264
    }
}

値をゼロにすることは、名前付きオブジェクトに格納する場合にのみ可能です。代わりに、ルールセットは次のようになります(nft -f fileでロードする場合)。

table ip mystats {
    counter defaultroutecount { }

    chain forward {
        type filter hook forward priority filter; policy accept;
        meta rtclassid 10 counter name "defaultroutecount"
    }
}

次に、nft list countersまたはnft reset countersはその内容を表示(または表示およびリセット)します。

3
A.B

次を使用できます。

iptables -vL

または転送用:

iptables -t nat -vL

一致するルールごとのパケット数を確認します。

1
Zatarra