奇妙なネットワーク問題: ポート 80 と 433 が外部からアクセスできない、Docker

奇妙なネットワーク問題: ポート 80 と 433 が外部からアクセスできない、Docker

頭を悩ませている、不可解なネットワークの問題に遭遇しています。状況は次のとおりです。外部からポート 80 と 433 にアクセスできませんが、Docker 内の他のポートは転送でき、問題なく動作します。UFW をセットアップし、K3s もインストールしていますが、サービスの大部分は Docker Compose を使用して実行しています。

さらに調査するために、Nginx テスト コンテナを起動したところ、事態はさらに奇妙な方向に進みました。

内部 Docker IP を使用してこのテスト コンテナーにアクセスできますが、単純なcurl -I 127.0.0.1結果でも 404 エラーが発生します。

-> # curl -I 127.0.0.1

HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Date: Wed, 20 Sep 2023 00:39:26 GMT
Content-Length: 19

別の内部 IP (VPN ネットワーク) からアクセスできることがわかったとき、事態はさらに複雑になりました。

-> # curl -I 192.168.10.1

HTTP/1.1 200 OK
Server: nginx/1.25.2
Date: Wed, 20 Sep 2023 00:41:32 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 15 Aug 2023 17:03:04 GMT
Connection: keep-alive
ETag: "64dbafc8-267"
Accept-Ranges: bytes

しかし、問題は次の点です。コンテナを停止すると、次のようなエラーが表示されるはずです。

-> # curl -I 127.0.0.1

curl: (7) Failed to connect to 127.0.0.1 port 80 after 0 ms: Couldn't connect to server

しかし、そうではありません。同じ 404 エラーが繰り返し表示されます。


アップデート:さらに謎なことに、Docker コンテナをオフにすると、アクセスしようとすると192.168.10.1404 エラーが発生します。

-> # curl -I 192.168.10.1

HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Date: Wed, 20 Sep 2023 00:51:49 GMT
Content-Length: 19

まったく困惑しており、問題がどこから発生しているのか全くわかりません。さらに困惑しているのは、ポート 81 でこの実験を繰り返すと、すべてが期待どおりに機能するということです。これをデバッグする方法について、何か知見や提案をお持ちの方がいらっしゃいましたら、ぜひご協力ください。


以下にさらに出力を示します。

-> # lsof -i:80

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 9815 root    4u  IPv4  54638      0t0  TCP *:http (LISTEN)
docker-pr 9823 root    4u  IPv6  48079      0t0  TCP *:http (LISTEN)
-> # docker ps

CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                               NAMES
975e74d4bdfd   nginx:latest          "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx_test_nginx-test_1
-> # ufw status

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
Anywhere                   ALLOW       192.168.1.0/24
Anywhere                   ALLOW       192.168.178.0/24
81/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
81/tcp (v6)                ALLOW       Anywhere (v6)


Anywhere on eth0           ALLOW FWD   Anywhere on wghub
Anywhere on wghub          ALLOW FWD   Anywhere on wghub
Anywhere (v6) on eth0      ALLOW FWD   Anywhere (v6) on wghub
Anywhere (v6) on wghub     ALLOW FWD   Anywhere (v6) on wghub
-> # netstat -ltnp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 127.0.0.1:10010         0.0.0.0:*               LISTEN      1374/containerd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      631/sshd: /usr/sbin
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9815/docker-proxy
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      610/systemd-resolve
tcp6       0      0 :::22                   :::*                    LISTEN      631/sshd: /usr/sbin
tcp6       0      0 :::80                   :::*                    LISTEN      9823/docker-proxy

-> # cat /etc/default/docker

DOCKER_OPTS="--iptables=false"

アップデート:これは私のテスト構成です:

docker-compose.yml

version: '3'

services:
  nginx-test:
    image: nginx:latest
    ports:
      - "80:80"

関連情報