Rozwiązanie społecznościowe

CasaOS: IPv4 nie działa — sprawdź IPv6 i powiązania Dockera

A CasaOS user on Debian 12 in GCP saw port 80 reported as tcp6 and then broke web access after disabling IPv6 before installation.

Nie wyłączaj IPv6 tylko dlatego, że ss pokazuje usługę CasaOS lub Docker nasłuchującą na :::80. W systemie Linux gniazdo nasłuchujące na wieloznacznej wartości IPv6 może również akceptować połączenia IPv4, zależnie od ustawień gniazda, a Docker zwykle publikuje porty przez IPv4, gdy nie określono adresu hosta.

Przypadek źródłowy dotyczył CasaOS na Debianie 12 w GCP, a nie ZimaOS. Prawidłowa diagnoza polega na jawnym przetestowaniu IPv4, sprawdzeniu bramy CasaOS i mapowań portów Dockera oraz skontrolowaniu zapory sieciowej w chmurze przed zmianą GRUB-a lub globalnym wyłączeniem IPv6.

Najpierw bezpośrednio przetestuj IPv4

curl -4 -v http://127.0.0.1:80/
curl -4 -v http://SERVER_IPV4:80/
ss -ltnp | grep ':80'

Jeśli lokalne IPv4 działa, ale zdalne IPv4 nie, problem najprawdopodobniej dotyczy zapory hosta lub chmury albo routingu, a nie powiązania CasaOS.

Publikowanie portów Dockera zwykle obejmuje IPv4

Aktualny przewodnik Dockera dotyczący publikowania portów wskazuje, że standardowo opublikowane porty są dostępne przez mapowania adresów hosta; jawne działanie wyłącznie przez IPv6 wymaga innej konfiguracji.

Sprawdź samo CasaOS

systemctl status casaos
journalctl -u casaos --no-pager -n 100
ss -ltnp | grep -E ':80|casaos'

Aktualny instalator CasaOS nadal wyszukuje adresy interfejsów IPv4 podczas wyświetlania adresu panelu, więc sprawna instalacja nie jest zaprojektowana tak, aby wymagała dostępu wyłącznie przez IPv6.

Sprawdź zaporę sieciową GCP

Potwierdź, że maszyna wirtualna ma adres IPv4, trasę oraz regułę ruchu przychodzącego dla wybranego portu internetowego CasaOS. Zapora chmurowa może blokować port 80, nawet gdy usługa poprawnie nasłuchuje.

Nie wyłączaj globalnie IPv6 jako pierwszego rozwiązania

Starsze komponenty CasaOS historycznie oczekiwały istnienia /proc/net/tcp6, a wyłączenie IPv6 powodowało problemy z zarządzaniem aplikacjami w niektórych kompilacjach. Usunięcie IPv6 może stworzyć drugi problem bez rozwiązania pierwszego.

Jeśli potrzebujesz powiązania Dockera wyłącznie z IPv4

ports:
  - "0.0.0.0:8080:80"

Używaj jawnego powiązania z IPv4 tylko wtedy, gdy kontrolujesz tę definicję Compose i rozumiesz konsekwencje związane z udostępnieniem usługi.

Sprawdź port internetowy CasaOS

Instalator może wybrać inny dostępny port, jeśli port 80 jest już zajęty. Potwierdź rzeczywisty port HTTP CasaOS, zanim uznasz, że usługa nie uruchomiła się.

Ten sam przewodnik dotyczący sieci Dockera omawia te same podstawy sieciowe.

Sprawdź sysctl dopiero po przetestowaniu rzeczywistej łączności

Jeśli nadal podejrzewasz zachowanie gniazd dual-stack, sprawdź sysctl net.ipv6.bindv6only. Wartość 0 pozwala wielu gniazdom IPv6 nasłuchującym na adresie wieloznacznym akceptować połączenia mapowane z IPv4; wartość 1 ogranicza je do IPv6. Nie zmieniaj tego ustawienia systemowo, chyba że rozumiesz wpływ na każdą usługę, której ono dotyczy.

Sprawdź rzeczywiste opublikowane adresy Dockera

docker ps --format 'table {{.Names}}	{{.Ports}}'
docker inspect CONTAINER --format '{{json .NetworkSettings.Ports}}'

Pokazuje to, czy Docker utworzył mapowanie IPv4, takie jak 0.0.0.0:PORT, mapowanie IPv6, czy oba rodzaje. Jest to bardziej wiarygodne niż wnioskowanie na podstawie pojedynczego wiersza listy procesów.

Pamiętaj, że GCP ma dwie warstwy zapory

Host Debian może mieć własne reguły nftables/iptables, podczas gdy GCP niezależnie kontroluje ruch przychodzący przez zaporę VPC. Usługa może lokalnie działać poprawnie, a mimo to być niedostępna z zewnątrz, ponieważ port blokuje jedna z tych warstw.

FAQ

Czy :::80 zawsze oznacza tylko IPv6?

Nie. Zanim wyciągniesz taki wniosek, sprawdź połączenie za pomocą curl -4.

Czy powinienem wyłączyć IPv6 w GRUB-ie?

Nie jako pierwszy krok diagnostyczny. Może to uszkodzić komponenty oczekujące interfejsów IPv6 jądra.

Dlaczego localhost działa, ale publiczne IPv4 nie?

Sprawdź zaporę chmurową, grupę zabezpieczeń, trasę oraz zaporę hosta.

Czy to problem ZimaOS?

Wątek źródłowy dotyczy CasaOS zainstalowanego na Debianie 12, a nie ZimaOS.