Вопрос или проблема
# route -v
Таблица маршрутизации IP ядра
Назначение Шлюз Маска сети Флаги Метрика Ссылка Использование Интерфейс
по умолчанию RT-00904C0FF018 0.0.0.0 UG 1024 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-55985fc83fa9
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4a2e674be385
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-c4a5411407dd
172.21.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7eb7fa74a326
172.22.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-3b304b8d2b9f
172.23.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-519d33f42172
172.24.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-10bfee6d9dcb
172.25.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-5f628b8f8682
172.26.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-d7fcffbb970a
172.27.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-4b57aa2459c5
172.28.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-a4759ccfc8c4
172.29.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-fa55d2bd337d
172.30.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-f7574a62a5c4
172.31.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-45084db52c51
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 br-65a630f9019d
192.168.16.0 0.0.0.0 255.255.240.0 U 0 0 0 br-5aa5d76d0c7a
192.168.32.0 0.0.0.0 255.255.240.0 U 0 0 0 br-e0d66f2d6753
192.168.48.0 0.0.0.0 255.255.240.0 U 0 0 0 br-beb580b505a2
192.168.214.0 0.0.0.0 255.255.255.0 U 1024 0 0 eth0
RT-00904C0FF018 0.0.0.0 255.255.255.255 UH 1024 0 0 eth0
- У меня есть LXC с множеством работающих контейнеров Docker
- Я вижу много 172.x.x.x и предполагаю, что они принадлежат некоторым контейнерам
- Что я не могу понять, так это почему есть
192.x.x.x
тоже - Почему произошёл переход от 172.x к 192.x?
Моя проблема в том, что у меня есть реальный сервер на 192.168.9.111, и я не могу до него добраться из-за этих маршрутов. Есть идеи?
Согласно https://en.wikipedia.org/wiki/Private_network, диапазон частной сети составляет 172.16.0.0 – 172.31.255.255
Я не знаю, почему нет 172.16.0.0, но, кроме этого, диапазон 172 исчерпан.
Ответ или решение
Ваша проблема связана с маршрутизацией в контейнере LXC, где запущено множество контейнеров Docker. Чтобы понять, почему в таблице маршрутов вашего контейнера присутствуют маршруты к подсетям 192.x.x.x, необходимо рассмотреть несколько аспектов.
1. Анализ текущей конфигурации маршрутов
Вы предоставили вывод команды route -v
, в котором можно увидеть маршрутизацию сетевого трафика. Обратите внимание на следующие строчки:
- Конфигурация маршрутов для 192.x.x.x: Ваш LXC контейнер имеет маршруты к подсетям
192.168.0.0
,192.168.16.0
,192.168.32.0
,192.168.48.0
, и192.168.214.0
с масками подсети, которые позволяют подключение к этим диапазонам.
2. Сетевые интерфейсы и их взаимодействие
Поскольку у вас запущены контейнеры Docker, для них создаются виртуальные мосты (bridge interfaces), например br-65a630f9019d
, br-5aa5d76d0c7a
и т.п. Каждый из этих мостов отвечает за свою подсеть. Если один из ваших Docker контейнеров настроен на использование диапазона 192.x.x.x, он автоматически добавит соответствующий маршрут в таблицу маршрутов LXC.
3. Причина «прыжка» от 172.x.x.x к 192.x.x.x
Сетевые диапазоны 172.16.0.0
— 172.31.255.255
являются частными IP-адресами, которые могут использоваться для назначения внутренним контейнерам. Однако, если диапазон 172.x.x.x заканчивается или не используется в вашей сети, Docker может перейти к маршрутам 192.x.x.x, если это будет предусмотрено конфигурацией сети Docker или если ваши контейнеры настраиваются на случайные диапазоны.
4. Конфликт с вашим сервером
Ваш сервер с IP-адресом 192.168.9.111
не доступен, потому что маршруты к 192.x.x.x в конфигурации вашего LXC могут пересекаться с маршрутом к вашему серверу. Это создает неполадку в маршрутизации, так как трафик к вашему серверу может быть неверно направлен через виртуальные мосты Docker, а не напрямую к серверу.
5. Решение проблемы
Чтобы устранить возникшую проблему с маршрутизацией:
- Проверьте конфигурации Docker: Измените диапазоны IP для контейнеров в конфигурации Docker. Это можно сделать, задав свои собственные диапазоны, которые будут исключать 192.168.x.x.
- Настройте статические маршруты: Добавьте статические маршруты к серверу, который недоступен. Например, явное указание маршрута, указывающего на конкретный интерфейс, который должен использоваться для доступа к 192.168.9.111.
- Проверьте настройки LXC: Убедитесь, что конфигурация сети контейнера LXC не конфликтует с сетевыми настройками Docker.
Заключение
Определение причин и решение вопросов сетевой конфигурации в контейнерах LXC и Docker требует тщательного анализа маршрутов и сетевых интерфейсов. Настройка правильных сетевых правил и маршрутов поможет вам вернуть нормальную взаимосвязь между вашим LXC и сервером 192.168.9.111.