Как отключить IPv6 на VPS-сервере, не удаляя интерфейс
Часто хочется отключить IPv6 полностью, но при этом не удалять сам интерфейс eth0/ens3/enp1s0 и не ломать работу облачных провайдеров (Hetzner, Vultr, DigitalOcean, Linode и др.).
Самый надёжный и чистый способ (рекомендуется)
- Отключаем IPv6 на всех интерфейсах через sysctl
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
- Делаем изменения постоянными
echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
В некоторых дистрибутивах лучше добавить ещё:
echo "net.ipv6.conf.lo.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.conf
- Применить сразу (без перезагрузки)
sudo sysctl -p
Альтернативный способ — через GRUB (если sysctl не сработал)
sudo nano /etc/default/grub
Добавить/изменить строку:
GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1"
# или
GRUB_CMDLINE_LINUX="ipv6.disable=1"
Затем:
sudo update-grub
sudo reboot
Проверка
ip -6 addr # не должно быть глобальных IPv6-адресов
ping6 google.com # должно быть "Network is unreachable"
sysctl net.ipv6.conf.all.disable_ipv6 # должно вернуть 1
Когда sysctl-способ не помогает (очень редкие случаи)
Добавьте в /etc/sysctl.d/99-disable-ipv6.conf:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
И перезагрузите.
Удачи!