netfilterのconntrack_maxとip_local_port_rangeの関係

いろいろ追い続けてきたnetfilterですが、Linux NAT Boxとしての物理的な限界値であるOSの使用できるポートの上限数にたどり着きました。

メモリをガン積みしていくらconntrack_maxの上限を増やしたところで、ip masquaradeに使うポートがなければ頭打ちです。

これについてはnetstat-natコマンドが見やすいです。
あれやこれやワンライナーでつなげて見ると、ASSUREDの状態のconntrackでも一つのポートをシェアしてる様子が伺えます。
これは手元のクライントマシンでnetfilterをロードして抽出した結果です。

tcp   192.168.2.111:62258               xx.xxx.xx.xxx:www             TIME_WAIT
tcp   192.168.2.111:62258               xx.xxx.xx.xxx:www             TIME_WAIT
tcp   192.168.2.111:62258               xx.xxx.xx.xxx:www             TIME_WAIT

つまりconntrack_countがローカルポートの使用数というわけではないことがわかります。

こんな感じでリアルで使っているポートをユニークで洗い出すと使用しているポートの数が分かります。

 sudo netstat-nat | awk '{print $2}' | cut -d ":" -f2 | sort -n | uniq | wc -l
25

いくらip_local_port_rangeを増やしたところでnetfilterのメモリ使用容量から逆算すると、せいぜい16Gもつんでいれば十分なようですね。
FWやsuricata等で鬼のようなトラッキングをしたいという時は別でしょうけど、GWだけでつかっている場合には16Gで十分おつりがきます。

FWアプライアンスがメモリをいっぱい積んでる理由も納得できますね。

コメントを残す

メールアドレスが公開されることはありません。


*