2006年05月02日

パケットの,iptables の旅路を観察するときの注意点

はてなブックマークに登録

前回の記事に関連して,IPsec を通るパケットの振る舞いを観察しようと,各テーブルのデフォルトチェインの先頭に,ログ出力するルールを組み込んでパケットを流していました.このようなものです.

iptables -t mangle -I POSTROUTING 1 -j LOG --log-prefix "/man POS/ "
iptables -t mangle -I PREROUTING 1 -j LOG --log-prefix "/man PRE/ "
iptables -t mangle -I FORWARD 1 -j LOG --log-prefix "/man FOR/ "
iptables -t mangle -I OUTPUT 1 -j LOG --log-prefix "/man OUT/ "
iptables -t mangle -I INPUT 1 -j LOG --log-prefix "/man INP/ "
iptables -t nat -I POSTROUTING 1 -j LOG --log-prefix "/nat POS/ "
iptables -t nat -I PREROUTING 1 -j LOG --log-prefix "/nat PRE/ "
iptables -t nat -I OUTPUT 1 -j LOG --log-prefix "/nat OUT/ "
iptables -t filter -I OUTPUT 1 -j LOG --log-prefix "/flt OUT/ "
iptables -t filter -I FORWARD 1 -j LOG --log-prefix "/flt FOR/ "
iptables -t filter -I INPUT 1 -j LOG --log-prefix "/flt INP/ "

これで,注意深くパケットを流してやれば,パケットの流れが一目瞭然になるはずでした.けれども,観察していると時々 nat テーブルを通っているはずなのに,そのログが出ないことがあることに気づきました.不思議に思いつつ,いろいろな種類のパケットを流していたのですが,何度かやって,その理由に気づきました.

NAT する場合,各 end point も,その方向も,種類も同じである場合,一度対象となるパケットとその仕方が決まってしまえば,後続のパケットに関しては都度テーブルを探索することなく NAT を適用して良いわけです.そのため,一番最初のパケットに関してはログが出力されるのですが,それ以後はログが出てこないのでした.どういう基準で"後続のパケット"と判断しているかは,確認はしていませんが,多分 conntrack (日本語)で同じ一つのコネクションと判断されるパケットがそれに当たるのだと思います.
ということで,毎度完全にパケットの旅路を観察したいのであれば,一度完全に iptables をリセットする = 関連するモジュールをアンロードする必要があります.

klab_gijutsu2 at 18:31│Comments(0)TrackBack(0)

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント