이상한 네트워킹 문제: 외부에서 포트 80 및 433에 연결할 수 없음, Docker

이상한 네트워킹 문제: 외부에서 포트 80 및 433에 연결할 수 없음, Docker

머리를 긁적거리게 만드는 복잡한 네트워킹 문제에 직면했습니다. 상황은 이렇습니다. 외부에서 포트 80과 433에 액세스할 수 없지만 Docker 내의 다른 포트는 전달할 수 있으며 완벽하게 작동합니다! UFW를 설정하고 K3도 설치했지만 대부분의 서비스는 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"

관련 정보