IPv6 — шоста версія протоколу IP зі 128-бітними адресами. Це вирішення проблеми вичерпання IPv4. IPv6-адреса виглядає так: 2001:db8::1 — вісім груп із чотирьох шістнадцяткових цифр.
Порівняння IPv4 та IPv6
| Параметр | IPv4 | IPv6 |
|---|---|---|
| Довжина адреси | 32 біти | 128 біт |
| Кількість адрес | ~4.3 млрд | 340 × 10^36 |
| Запис | 192.168.1.1 | 2001:db8::1 |
| NAT | Потрібен | Не потрібен |
| DHCP | Обов’язковий | SLAAC (автоналаштування) |
| IPSec | Опційно | Вбудовано |
Читання IPv6-адрес
# Повна форма
2001:0db8:0000:0000:0000:0000:0000:0001
# Скорочена (прибираємо провідні нулі, :: = групи нулів)
2001:db8::1
# Loopback (аналог 127.0.0.1)
::1
# Усі адреси (аналог 0.0.0.0)
::
# Приклади із сервісами
::ffff:192.168.1.1 # IPv4-mapped IPv6 address
Налаштування IPv6 через Netplan (Ubuntu 22.04+)
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: true
dhcp6: false
addresses:
- "2001:db8:1::/64" # ваш IPv6-блок від провайдера
routes:
- to: "::/0"
via: "fe80::1" # IPv6-шлюз провайдера
nameservers:
addresses:
- "8.8.8.8"
- "2001:4860:4860::8888" # Google DNS IPv6
sudo netplan apply
Перевірка IPv6-зв’язності
# Ping IPv6
ping6 google.com
ping6 2001:4860:4860::8888
# Показати IPv6-адреси
ip -6 addr show
# Таблиця маршрутизації IPv6
ip -6 route show
# Traceroute для IPv6
traceroute6 google.com
Налаштування UFW для IPv6
# Увімкнути IPv6 в UFW
# /etc/default/ufw
IPV6=yes
# Дозволити SSH по IPv6
ufw allow in on eth0 to any port 22 proto tcp
sudo ufw reload
:: (all).Окремий випадок: IPv6-only VPS
Деякі бюджетні тарифи видають лише IPv6-адресу, без IPv4 взагалі. Вихідні з'єднання до IPv4-хостів такий сервер встановлює через NAT64-шлюз провайдера і DNS64-резолвер, який підставляє синтетичні IPv6-адреси для доменів, у яких є лише A-запис.
# Перевірити, чи справді сервер IPv6-only
ip -4 addr show | grep inet
# Якщо рядків з inet (IPv4) немає взагалі — вихідний IPv4-трафік іде лише через NAT64
# Вказати публічний DNS64-резолвер, якщо провайдер не підставив свій
nameserver 2001:67c:2b0::4
На такому сервері частина legacy-сервісів, які жорстко перевіряють вихідну IPv4-адресу відправника, може відмовляти у з'єднанні — це варто уточнити у провайдера до замовлення тарифу.
Типові помилки IPv6 на VPS
| Симптом | Причина |
|---|---|
| connect: Network is unreachable при ping6 | IPv6-адреса не призначено інтерфейсу взагалі, або маршрут за замовчуванням для ::/0 не налаштований у секції routes |
| RTNETLINK answers: File exists | Адресу вже призначено інтерфейсу автоматично через SLAAC і вона додається повторно вручну тією самою командою |
| sysctl: cannot stat .../disable_ipv6 | IPv6 повністю вимкнено на рівні ядра параметром ipv6.disable=1 у GRUB — sysctl не знаходить відповідний файл у /proc |
| ip -6 addr показує лише fe80::... | Провайдер не видав глобальний /64-блок або блок не прописано в netplan; link-local адреса існує завжди, навіть без реальної IPv6-зв'язності |
| Сайт не відкривається по IPv6, хоча ping6 проходить | Веб-сервер явно прив'язаний до IPv4-адреси замість :: (all), потрібно змінити адресу прослуховування в конфігу |
Коли IPv6 поки не потрібен
- Провайдер VPS ще не видає IPv6-блок на тариф — без адреси від провайдера налаштовувати нічого, потрібно запитувати окремий /64 у підтримки
- Аудиторія сайту майже повністю сидить в IPv4-мережах — це видно з логів веб-сервера; увімкнення IPv6 не дасть відчутного ефекту, але додасть поверхню для файрвол-правил
- Використовуються сторонні сервіси, які ще не підтримують IPv6 (деякі платіжні шлюзи, legacy API) — для вихідних з'єднань до них все одно потрібен IPv4, дуал-стек їх не замінює
- Немає часу продублювати всі firewall-правила під IPv6 — незакриті порти по IPv6 при увімкненому дуал-стеку створюють хибне відчуття захищеності, якщо правила писалися лише під iptables та IPv4
Перевірка результату
Налаштування IPv6 тісно пов'язане з базовими мережевими поняттями та іменем сервера — див. статті про адресацію IPv4 і про зміну hostname. Для веб-сервера додатково перевірте налаштування в статті про налаштування Nginx — чи слухає він на ::.
# Переконатися, що сервер відповідає по IPv6 ззовні
curl -6 -I https://example.com
# Перевірити, що порт 80 слухається і на IPv6-сокеті теж —
# у виведенні має бути рядок із [::]:80, а не лише 0.0.0.0:80
ss -tlnp | grep ':80'