ポート転送って DNAT ですよね.よく考えてみると.
Edgerouter でこのところ遊んでてふと思ったんですが,家庭用のルータなんかで一般的に称される(俗称としてのものも含めて)
- ポート転送
- ポートフォワーディング
- 穴あけ
って,よくよく考えてみると,DNAT(Destination NAT) だと思います.
DNAT って何なのかは,
あたりを見れば分かる通り,パケットの送り先のアドレスを書き換えることです.つまり,インターネット側からルーターに届いたパケットのアドレスを,ローカルに設置してあるサーバーに書き換える(転送する)動作のこと.これ,そのまんま「ポート転送」です.
ただし,DNAT って,普通これ単体では使われません.SNAT とセットで使われます.
何でかと言うと,サーバーにパケットが届くと,普通,サーバーはパケットの送信元に何か返信をします.このパケットがそのまま相手方に届くと,送信元は,ルーターのアドレスに対してパケットを送ったのに,なぜか,違うローカルのアドレスを持ったサーバーからの返信を受け取ることになり,結果的に,不審なパケットとしてこれを廃棄してしまいます.だから,ルーターを通るときには,送信元アドレスをルーターのアドレスに書き換えて送らないといけません.この書き換えは送信元を書き換えるので SNAT(Source NAT) と呼ばれる訳です.
と言うことは,ポート転送って,DNAT + SNAT の組み合わせだろ……ってことになりそうなんですが,家庭用のルーターの場合,NAPT
で,ローカルの(任意の)端末のアドレスをルーターのアドレスに書き換えて送るよう設定されているのが普通です.だから,わざわざ SNAT を設定しなくてもきちんとローカルに設置されているサーバーの返信パケットの送信元もルーターのアドレスに書換えられてしまいます(そもそも NAPT って,SNAT の拡張ですし).
だから,「ポート転送の設定 = DNAT の設定」と考えて良いことになる訳ですね.
家庭用ルーターの中を見た訳じゃないので,ホントにこう設定されてるかどうかは分かりませんが,仕組み的にはこれで良いはずです.
まぁ,代理応答(Proxy ARP のことではない.たしか stone はこういう動作をするんだったと思う)で,同様の動作を実現しているものがあるのかもしれないので,絶対とは言い切れませんけどね.なお,stone については,
をご参照ください.
以上!