1. ホーム
  2. django

[解決済み] http://127.0.0.1:8000/ には接続できるのに、http://192.168.1.6/ には接続できないのはなぜですか?

2022-03-05 12:38:32

質問

OS X Mountain Lion をローカル IP アドレス 192.168.1.6 (Network utility と ifconfig の両方によって報告された) のマシンで動かしていて、ポート 8000 でローカル (Django) 開発ウェブサーバを動かしています。

ホストOS(192.168.1.6のマシンのメタル上で動作するOS X)では、127.0.0.1:8000; または localhost:8000; にナビゲートすれば、ブラウザを通して私のテストWebサーバーに接続できますが、マシンのローカルIPアドレスを使用すると、そうはなりません。 これが余計に混乱させる原因になっています。

  • ルーターはポートをフィルタリングしていません。念のため、ポート8000と22を192.168.1.6に明示的に転送するよう設定しています。
  • SSHサービスを起動すると、(コマンドラインから)ssh 192.168.1.6 で接続できます。
  • ブラウザの問題ではありません。というのも、192.168.1.6のポート8000にtelnetできない(接続が拒否される)間 できる 127.0.0.1ポート8000にtelnetし、192.168.1.6ポート22にもtelnetすることができます。
  • ファイアウォールはオフに設定されていますが(システム環境設定で報告されています)、念のため、ipfwルールも設定して、すべてを通過できるようにしました。

以下はipfwのルールです。

00100 allow tcp from any to any dst-port 8000
65535 allow ip from any to any

以下は、このポートが実際に私のテストサーバーによってリッスンされていることの追加確認です。

netstat -an | grep 8000
tcp4       0      0  127.0.0.1.8000         *.*                    LISTEN 

どうなっているのでしょうか? どういうわけか、ポート22はポート8000とは異なる扱いを受けているのですが、その違いを探すために思いつくあらゆる場所が見つかりません。 なぜ、このマシンのポート8000にローカルのIPアドレスで入れないのでしょうか?

解決方法は?

Django開発サーバを起動する際に、明示的にアドレスを指定する必要があります。

python manage.py runserver 192.168.1.6:8000

あるいは、サーバーをすべてのインターフェイスで動作させたい場合、使用できます。

python manage.py runserver 0.0.0.0:8000

それ以外の場合、Django 開発サーバはデフォルトでローカルインタフェースのみで動作します。