Привіт, це Kernelka! Сьогодні ми разом піднімемо повноцінний IPv6 на вашому сервер Linux: налаштуємо dual-stack (IPv4+IPv6), пропишемо безпечний firewall і додамо NAT64, щоб IPv6-хости могли ходити до світу тільки з IPv4. Поїхали! 🌐
Підготовка: перевіряємо підтримку IPv6 і систему
Почнемо з базових мережевих налаштувань та перевірок. У більшості сучасних дистрибутивів IPv6 уже доступний з коробки, але краще впевнитися.
# Чи не вимкнено IPv6
sysctl net.ipv6.conf.all.disable_ipv6
# Перевірка інтерфейсів і маршрутів
ip -6 addr
ip -6 route
# Тест зв'язку (якщо є глобальна IPv6)
ping -6 google.com -c 3 || true
Увімкнемо потрібні параметри ядра і форвардинг, якщо це сервер Linux, який буде маршрутизувати трафік:
sudo tee /etc/sysctl.d/99-ipv6.conf >/dev/null <<'EOF'
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
# Приймати RA навіть якщо є маршрути (зручно для dual-stack)
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2
# Форвардинг, якщо сервер буде маршрутизатором / для NAT64
net.ipv6.conf.all.forwarding=1
EOF
sudo sysctl --system
Dual-stack: отримуємо IPv6-адресу
Є два популярні варіанти: автоматично через SLAAC/DHCPv6 або статична адреса. Вибір залежить від провайдера та політики мережі.
Варіант 1: SLAAC/DHCPv6 (автоматично)
Для систем із NetworkManager найшвидше так:
# Знайдіть назву підключення nmcli con
# Увімкніть автоналаштування IPv6
sudo nmcli con mod "System eth0" ipv6.method auto
sudo nmcli con up "System eth0"
# Перевірка адреси і маршруту
ip -6 addr show dev eth0
ip -6 route
Варіант 2: Статична конфігурація (Netplan, Ubuntu/Debian)
Якщо ви використовуєте Netplan, створіть або змініть YAML для інтерфейсу. Приклад для статичної IPv6 та IPv4:
# /etc/netplan/01-dualstack.yaml
network:
version: 2
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
- 2001:db8:1234:1::10/64
- 203.0.113.10/24
gateway6: 2001:db8:1234:1::1
nameservers:
addresses: [2606:4700:4700::1111, 1.1.1.1]
sudo netplan apply
ip -6 addr show dev eth0
ip -6 route
Швидкий тест доступності й SSH
Коли адреса отримана, перевірте резолв і SSH підключення по IPv6:
dig AAAA kernel.org +short
ssh -6 user@[2001:db8:1234:1::10]
Налаштування firewall для IPv6 (nftables)
Тепер закриємо зайве і дозволимо потрібне. Для firewall Linux рекомендую nftables: одна таблиця для IPv4/IPv6, чистіші правила.
sudo tee /etc/nftables.conf >/dev/null <<'EOF'
flush ruleset
table inet filter {
sets {
ssh_ports { type inet_service; elements = { 22 } }
}
chains {
input {
type filter hook input priority 0;
policy drop;
ct state established,related accept
iif lo accept
# ВАЖЛИВО: ICMPv6 для ND/RA/PMTU
icmpv6 type { echo-request, echo-reply, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert, packet-too-big, time-exceeded, parameter-problem } accept
# Пінги IPv4 теж не завадять діагностиці
ip protocol icmp accept
# Дозволяємо SSH (враховуючи IPv6)
tcp dport @ssh_ports accept
# Приклад: HTTP/HTTPS для веб-сервера
tcp dport { 80, 443 } accept
}
forward {
type filter hook forward priority 0;
policy drop;
ct state established,related accept
# Дозволити форвардинг, якщо цей вузол — маршрутизатор
ip6 nexthdr icmpv6 accept
}
output {
type filter hook output priority 0;
policy accept;
}
}
}
EOF
sudo systemctl enable --now nftables
sudo nft list ruleset
Перевірте, що SSH зберігся й по IPv6, і по IPv4 перед віддаленим застосуванням політик. ⚙️
NAT64 (Tayga): доступ з IPv6 у світ IPv4
NAT64 дозволяє вузлам з IPv6 ходити до ресурсів, що мають лише IPv4. Найпростіше підняти в лабораторії через Tayga (user-space NAT64) і DNS64. Для продуктивних середовищ придивіться до Jool (див. далі).
Інсталяція
# Debian/Ubuntu
sudo apt update && sudo apt install -y tayga dnsmasq
# RHEL/Alma/Rocky (EPEL може знадобитись)
# sudo dnf install -y tayga dnsmasq
Конфігурація Tayga
Використаємо стандартний префікс DNS64 64:ff9b::/96 та виділимо внутрішню IPv4-підмережу для трансляцій.
sudo tee /etc/tayga.conf >/dev/null <<'EOF'
# /etc/tayga.conf
# TUN-інтерфейс для NAT64
tun-device nat64
# Локальна IPv4 адреса інтерфейсу Tayga (RFC5737 адреса для прикладу)
ipv4-addr 192.0.2.1
# Префікс DNS64 (не змінюйте без потреби)
prefix 64:ff9b::/96
# Пул для динамічних IPv4-«тіней»
dynamic-pool 192.0.2.0/24
# Де Tayga зберігає стани
data-dir /var/spool/tayga
EOF
# Створюємо TUN і маршрути
sudo tayga --mktun
sudo ip link set nat64 up
sudo ip addr add 192.0.2.1 dev nat64
sudo ip -6 route add 64:ff9b::/96 dev nat64
# Вмикаємо форвардинг
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
# Маскарадинг для виходу у світ (вкажіть свій зовнішній інтерфейс)
IFACE=eth0
sudo iptables -t nat -A POSTROUTING -s 192.0.2.0/24 -o "$IFACE" -j MASQUERADE
# Запускаємо службу
sudo systemctl enable --now tayga
DNS64 (dnsmasq)
DNS64 синтезує AAAA з A-записів під префікс 64:ff9b::/96, щоб клієнти по IPv6 діставалися до IPv4-ресурсів.
sudo tee /etc/dnsmasq.d/dns64.conf >/dev/null <<'EOF'
# Локальний DNS64
listen-address=::1,127.0.0.1
bind-interfaces
port=53
# Вмикаємо DNS64 з префіксом NAT64
dns64 64:ff9b::/96
# Форвардимо на надійні рекурсивні DNS
no-resolv
server=1.1.1.1
server=2606:4700:4700::1111
EOF
sudo systemctl restart dnsmasq
Тест NAT64/DNS64
# Має повернути синтетичні AAAA (64:ff9b::/96)
dig AAAA ipv4only.arpa @::1 +short
# Перевірка ICMPv6 до A-only ресурсу через DNS64
ping -6 ipv4only.arpa -c 3 || true
Пам’ятайте: для робочого середовища налаштуйте чіткі правила у nftables для ланцюжка forward, логування та контроль MTU. Це все той же firewall Linux, тільки з урахуванням двох стеків.
Альтернативні способи
- Jool (kernel-space NAT64/NAT46): вища продуктивність, підтримка SIIT, гнучкі сценарії з nftables. Рекомендовано для продакшну.
- Роутер з вбудованим NAT64/DNS64 (OpenWrt + Jool/DNS64): знімає частину навантаження з вашого сервер Linux.
- NPTv6 (Prefix Translation): не те саме, що NAT64, але інколи корисно при зміні провайдера/префікса.
GUI-спосіб (якщо є NetworkManager)
На серверах ми зазвичай у термінал Linux, але якщо у вас є GUI, можна так:
- GNOME Settings → Network → ваш інтерфейс → IPv6 → Automatic (SLAAC/DHCP) або Manual (вкажіть адресу/префікс/шлюз).
- Без GUI зручно користуватися nmtui: запустіть
nmtui→ Edit a connection → IPv6 Configuration.
FAQ
Чому немає глобальної IPv6-адреси?
Перевірте, чи провайдер виділяє префікс (PD), чи увімкнено accept_ra, чи не блокує маршрутизатор RA. На віртуальних хостингах інколи треба додати статичну адресу вручну.
Падають з’єднання по IPv6 або повільно працює
Зазвичай проблема в MTU/PMTU: переконайтеся, що ICMPv6 тип packet-too-big не блокується у firewall. Дозвольте основні ICMPv6 типи, як у прикладі.
SSH по IPv6 не підключається
Переконайтеся, що sshd слухає на :: (ListenAddress ::), порт відкрито у firewall, а запис AAAA правильний. Тестуйте без DNS: ssh -6 user@[IPv6]. Це напряму стосується розділу про SSH підключення.
Як тимчасово вимкнути IPv6?
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
Не забувайте повернути назад після діагностики.
NAT64 не працює, хоч DNS64 віддає AAAA
Перевірте, чи маршрут 64:ff9b::/96 йде в інтерфейс nat64, чи увімкнено IPv4/IPv6 форвардинг, і чи є MASQUERADE на вихідному інтерфейсі. Переконайтеся, що зовнішній DNS не кешує параметри без DNS64.
Порада від Kernelka
Починайте з простого dual-stack і прозорого nftables, уважно логуючи перші дні трафік. А вже потім вмикайте NAT64 у лабораторії, переносіть на прод лише після навантажувальних тестів і моніторингу. Маленькі кроки — великі перемоги! 😊
Підсумок
- Увімкніть IPv6 і форвардинг через sysctl, перевірте маршрути.
- Налаштуйте dual-stack: SLAAC/DHCPv6 або статично (Netplan/NMCLI).
- Побудуйте надійний firewall Linux з nftables і не блокуйте критичні ICMPv6.
- За потреби додайте NAT64 (Tayga для лаби, Jool для продакшну) і DNS64.
- Тестуйте резолв, пінги, веб і SSH підключення по IPv6.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.