萌えハッカーニュースリーダー

2025/06/18 05:40 Grokking NAT and packet mangling in Linux

出典: https://vivekn.dev/blog/grokking-nat-and-packet-mangling-in-linux
hakase
博士

やあ、ロボ子!今日はNAT(Network Address Translation)について話すのじゃ。

roboko
ロボ子

NATですか、博士。IPv4アドレスの枯渇を緩和するために生まれた技術ですよね。

hakase
博士

そうそう!IPv4アドレスは32ビットで約43億個しかないからの。データセンターとか企業だと、すぐ足りなくなっちゃうのじゃ。

roboko
ロボ子

IPv6があるのに、なぜNATがこんなに普及しているんでしょう?

hakase
博士

IPv6はアドレス空間はほぼ無限だけど、ISPとかハードウェア、ソフトウェアの対応が大変なのじゃ。移行に手間がかかるからの。

roboko
ロボ子

なるほど。NATは、ルーターがプライベートIPアドレスとグローバルIPアドレスを変換する技術ですよね。

hakase
博士

その通り!ルーターがIPアドレスとポートのマッピングテーブルを持っていて、パケットヘッダーを書き換えて転送するのじゃ。

roboko
ロボ子

NATは1994年にRFC 1631で提案されたんですね。一時的な解決策だったのに、こんなに長く使われるとは。

hakase
博士

そうなんじゃ。Basic NAT、PAT、Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT、Symmetric NAT… いろいろ種類があるのじゃ。

roboko
ロボ子

PAT (Port Address Translation) は、複数のデバイスが単一のパブリックIPアドレスを共有するんですよね。

hakase
博士

そう!ポート番号を変えることで、それを実現しているのじゃ。Symmetric NATは一番制限が厳しくて、WebRTCでTURNサーバーが必要になることもあるのじゃ。

roboko
ロボ子

OpenWrtなどのルーターOSでは、`nftables`モジュールを使ってNATを実装しているんですね。

hakase
博士

`nf_nat_mangle_udp_packet`とか`nf_nat_mangle_tcp_packet`関数でパケットを操作するのじゃ。チェックサムの再計算も忘れずに!

roboko
ロボ子

DockerもNATを利用しているんですね。`docker run -p 8080:80 nginx`コマンドは、`iptables`ルールを使ってホストのポートをコンテナに転送するんですね。

hakase
博士

そう!でもNATには制限もあるのじゃ。エンドツーエンドの接続を阻害したり、暗号化を難しくしたり、ピアツーピアアプリケーションを複雑にしたり…。

roboko
ロボ子

IPv6が普及すれば、これらの問題も解決されるんでしょうね。

hakase
博士

そうなるはずなのじゃ!でも、まだ時間がかかりそうじゃな。IPv6頑張って!

roboko
ロボ子

NATはアドレスを変換するときにパケットヘッダーを変更するので、暗号化を困難にするんですね。セキュリティエンジニアとしては、ちょっと困ります。

hakase
博士

まあ、NATはアドレス不足をしのぐための、いわば「間に合わせ」の技術だったからの。そろそろ卒業したいところじゃな。

roboko
ロボ子

そうですね。博士、今日はNATについて色々と教えていただき、ありがとうございました。

hakase
博士

どういたしまして。最後に一つ、NATって「何とかしてアドレスを節約する」技術じゃけど、まるで私がおやつを隠して食べるみたいじゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search