C/C++とはほんの少し(気持ち程度)、質問がズレいているのは承知のうえです。
でも、ルータそのもの小さいコンピュータだし、インターネットの知識も使用言語に関係なくに必要と思うので、投稿する場所は間違えてないつもりです。
さて、外部からNAT(NAPT)ルータを超えてホストと通信するには、手段の一つとしてUPnPが使えるというのがわかります。
調べてみましたが、NAT(NAPT)ルータに当てられたパケットはあて先ポート番号をもとにホスト先を特定するようですが、
どうしてUPnPなのか?また、実際にUPnPがどのような働きによってルータが正確にパケットを中継できるようになるのか教えて下さい。
[ルータ]NAT(NAPT)超えの問題点について
Re: [ルータ]NAT(NAPT)超えの問題点について
ルーターは外部からの接続を内部のIPアドレスに転送するために、
NATテーブルにポートとIPアドレスの対応関係を記憶しています。
通常、ルーター内部から外部に接続する場合はルータ側が自動的にNATテーブルへの登録をするため、
何も操作しなくても外部から返ってきたパケットを内部に転送してくれます。
しかし、外部からルータ内部に接続する場合NATテーブルへの登録を内部から手動で行う必要があります。
UPnPはこのNATテーブルへの登録をアプリケーションから自動的に行うことができる規格の一つです。
この規格に対応しているルーターであれば、ユーザー側の操作なしにポート開放を行うことができます。
自動的に外部からの接続を受け入れてしまう危険性があるため、最近はOFFになっているルータも多いようです。
似たような規格にNAT-PMPというものもあります。
NATテーブルにポートとIPアドレスの対応関係を記憶しています。
通常、ルーター内部から外部に接続する場合はルータ側が自動的にNATテーブルへの登録をするため、
何も操作しなくても外部から返ってきたパケットを内部に転送してくれます。
しかし、外部からルータ内部に接続する場合NATテーブルへの登録を内部から手動で行う必要があります。
UPnPはこのNATテーブルへの登録をアプリケーションから自動的に行うことができる規格の一つです。
この規格に対応しているルーターであれば、ユーザー側の操作なしにポート開放を行うことができます。
自動的に外部からの接続を受け入れてしまう危険性があるため、最近はOFFになっているルータも多いようです。
似たような規格にNAT-PMPというものもあります。
-
ただの屍のようだ
Re: [ルータ]NAT(NAPT)超えの問題点について
こればかりは質問文がわるかったと言わざるをえませんね。
以下の二点についてUPnPの働きを含めた上で説明してほしかったです。
1.NAPTはIPヘッダ内のプライベートアドレスを変えて、送り出す。
受け取ったアプリケーション側はヘッダを破棄し、送信元のプライベートアドレス(NAPTで書き換えられていない)をあて先として送ると相手に届きません。
2.外部から通信しようと、あて先として相手のグローバルアドレス(実質NAPTルータ)に送った場合、NATテーブルへの登録はどのタイミングでどのように作り出されますか。
以下の二点についてUPnPの働きを含めた上で説明してほしかったです。
1.NAPTはIPヘッダ内のプライベートアドレスを変えて、送り出す。
受け取ったアプリケーション側はヘッダを破棄し、送信元のプライベートアドレス(NAPTで書き換えられていない)をあて先として送ると相手に届きません。
2.外部から通信しようと、あて先として相手のグローバルアドレス(実質NAPTルータ)に送った場合、NATテーブルへの登録はどのタイミングでどのように作り出されますか。