Отключить IPv6
Версии animails от 2025-09¶
Начиная с обновления 2025-09, управление IPv6 в стеке animails стало более удобным.
Просто измените переменную в файле animails.conf:
ENABLE_IPV6=false
Примечание
Начиная с версии 2025-09, эта переменная включена по умолчанию (true), если система поддерживает IPv6-соединение. Это также активирует IPv6 внутри контейнеров.
После внесения изменений необходимо перезапустить весь стек animails:
docker compose down
docker compose up -d
docker-compose down
docker-compose up -d
Это пересоздаст сеть Docker для animails на основе настроек в animails.conf.
А вы знали?
С обновления 2025-09 в скрипте обновления появился помощник, который может корректировать настройки IPv6 в Docker Daemon на основе конфигурации вашего хоста.
В большинстве случаев это работает безупречно, так как JSON-файл аккуратно редактируется с помощью инструмента jq для чистого добавления или удаления значений.
Помощник будет уведомлять вас о необходимых корректировках до тех пор, пока файл daemon.json не будет правильно настроен (с поддержкой IPv6 или без неё) для обеспечения бесперебойной и безошибочной работы.
Никаких дополнительных изменений не требуется, так как эти настройки управляют всеми внутренними IPv6-адресами.
Все службы animails настроены на прослушивание как IPv4, так и IPv6 (если включено). Если для сети контейнеров доступен только IPv4-адрес, службы будут использовать только его.
Важно — если IPv6 был включен ранее
Если вы ранее включали IPv6 в стеке или в Docker Daemon, а теперь хотите его отключить, пожалуйста, также вручную скорректируйте настройки IPv6 в Docker Daemon и ядре. Если сохранятся старые настройки Docker или ядра, могут возникнуть непредвиденные ошибки (например, некорректная трансляция адресов). В идеале это следует сделать через sysctl, чтобы IPv6 был полностью отключен на уровне ядра, после чего перезапустить службу Docker.
Краткий обзор (примеры команд, проверьте и адаптируйте под ваш дистрибутив):
Проверка:
sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6
Временно (до перезагрузки):
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.lo.disable_ipv6=1
Постоянное отключение (создание и применение файла):
echo -e "net.ipv6.conf.all.disable_ipv6 = 1nnet.ipv6.conf.default.disable_ipv6 = 1nnet.ipv6.conf.lo.disable_ipv6 = 1" | tee /etc/sysctl.d/99-disable-ipv6.conf
sysctl --system
Проверка/адаптация Docker Daemon:
- Убедитесь, что в
/etc/docker/daemon.jsonотсутствуют записи вида"ipv6": trueили"fixed-cidr-v6". При необходимости установите"ipv6": falseили удалите записи, связанные с IPv6. -
Пример (редактируйте осторожно или автоматизируйте с помощью jq):
mkdir -p /etc/docker # вручную: отредактируйте /etc/docker/daemon.json, установив "ipv6": false или удалив fixed-cidr-v6 systemctl restart docker
После этих изменений перезапустите Docker и пересоздайте стек animails:
docker compose down
docker compose up -d
docker-compose down
docker-compose up -d
Осторожно
Если вы используете IPv6-адрес на хосте, а Docker Daemon настроен неправильно (что обычно обнаруживается и исправляется помощником в процессе обновления), это может привести к появлению открытого релея (open relay).
Это происходит потому, что Docker по умолчанию транслирует IPv6-адреса во внутренние IPv4-адреса (NAT). Если Docker Daemon настроен неверно, внешние IPv6-адреса могут быть ошибочно интерпретированы как внутренние. Это может позволить спамерам рассылать спам через ваш сервер, используя неправильно настроенный IPv6-адрес.
На уровне сети Docker это особенно критично, так как внутренние адреса контейнеров часто имеют менее строгие механизмы безопасности. В частности, связь между веб-интерфейсом почты и сервером Postfix (SMTP) может стать уязвимой, если сетевая трансляция работает некорректно.
Поэтому крайне важно привести настройки Docker Daemon в соответствие с конфигурацией системы. Daemon должен быть настроен так, чтобы отражать реальное состояние IPv6-соединения хоста. Это предотвращает создание некорректных правил NAT и обеспечивает правильную обработку IPv6-адресов.
Всегда проверяйте конфигурацию сети Docker после внесения изменений, чтобы убедиться в отсутствии непреднамеренных уязвимостей безопасности.
Старые версии animails (до 2025-09)¶
Опасно
В установках, использующих Docker версий от 25.0.0 до 25.0.2 (проверить можно командой docker version), поведение распределения IPv6-адресов изменилось из-за ошибки. Обычного использования enable_ipv6: false БОЛЬШЕ НЕДОСТАТОЧНО для полного отключения IPv6 в стеке.
Это была ошибка в Docker Daemon, которая была исправлена в версии 25.0.3.
Это рекомендуется ТОЛЬКО в том случае, если на вашем хосте нет сети с поддержкой IPv6!
Если вам действительно это необходимо, вы можете отключить использование IPv6 в файле compose.
Кроме того, вы можете отключить запуск контейнера ipv6nat-animails, так как он не нужен, если вы не используете IPv6.
Вместо прямого редактирования docker-compose.yml предпочтительнее создать файл переопределения (override) и внести изменения в сервисы там. К сожалению, на данный момент это работает только для сервисов, но не для настроек сети.
Чтобы отключить IPv6 в сети animails, откройте docker-compose.yml в текстовом редакторе и найдите раздел networks (в нижней части файла).
1. Измените docker-compose.yml
Измените enable_ipv6: true на enable_ipv6: false и закомментируйте подсеть IPv6:
networks:
animails-network:
[...]
enable_ipv6: true # <<< установите false
ipam:
driver: default
config:
- subnet: ${IPV4_NETWORK:-172.22.1}.0/24
- subnet: ${IPV6_NETWORK:-fd4d:6169:6c63:6f77::/64} # <<< закомментируйте символом #
[...]
2. Отключите ipv6nat-animails
Чтобы также отключить контейнер ipv6nat-animails, перейдите в директорию animails и создайте новый файл docker-compose.override.yml:
ПРИМЕЧАНИЕ: Если у вас уже есть файл переопределения, не создавайте его заново, а добавьте строки ниже в существующий файл.
# cd /opt/animails
# touch docker-compose.override.yml
Откройте файл и добавьте следующее содержимое:
services:
ipv6nat-animails:
image: bash:latest
restart: "no"
entrypoint: ["echo", "ipv6nat disabled in compose.override.yml"]
Чтобы изменения вступили в силу, необходимо полностью остановить и снова запустить стек, чтобы контейнеры и сети были пересозданы:
docker compose down
docker compose up -d
docker-compose down
docker-compose up -d
3. Отключите IPv6 в unbound-animails
Отредактируйте data/conf/unbound/unbound.conf и установите do-ip6 в значение no:
server:
[...]
do-ip6: no
[...]
Перезапустите Unbound:
docker compose restart unbound-animails
docker-compose restart unbound-animails
4. Отключите IPv6 в postfix-animails
Создайте файл data/conf/postfix/extra.cf и установите предпочтение IPv4:
smtp_address_preference = ipv4
inet_protocols = ipv4
Перезапустите Postfix:
docker compose restart postfix-animails
docker-compose restart postfix-animails
5. Если ваш Docker Daemon полностью отключил IPv6:
Исправьте следующие конфигурационные файлы Dovecot и php-fpm:
sed -i 's/,\[::\]//g' data/conf/dovecot/dovecot.conf
sed -i 's/\[::\]://g' data/conf/phpfpm/php-fpm.d/pools.conf
6. Отключите прослушивание IPv6 для NGINX
Установите DISABLE_IPv6=y в файле animails.conf.
Чтобы это изменение вступило в силу, необходимо пересоздать контейнер nginx-animails:
docker compose up -d
docker-compose up -d