IPv6 na VPS — konfiguracja i troubleshooting
Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Sieć
Pula adresów IPv4 wyczerpała się — RIPE NCC przydzieliło ostatnie bloki w 2019 roku. IPv6 to nie przyszłość, to już teraźniejszość: Google, Facebook, Cloudflare i większość dużych CDN działa na dual-stack. Jeśli Twój VPS ma przydzielony adres IPv6, oto jak go poprawnie skonfigurować i zweryfikować działanie.
Dlaczego warto konfigurować IPv6?
- Wyczerpanie IPv4 — nowe bloki adresów IPv4 są niedostępne lub kosztują dziesiątki dolarów za adres.
- Dual-stack = lepsza dostępność — użytkownicy z sieciami wyłącznie IPv6 (operatorzy mobilni w Azji, Afryce) mogą dotrzeć do Twojej strony.
- Google preferuje IPv6 — Googlebot łączy się przez IPv6 gdy dostępny, co może skrócić czas crawlingu.
- Bezpłatny /64 prefix — Contabo, Hetzner, OVH, DigitalOcean dają IPv6 gratis do każdego VPS (18 kvintylionów adresów z jednego prefiksu).
Sprawdzenie wsparcia IPv6 na VPS
Zanim zaczniesz konfigurować, sprawdź czy VPS ma przypisany adres IPv6:
# Sprawdź przypisane adresy ip addr show # Szukaj linii "inet6" — przykładowy output: # inet6 2a01:4f8:c17:b8f::1/64 scope global # inet6 fe80::1/64 scope link # Adres fe80:: to link-local (zawsze jest) — chcesz zobaczyć adres "scope global" # Szybki test połączenia IPv6: curl -6 https://ipv6.icanhazip.com
Jeśli curl -6 zwraca adres IPv6, masz działające połączenie. Jeśli nie — sprawdź
w panelu dostawcy czy IPv6 jest włączone i przypisane do instancji.
Konfiguracja przez Netplan (Ubuntu 20.04+)
Ubuntu od wersji 18.04 używa Netplan jako warstwy abstrakcji konfiguracji sieci. Znajdź plik
konfiguracyjny w /etc/netplan/:
ls /etc/netplan/ # Zobaczysz plik np. 50-cloud-init.yaml lub 01-netcfg.yaml # Edytuj plik konfiguracyjny nano /etc/netplan/50-cloud-init.yaml
Przykładowa konfiguracja dual-stack (IPv4 + IPv6) z Netplan:
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24 # Twój adres IPv4
- 2a01:4f8:c17:b8f::2/64 # Twój adres IPv6 (z panelu dostawcy)
gateway4: 192.168.1.1 # Brama IPv4
gateway6: fe80::1 # Brama IPv6 (link-local bramy, sprawdź u dostawcy)
nameservers:
addresses:
- 8.8.8.8
- 2001:4860:4860::8888 # Google DNS IPv6 # Testuj konfigurację (bez aplikowania) netplan try # Zastosuj konfigurację netplan apply # Sprawdź wynik ip -6 addr show ip -6 route show
Konfiguracja przez /etc/network/interfaces (Debian)
Na starszych systemach Debian lub gdy Netplan nie jest używany:
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
iface eth0 inet6 static
address 2a01:4f8:c17:b8f::2
netmask 64
gateway fe80::1
autoconf 0 # Restart interfejsu sieciowego ifdown eth0 && ifup eth0 # Lub restart usługi systemctl restart networking
UFW Firewall — włączenie IPv6
UFW domyślnie może mieć wyłączoną obsługę IPv6. Sprawdź i włącz:
# Edytuj konfigurację UFW nano /etc/default/ufw # Upewnij się że ta linia jest ustawiona na yes: IPV6=yes # Przeładuj UFW ufw disable ufw enable # Sprawdź reguły IPv6 ufw status verbose
Gdy IPV6=yes, UFW automatycznie duplikuje reguły IPv4 na IPv6. Reguły ufw allow 80/tcp i ufw allow 443/tcp zadziałają dla obu protokołów.
Możesz też dodać regułę wyłącznie dla IPv6:
# Reguła tylko dla IPv6 ufw allow in on eth0 from 2a01:4f8::/32 to any port 22 # Zablokuj ruch z konkretnego IPv6 ufw deny from 2001:db8::1 to any
Nginx — nasłuch na IPv6
Nginx domyślnie nasłuchuje tylko na IPv4. Dodaj dyrektywy listen [::]:80 i listen [::]:443 do konfiguracji vhosta:
# /etc/nginx/sites-available/twoja-domena.conf
server {
listen 80;
listen [::]:80; # IPv6
server_name twoja-domena.pl www.twoja-domena.pl;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2; # IPv6
server_name twoja-domena.pl www.twoja-domena.pl;
ssl_certificate /etc/letsencrypt/live/twoja-domena.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/twoja-domena.pl/privkey.pem;
root /var/www/twoja-domena;
index index.html;
} # Sprawdź konfigurację nginx -t # Przeładuj systemctl reload nginx
Uwaga: parametr ipv6only=on na listen [::]:80 sprawia że gniazdo obsługuje
TYLKO IPv6. Bez tego parametru (domyślnie) Nginx tworzy gniazdo dual-stack — obsługuje oba protokoły
przez jedno gniazdo. Nie mieszaj listen 80 i listen [::]:80 ipv6only=off — to wywołuje błąd "already bound".
Apache — nasłuch na IPv6
# /etc/apache2/ports.conf
Listen 80
Listen [::]:80
# VirtualHost dualstack
<VirtualHost *:80 [::]:80>
ServerName twoja-domena.pl
DocumentRoot /var/www/twoja-domena
</VirtualHost> # Sprawdź czy mod_ipv6 jest aktywny (zazwyczaj wbudowany) apache2ctl -M | grep ipv6 # Przeładuj Apache systemctl reload apache2
Testowanie — ping6, curl, dig AAAA
# Test 1: Pingowanie zewnętrznego adresu IPv6 ping6 -c 4 2001:4860:4860::8888 # Google DNS IPv6 ping6 -c 4 ipv6.google.com # Test 2: HTTP przez IPv6 curl -6 -I https://twoja-domena.pl # Test 3: Sprawdź rekord DNS AAAA (IPv6) swojej domeny dig AAAA twoja-domena.pl dig -6 AAAA twoja-domena.pl # Zapytanie przez IPv6 # Test 4: Połącz się z lokalnym Nginx przez IPv6 curl -6 http://[::1]/ # localhost IPv6
# Test 5: Sprawdź czy serwer nasłuchuje na IPv6
ss -tlnp | grep ':::80\|:::443'
# Oczekiwany output:
# LISTEN 0 128 :::80 :::* users:(("nginx",pid=...))
# LISTEN 0 128 :::443 :::* users:(("nginx",pid=...)) DNS — dodanie rekordu AAAA
Aby Twoja domena była dostępna przez IPv6, dodaj rekord AAAA w panelu DNS:
| Typ | Nazwa | Wartość | TTL |
|---|---|---|---|
A | twoja-domena.pl | 192.168.1.100 (IPv4) | 3600 |
AAAA | twoja-domena.pl | 2a01:4f8:c17:b8f::2 (IPv6) | 3600 |
AAAA | www.twoja-domena.pl | 2a01:4f8:c17:b8f::2 (IPv6) | 3600 |
Przeglądarki i klienty automatycznie wybiorą IPv6 gdy dostępny (zgodnie z RFC 6555 "Happy Eyeballs"). Jeśli IPv6 nie działa, przeglądarka automatycznie falls back na IPv4.
Typowe problemy i rozwiązania
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| ping6 brak odpowiedzi | UFW blokuje ICMP IPv6 | ufw allow proto ipv6 |
| Nginx "Address already in use" | Konflikt ipv6only | Usuń duplikat listen, używaj [::]:80 bez ipv6only |
| curl -6 "Network unreachable" | Brak trasy do bramki IPv6 | Sprawdź ip -6 route show, dodaj default route |
| Brak rekordu AAAA w dig | DNS nie skonfigurowany | Dodaj rekord AAAA w panelu DNS dostawcy |
| Serwer osiągalny przez IPv4, nie IPv6 | Firewall VPS (nie UFW) | Sprawdź Security Groups / reguły w panelu dostawcy |