外部ネットワークからDockerでホストされたWebサーバーにアクセスできない

外部ネットワークからDockerでホストされたWebサーバーにアクセスできない

私は、小さな個人ウェブサイトを、VirtualBox VM から、自分のパソコンでホストされている Docker コンテナに移行しているところです。しかし、インターネットからそのコンテナにアクセスしようとすると (Wi-Fi のない携帯電話で試しています)、「接続がタイムアウトしました」という問題が発生します。同じネットワーク上の他のコンピュータからは動作します。

これまで私が行ったテストは次のとおりです。

ローカルネットワーク

http://localhostとhttp://192.168.1.10ネットワーク上の他のコンピュータから

このテストから、私のコンピューターと Docker 構成は正常に動作しており、そのコンピューターの外部からサーバーにアクセスできることがわかりました。

インターネットから

私のインターネット ゲートウェイでは、ポート転送が設定されています。192.168.1.15 にリダイレクトすると、VM サーバーに正しくアクセスできます。

192.168.1.10にリダイレクトするとゲートウェイタイムアウトが発生し、ポートチェックツールはポート80が閉じていると表示します

このテストから、ISP が邪魔をしておらず、ゲートウェイがデータを適切な IP に適切に転送していることがわかりました。また、クライアント側 (私の電話/電話プロバイダー) にも問題はありません。

便利な設定

  • docker-compose 設定:
    version: "3.7"
    services:    
        proxy:
            image: nginx:stable
            ports:
                - "80:80"
            volumes:
                - ./proxy/conf.d:/etc/nginx/conf.d
  • ./proxy/conf.d/site.conf
    server {
        listen 80;
        server_name example.com;     # not actual DNS, but it doesn’t seem to be in cause.

        location / {
            deny all;
        }   
    }

はい、問題なく動作する実際には、今は403禁止エラーが発生しています

  • ゲートウェイのポート転送 (UI 内) ポート 80 からポート 80 ホスト 192.168.10 へ
  • Virtualbox VM ネットワークはブリッジとして構成されており、IP は 192.168.1.15 です。
  • 書き込まれたすべての内部IPは静的です トポロジー

他に必要な情報があればお知らせください

除外

その問題が解決されるまで、SSL および DNS 変数を意図的に除外し、後で構成します。

私は主に、他に何を点検すべきかというアイデアを検討しています。なぜなら、すべてのピースは個別にはうまく機能しているように見えますが、明らかに何かが欠けているからです。

編集: リモート コンピューターからの curl コマンドのクローズ ポート/タイムアウトの問題の出力をもう少し調べてみました。

$  curl -v --output - 142.#.#.#
*   Trying 142.#.#.#:80...
* Connected to 142.#.#.# (142.#.#.#) port 80 (#0)
> GET / HTTP/1.1
> Host: 142.#.#.#
> User-Agent: curl/7.83.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 502 Connection timed out
< Date: Wed, 01 Jun 2022 16:34:06 GMT
< Connection: close
< Cache-Control: no-store
< Content-Type: text/html
< Content-Language: en
< Content-Length: 219
< 
<HEAD><TITLE>Connection timed out</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
 Connection timed out</B></FONT>

<!-- default "Connection timed out" response (502) -->
</BODY>
* Closing connection 0

ポートチェックの出力

$ nmap 142.#.#.# -p 81
...
Host is up (0.077s latency).

PORT   STATE    SERVICE
80/tcp open     http


$ nc -zvw10 142.#.#.# 80
...
[142.#.#.#] 80 (http) open

しかし、最初に使用したping.euでは、まだ閉鎖中と表示されています。どのように確認しているのかわかりません

関連情報