iptablesのnatテーブルとはなんぞや

やっとiptablesのnatテーブルがわかった。
いままで、名前の通り、nat的なことをしているんだろうってことはわかっていたし、 書かれている内容もsnatなら送信元アドレスの書き換えかとか、単語から意味を理解してた。 google先生に聞いて、真似すれば書けるし、読みもできる。ただ、漠然としていた。
言うなれば、英単語を知っているから、英文法を知らなくても、英語の文章が何となく理解できる感じ。

それが以下の記事の一言をみて、すっと腑に落ちた。

「NATとはパケット中のIPアドレスを書き換える技術です」
習うより慣れろ! iptablesテンプレート集(2):natテーブルを利用したLinuxルータの作成 (1/6) - @IT
当たり前やろって思われる方もいるかもしれないけれど、この一言でなんか納得がいった。
送信元のアドレスや送信先アドレス、はたまた送信先ポートとか、なんか通信をいじろうと思ったら、NATテーブルに書けばいいのかと。

-j のターゲットオプションのところで、送信元アドレスを書き換えたければSNATを指定、送信先ならDNAT、送信元ポートなら--sportという風に指定してあげればよい。

アドレスとポートの両方同時も以下のように書けばいけそう。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:8080

POSTROUTINGとかPREROUTINGとかの-Aオプションは理解にちょっと癖があるけど、L3スイッチのACLとかと同じ感じかな。
iptablesを一つのスイッチとみなして、通り抜ける前ならPREROUTING。通り抜けた後ならPOSTROUTINGだし、ホストから自発的に発生した通信がOUTPUTかな。

そのほか、iptablesへの書き方とは、以下のサイトがわかりやすかったと思うので、メモ!

ゼロから始めるLinuxセキュリティ(4):Linuxで作るファイアウォール[NAT設定編] (1/2) - @IT