自宅で常時稼動のWebサーバを運用する場合、一般的にルータとの接続は次のようになると思います。
ここでルータはBUFFALO等のいわゆるブロードバンドルータで、ブラウザから192.168.11.1にアクセスすることで管理画面を開けるものとします。
このときLAN内のPC1から、ルータのWAN側のIPアドレスの220.x.x.xに対してブラウザでアクセスした際に、192.168.11.1と同じようにルータの管理画面が開くものと、PC2のWebサーバにアクセスできるものがあります。後者のPC2にルーティングされる機能を、通称「ヘアピンNAT」と言います。
ヘアピンNATがなくても、LAN内のIPアドレス192.168.11.3を指定すれば、PC1からWebサーバにアクセスすることは可能です。
しかしここで、PC2のWebサーバで名前ベースのバーチャルホストを使おうとすると、ヘアピンNATのないルータでは問題が発生します。
バーチャルホストへのアクセスはIPアドレスだけでなくホスト名も重要なので、IPアドレス直接指定ではアクセスすることができません。ホスト名を指定してアクセスしても、ヘアピンNATが無い場合はルータの管理画面が開いてしまってPC2にアクセスすることができません。
先日、私は最近BUFFALOのWZR-HP-G300NHを購入したのですが、この製品にはヘアピンNAT機能が無かったので、バーチャルホストで運用しているWebサーバにLAN内からアクセスすることができなくなってしまいました。以前使っていたルータには付いていた機能で当たり前のように思っていたので、いざ無くなってしまうととても不便に感じます。
対処法としては、次のような方法があります。
- 外部のプロキシサーバを経由してWAN側からアクセスする
- hostsファイルを編集してバーチャルホスト名を192.168.11.3にルーティングする
私は後者のhostsファイルを使って解決しました。
他にもWebサーバのポートを80以外にする方法もありそうですが、WZR-HP-G300NHではポートを変えてもアクセスすることはできませんでした。