Странная проблема с сетью: порты 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.1также приводит к ошибке 404:

-> # 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"

Связанный контент