Flaskで外部pcからアクセスできない

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 4
  • VIEW 136

pinokionokio

score 13

Macbookでプログラムを起動してipadから接続をしていますが、応答時間が長いと怒られます。
イメージ説明

Ipは下のページでMacBookのipを調べてそこにipadでアクセスしています。
MacBookは家のWi-Fi、ipadはsimのデータ通信を使用しているので、同じネットワークがどうのこうのみたいな事も無いはずです。
https://www.cman.jp/network/support/go_access.cgi

idleではアクセス要求の表示は出ていないです。
イメージ説明

ファイアウォールは無効、全ての通信が許可されています。

以上の条件で足りないものは何でしょうか?
よろしくお願いいたします。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    name = "Hello World"
    return name

if __name__ == "__main__":
    app.run(host='0.0.0.0')

因みにhost指定なしでMacBook自身から接続するとhelloworldできます。
が、最終的にはサーバーに置かれたプログラムと通信したいので意味ないですね。

if __name__ == "__main__":
    app.run()

ーーーーーーーーーーーーーーーーーーーー

このような設定を加えてみましたが状況は変わりませんでした。
MacBookのIPv4アドレスは192.168.11.2なのでipも合ってます。
(TCP/UDPの設定は現在「任意のTCPポート」になっています。投稿直前にUDPになっているのに気づいたので画像はそのまま投稿します)
イメージ説明
※BUFFALOのルーター設定です。

ーーーーーーーーーーーーーーーーーーーー
問題特定のために質問を追加します。
自宅ルーターに対して外部からアクセスされたという履歴を見ることは可能ですか?

調べ方が悪いので「ルーター 履歴」と検索してもサイトの観覧履歴を消したいとかそんなページばかり出てきます。

よろしくお願いします。


webブラウザでグローバルIPにアクセスした時のエラーコードは504(time out)でした。
やはりルーターには繋がっているがレスポンスが帰らないということでしょうか。
また詳細ですが、「インターネット接続を確認してください」と出ています。

自宅wifi内からmacbookのプライベートIPへの接続はできます。

自宅ルーターのグローバルIPだと思っているものをIPから住所を調べてみたら大阪の郵便局にヒットしました。(ここは愛知)
日本だと全部ここにヒットするとかそんなのですかね?

現状報告でした。
よろしくお願いします。


ネットワークのイメージを作ってみましたが伝わるでしょうか。
イメージ説明
緑の矢印はアクセス成功
黄色は不明
赤はエラー504が帰ってきます。

ipad⇨ルーターが黄色になっていますが、ipadがどこまで到達できているかを調べられなかったので不明にしました。

図を描きながらhttp://0.0.0.0:5000で公開しているときにスマホ(wifi)から接続を試していないことに気づきましたが、結果はNGでした。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dodox86

    2019/09/01 10:31

    ファイアウォールは無効とのことですが、iPadのデータ通信経由でインターネット側からmacbook上のサーバー、TCPポート5000番に接続しようとするので、ルーターで外からの5000番を開放しないといけないはずですが、それはできていますか。

    キャンセル

  • pinokionokio

    2019/09/03 19:53

    本文追記しました。
    画像にある設定であってますか?

    キャンセル

  • FiroProchainezo

    2019/09/12 11:52

    Webを解放するなら、解放するのはTCPなのでは?
    ネットワーク的な関係がわかりにくいので、図を作成して追加いただけませんか?

    Flaskが起動しているPCはどこにあって、アクセスしようとしているPCはどこにあってといった図です。
    (自宅にあって、は不要です。どのネットワークに所属しているかが知りたいです。)

    キャンセル

  • pinokionokio

    2019/09/12 21:52

    不慣れながらネットワークの図を書いてみました。

    以前のスクショでは”任意のUDPポート"の設定が写っていますが、一度試しにUDPで設定してみたときに直すのを忘れてスクショしたものを投稿していました。
    現在はTCPに設定して色々試しています。
    混乱を招いしてしまって申し訳ないです。

    キャンセル

回答 2

+1

WiFi ということは、インターネット接続にルーター等をお使いと思いますが、ルーターの機能で外部からのアクセスを内部の PC に転送するような設定はされているでしょうか?(ほとんどのルーターは、デフォルトでは外部(インターネット)側から自宅等内部LAN側へのアクセスは無効になっています。)

自宅に設置したサーバを公開する方法 - 3. ポートフォワーディングによる公開 -

自宅に設置したサーバを公開する方法 - 2. 静的NATによる公開 -

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/01 12:57

    ルーターの設定はノータッチでした。
    この状態だとルーターまではアクセスしているけど、さらにどのpcに行けばいいかの設定をルーターにする必要があるということですね?

    ルーターはBUFFALO製です。
    この設定のことであっていますか?
    https://www.buffalo.jp/support/faq/detail/15022.html

    キャンセル

  • 2019/09/01 13:03

    そうですね。

    URL に ポート 5000 を設定して、アクセスするなら ルーターのインターネット側ポート 5000 を MacBook のポート5000に転送するように設定します。

    iPad 側で、( http://1.1.1.1/ のように )ポートを省略した URL で、アクセスしたい場合は、 http なので、 ポート 80 にアクセスするので、 インターネット側のポート80を MacBook 側のポート 5000 に転送するように設定します。

    キャンセル

  • 2019/09/01 16:52

    ルーター設定してみましたがダメでした。(本文追記)

    キャンセル

0

MacBookのIPv4アドレスは192.168.11.2

とありますが、ネットワークのイメージ図には192.168.11.100となっており、自宅内のスマホからは192.168.11.100:5000に接続OKとなっています。

ルータの「ポート変換の修正」の「LAN側IPアドレス」が192.168.11.100の間違いでは?

後、http://0.0.0.0:5000は特殊なIPアドレスのようなので使わない方かよいようです。おそらく自分自身を指しているはず。上記の例ではスマホ(wifi)自身(内)のhttpサーバを探しに行くと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/17 21:43

    192.168.11.2ですが、最初はそのipで試していましたが、pcの設定を自動割り当て設定だったのを固定に変更し、その際自動割り当て範囲から外れる100番にしました。色々調べているうちに変えてしまった部分で、現在はルーター設定、pc設定ともに192.168.11.100となっています。

    ネットワーク図のLAN内スマホからの接続NGでのアクセス先はグローバルIP(http://A.B.C.D:8000)に対してアクセスをしようとしています。最後に追加した部分で記載漏れでした。すみません。

    キャンセル

  • 2019/09/17 22:09

    状況を整理しますね。

    ①iPadはインターネット上からルータのグローバルIPのhttp://A.B.C.D:5000にアクセス
    ②ルータの設定でhttp://A.B.C.D:5000http://192.168.11.100:5000にフォワード
    http://192.168.11.100:5000のflaskサーバがレスポンスを返すはず

    ですね。
    確認すべきは、
    ①現状wifiに繋がっているスマホからhttp://192.168.11.100:5000がアクセスできるか?
     →flaskサーバが生きていることが確認できる
    ②インターネット上のiPadからhttp://A.B.C.D:5000にアクセスできるか?
     →多分504になる。
    ③ルーターのログを調べてiPadからのアクセスが届いているか確認する(WAN側)
     →届いているはず
    ④ルーターのログを調べていPadからのアクセスが振り向けられているか確認する。
     →この辺りで設定が間違っていて届いていないのかも。
    ⑤④が振り向けられていればMacBook側でアクセスログがあるか確認する
     →もし残っていたらflaskサーバが拒否してるのかも知れない

    と言う具合に一つ一つ潰していってください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる