通信プログラムとは何か?パケットとは何か?ということを勉強するために
「ルーター自作でわかるパケットの流れ(技術評論社)」という本を読みました。
本を読むことでルーターの作成の仕方の基礎が分かりました。
本の最後の方で、この知識を発展させてぜひ読者でNATプログラムを作ってみてください
という意味のことが書いてありました。
挑戦してみたくなり、本のプログラムを書き直しつつ拡張してNATを作りました。
SuperSimpleNat_2がそのプログラムです。
SuperSimpleNat_2のイメージ図を以下に示します。
簡単に説明します。
NATとはクライアントとインターネットの間に入ってポートの変換とIPの変換をするものです。
私の環境ではインターネットへの出口にファイアウォルがあります。
ファイアウォルのネットワークアドレスとクライアントのネットワークアドレスは異なります。
NATはNICを2枚刺して異なるネットワークアドレス間のパケットを橋渡しします。
その際にポートの変換とIPの変換が必要になります。
現在GitHubに公開しているSuperSimpleNat_2は
NATマシンにおいてリセットパケットとICMPパケットを抑制する設定をしないとうまく機能しません。
なぜうまくいかないかという原因は調べました。
余計なファイアウォル設定をしないでも動作できるようにすることが今後の課題です。
オープンソース
https://github.com/Ochakko/SuperSimpleNat_2