web-dev-qa-db-ja.com

http://127.0.0.1:8000/に接続できるのにhttp://192.168.1.6/に接続できないのはなぜですか

ローカルIPアドレス192.168.1.6(ネットワークユーティリティとifconfigの両方から報告)のマシンでOS X Mountain Lionを実行しており、接続したいポート8000​​でローカル(Django)開発Webサーバーを実行しています同じマシンでゲストOSを実行している仮想マシンから。

ホストOS(つまり、アドレスが192.168.1.6のマシンのメタルで実行されているOS X)で、127.0.0.1:8000に移動することにより、ブラウザーを介してテストWebサーバーに接続できます。またはlocalhost:8000;ただし、マシンのローカルIPアドレスを使用する場合は除きます。これがさらに混乱する理由は次のとおりです。

  • ルータはポートをフィルタリングしていません。そして、念のため、ポート8000​​と22を明示的に192.168.1.6に転送するように設定しました。ポート22と言えば、
  • SSHサービスを開始すると、ssh 192.168.1.6を介して(コマンドラインから)接続できます
  • これはブラウザの問題ではありません。192.168.1.6ポート8000​​にtelnetできないので(接続が拒否されました)、私はcan telnetに127.0.0.1ポート8000​​にtelnetでき、192.168.1.6にもtelnetできます。ポート22
  • ファイアウォールは(システム環境設定で報告されているように)オフに設定されていますが、安全性を高めるために、すべてが通過できるように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​​とは異なる方法で処理されていますが、それらの違いを探すために考えられるすべての場所で、私は見つけることができません。ローカルIPアドレスを使用してこのマシンのポート8000​​にアクセスできないのはなぜですか?

11
shanusmagnus

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

python manage.py runserver 192.168.1.6:8000

または、サーバーをすべてのインターフェースで実行したい場合は、以下を使用できます。

python manage.py runserver 0.0.0.0:8000

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

23
Ludwik Trammer