質問: naptでのポート番号変換について 掲題の件について質問させて下さい。 naptでのポート番号変換を、現実的にはどう整合性をつけているのかが分かりません。 napt側で付与されるlan内の端末ごとに振っているポート番号が、実際に通信で使用されるべきポート番号と異なる点について、それで通信可能であるのか、可能であるならどうやって通信を確立しているのか、と言う点に疑問を憶えています。 例えば、lan内において、接続しているpcがaとbの2台あり、プライベートipをそれぞれ持っていたとして、https通信で外部の同一のウェブサーバーに接続したとします。 naptが機能していると、サーバーからは同じipアドレスだが、ポート番号が異なるリクエストが2つ来たと言う形で応答しますよね。 その場合、本来lan内のpcからはaとbの両方、443番(https)のポート番号で接続しに行き、443番での返信を待つことなると思うのですが、naptが機能していれば、aとbの両方が、送信元の使用ポートは、サーバー側から見ればポート番号443を使用していない状態になると思うのです。 そうした時、サーバーからpcに向けたhttps通信はhttps通信でありながら、送信元ポート番号(サーバーがpcに対して返信をすべきポート番号)は443を使用していないことになります。 インターネット通信においては、送信者受信者ともに同じポート番号を使用する、また、通信においては、その通信の種別ごとに使用するポートについて、指定のもの(https通信であれば443)を使用するという前提で憶えていたのですが、こうした受領側のポート番号は通信の与件には必須ではないのでしょうか。 簡単に例を書くと、pcのaとb、naptをするlanの外向けグローバルipを次のように規定した時: pca:192.168.1.2(napt変換時はポート番号100を付与) pcb:192.168.1.3(napt変換時はポート番号200を付与) グローバルip:32.32.32.32 サーバーip:64.64.64.64 pcaからウェブサーバーに対してhttpsで接続: 192.168.1.2:443→32.32.32.32:100にして、64.64.64.64:443向けに発信 pcbからウェブサーバーに対してhttpsで接続: 192.168.1.3:443→32.32.32.32:200にして、64.64.64.64:443向けに発信 になると、そのリクエストに対するサーバーからの返信は、https通信なのにも関わらず、 443宛てではなく、100、200宛ての通信を返信することになるということです。 こういう通信が許されているのか、あるいは別の方法で回避しているのかが分かりません。 サーバー側は通信を受領する時、「この通信はnapt変換されていて、本当は443からの発信であるから、443を想定したhttps通信にして100、200のポート向けに返信しよう」と言うような具合で解釈してくれているのでしょうか。 また、サーバーから通信を受領する側のpcのaとbは、https通信を受領するので、こちらも443ポートを開けて待ち構えていないといけないと思うのですが、この443のポート番号指定はサーバー側は意識することなく、napt側がサーバーからの送信を受領し、lan向けに通信を変換する時に勝手につけているものなのでしょうか。 ややこしい話なのですが、一部分でも教えて頂ける方がいらっしゃいましたら、ご教示お願いいたします。
回答: naptは、ソースアドレスをwan側のipの書き換えて、ソースポート番号をnapt装置が管理するポート番号に書き換える仕事です。もちろん、napt装置が管理するポート番号をどこのソースアドレスのノードにマップしたのかは記録し、戻り通信はその反対を行います。 lan側から下記のパケットが来たとします。src-port=2000はsrc-ip=aの機器が決めたもの、src-port=3000はsrc-ip=bの機器が決めたものです。aとbで調停しないのでsrc-portは同じになってしまうこともありえます。 1src-ip=a、dst-ip=z、src-port=2000、dst-port=443 2src-ip=b、dst-ip=z、src-port=3000、dst-port=443 natデバイスを通過すると各パケットは以下になります。yはnatデバイスのwan側ip。src-portはnatデバイスが管理するポート番号に変わります。 1src-ip=y、dst-ip=z、src-port=5000、dst-port=443 2src-ip=y、dst-ip=z、src-port=5001、dst-port=443 natデバイスは、自分が割り当てたsrc-portと、元src-ipの対応テーブルを内部に持ちます。 1、2の通信の戻りは以下になります。 1src-ip=z、dst-ip=y、src-port=443、dst-port=5000 2src-ip=z、dst-ip=y、src-port=443、dst-port=5001 natデバイスは「自分が割り当てたsrc-portと、元src-ipの対応」を覚えているので、そのルールで変換します。 1src-ip=z、dst-ip=a、src-port=443、dst-port=5000 2src-ip=z、dst-ip=b、src-port=443、dst-port=5001 naptを使うとsrc-port番号プールはlan側の全ノードでシェアされますので、えらい勢いで浪費され、サイクリックに使用されます。勢いは新規セション数だとかlan側ノード数に相関性を示します。 transix(ds-lite)なんかですとvne側でnaptをします。複数顧客でグローバルv4アドレスをシェアすると、とんでもないことになりそうです。