Сетевой мост Docker ломает локальный интернет

Вопрос или проблема

На свежей установке ubuntu-server v24.04 и docker-ce v27.4.1, если я запускаю любой контейнер docker с мостовой сетью, это разрывает весь локальный интернет через 2-3 секунды. Я проверил, что моя сеть моста docker0 не управляется. Всё кажется в порядке, если я пингую google.com из docker, показывает 66% потерь пакетов.

docker run -it --rm busybox ping -c3 google.com
PING google.com (216.58.196.110): 56 data bytes
64 bytes from 216.58.196.110: seq=0 ttl=53 time=55.065 ms

--- google.com ping statistics ---
3 packets transmitted, 1 packets received, 66% packet loss
round-trip min/avg/max = 55.065/55.065/55.065 ms

Вывод networkctl:

IDX LINK    TYPE     OPERATIONAL SETUP     
  1 lo      loopback carrier     unmanaged
  2 enp37s0 ether    routable    configured
  3 docker0 bridge   no-carrier  unmanaged

ip route:

default via 10.12.0.1 dev enp37s0 proto dhcp src 10.12.0.10 metric 100 
1.1.1.1 via 10.12.0.1 dev enp37s0 proto dhcp src 10.12.0.10 metric 100 
10.12.0.0/24 dev enp37s0 proto kernel scope link src 10.12.0.10 metric 100 
10.12.0.1 dev enp37s0 proto dhcp scope link src 10.12.0.10 metric 100 
10.12.0.10 dev enp37s0 proto dhcp scope host src 10.12.0.10 metric 100 
172.16.0.0/24 dev docker0 proto kernel scope link src 172.16.0.1 linkdown 

iptables:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere   

Ответ или решение

Причины возникновения проблем с интернетом при использовании Docker Bridge в Ubuntu

В данной статье мы разберем проблему, которая может возникнуть при использовании сети Docker Bridge на свежей установке Ubuntu Server 24.04 с версией Docker CE 27.4.1. Проблема заключается в том, что при запуске любого контейнера, использующего сеть Bridge, происходит сбой всего локального интернет-соединения после 2-3 секунд. Наша цель — понять причины этого поведения и предложить возможные решения.

Анализ текущей конфигурации сети

  1. Вывод команды networkctl:

    IDX LINK    TYPE     OPERATIONAL SETUP     
    1 lo      loopback carrier     unmanaged
    2 enp37s0 ether    routable    configured
    3 docker0 bridge   no-carrier  unmanaged

    Здесь видно, что интерфейс docker0 находится в состоянии no-carrier, что означает, что он не подключен к физическому каналу. Это может указывать на неправильную конфигурацию или отсутствие взаимодействия с другими сетевыми интерфейсами.

  2. Маршрутизация (ip route):

    default via 10.12.0.1 dev enp37s0 proto dhcp src 10.12.0.10 metric 100 
    10.12.0.0/24 dev enp37s0 proto kernel scope link src 10.12.0.10 metric 100 
    172.16.0.0/24 dev docker0 proto kernel scope link src 172.16.0.1 linkdown 

    Мы видим, что основной шлюз находится по адресу 10.12.0.1, а подсеть 172.16.0.0/24 назначена для docker0, но она не доступна (linkdown). Это может объяснять, почему контейнеры не могут корректно взаимодействовать с внешней сетью.

  3. Файрвол (iptables):

    Chain INPUT (policy ACCEPT)
    Chain FORWARD (policy ACCEPT)
    Chain OUTPUT (policy ACCEPT)

    Правила iptables находятся в состоянии ACCEPT, что указывает на отсутствие блокировки трафика. Однако, возможно, другие конфигурации вашего сетевого окружения могут негативно влиять на работу, особенно если есть перекрытие с другими правилами.

Возможные причины проблемы

  1. Конфликт подсетей:
    Docker по умолчанию использует подсеть 172.16.0.0/16 для виртуальных интерфейсов. Если в вашей локальной сети уже используется та же подсеть, это может привести к конфликтам. Проверьте конфигурацию DHCP вашего маршрутизатора.

  2. Проблемы с маршрутизацией:
    Убедитесь, что маршруты настроены правильно. Возможно, во время запуска контейнеров происходит изменение маршрутов, что приводит к нарушению соединения. Рассмотрите возможность явного указания параметров маршрутизации для контейнеров.

  3. Режим работы сетевых интерфейсов:
    Некоторые версии драйверов и сетевых интерфейсов могут некорректно работать с Docker. Обновите драйвера вашей сетевой карты, а также убедитесь, что Нет никаких настроек, которые могли бы блокировать трафик между интерфейсами.

Рекомендации по устранению проблемы

  1. Проверьте настройки DHCP: Убедитесь, что ваша DHCP-конфигурация не конфликтует с подсетью, используемой Docker. Рассмотрите возможность изменения диапазона DHCP для вашей сети.

  2. Измените конфигурацию Docker: Вы можете изменить использование Docker, указав другую подсеть для docker0, чтобы избежать конфликтов. Это делается через файл конфигурации Docker или параметры конфигурации демона.

  3. Обновите систему и драйверы: Обновите систему до последней версии, чтобы исправить возможные баги и проблемы с совместимостью. Также проверьте, нет ли обновлений для сетевых драйверов.

  4. Мониторинг и тестирование: Используйте простые инструменты мониторинга (например, ping, traceroute) для диагностики проблем после внесения изменений, а также для отслеживания состояния сети и её производительности.

Заключение

Проблема с интернетом при использовании Docker в Ubuntu может быть вызвана множеством факторов, включая конфликты подсетей, неправильную маршрутизацию и проблемы с драйверами. Применение предложенных методов должен помочь исправить ситуацию. Если проблема сохраняется, возможно, стоит обратиться на форумы поддержки Docker или Ubuntu для получения экспертной помощи.

Оцените материал
Добавить комментарий

Капча загружается...