Перейти к содержанию

Отключить 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