以下に例を示します。Neufbox4(フランスのISPが提供するルーター)など、一部のルーターはLinuxを実行しています。これらのルーターでは、プログラム "iptables"を使用してNATの動作を構成します(iptablesは、Linuxネットワーキング用のスイス軍のナイフです)。
LANアドレス192.168.0.2でリッスンしているルーターの背後にWebサーバー(ポートTCP 80)があり、そのポートマッピング(リダイレクト)を追加するとします。これは、iptablesの用語では次のようなものに変換されます。
iptables -t nat -A PREROUTING -i wan -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2
これは、「TCPポート80に向けられたWANインターフェイスを介して着信するすべてのパケットについて、192.168.0.2に送信する」ことを意味します。まさにあなたが望むものです。すべては順調です...今のところ。
ルーターのWANインターフェイスに関連付けられているIPアドレスは、パブリックインターネットアドレスであることを理解する必要があります。たとえば、インターネットIPが1.2.3.4の場合、ルーターの「wan」インターフェイスのIPアドレスは1.2.3.4です。
ここで、LANからWebサーバーにアクセスしようとしているとします。たとえば、自分のインターネットアドレスを使用して、アドレス192.168.0.3のパーソナルコンピューターからアクセスします。たとえば、ブラウザで「http://1.2.3.4/」と入力します。
起こることは、コンピューターがLAN上のTCPポート80の1.2.3.4に向けられたパケットを送信することです。ルーターはこのパケットを受信します。ただし、192.168.0.2にはリダイレクトされません。どうして?上記のiptablesルールは、LANからではなく、WANインターフェイスに着信するパケットのみを処理するためです!
それでは、どうなりますか?まあ、それはルーター上の他のネットワークルールに依存します。通常、次の2つのいずれかが発生します。
どちらのルーターも、自分宛てのパケットを確認します(1.2.3.4はルーターのIPアドレスの1つであるため、これは完全に正常です)。ほとんどのルーターには、管理インターフェイスをポート80でリッスンするWebサーバーがあります。したがって、このWebサーバーはLAN上のWebサーバーではなくパケットを処理し、Webサイトの代わりに管理インターフェイスを取得します。
または、LANポート上のWANアドレスに向けられたパケットを処理する方法がわからないため、ルーターは何らかの理由でパケットをドロップします。
技術的には、ソリューションは非常にシンプルで、次の形式のiptablesルールで構成されています。
iptables -t nat -A PREROUTING -i lan -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2
これは、「TCPポート80に向けられたLANインターフェイス経由で着信するすべてのパケット、および宛先アドレスが1.2.3.4で、192.168.0.2に送信する」ことを意味します。これが「NATループバック」と呼ばれるものです。
ただし、ほとんどのルーターメーカーは明らかにこの問題を認識していないため、このルール(またはルーター独自のシステムに相当するもの)を製品に入れていません...