По порядку Senior Сети и тома обновлено

Путь пакета к опубликованному порту

Вопрос

Расставь по порядку путь входящего TCP-пакета с клиента до процесса в контейнере, опубликованном через -p 8080:80 (bridge-сеть).

Попробуйте сами

Расставьте шаги по порядку стрелками.

  1. 1
    Правило DNAT в цепочке DOCKER таблицы nat меняет адрес назначения на IP контейнера и порт 80
  2. 2
    Мост docker0 (или мост пользовательской сети) передаёт пакет в veth-пару контейнера
  3. 3
    Пакет приходит на интерфейс хоста на порт 8080
  4. 4
    Пакет проходит цепочку FORWARD (сначала DOCKER-USER, затем правила Docker)
  5. 5
    Процесс в network namespace контейнера принимает соединение на 0.0.0.0:80
Показать ответ и разбор

Коротко

Публикация порта это NAT: адрес назначения переписывается ещё до маршрутизации, затем пакет считается транзитным и идёт через FORWARD, где первой проверяется DOCKER-USER, а не INPUT. Поэтому правила ufw в INPUT на него не действуют.

Правильный порядок

  1. 1
    Пакет приходит на интерфейс хоста на порт 8080
  2. 2
    Правило DNAT в цепочке DOCKER таблицы nat меняет адрес назначения на IP контейнера и порт 80
  3. 3
    Пакет проходит цепочку FORWARD (сначала DOCKER-USER, затем правила Docker)
  4. 4
    Мост docker0 (или мост пользовательской сети) передаёт пакет в veth-пару контейнера
  5. 5
    Процесс в network namespace контейнера принимает соединение на 0.0.0.0:80

Разбор

Публикация порта это NAT: адрес назначения переписывается ещё до маршрутизации, затем пакет считается транзитным и идёт через FORWARD, где первой проверяется DOCKER-USER, а не INPUT. Поэтому правила ufw в INPUT на него не действуют. Дальше мост доставляет пакет в veth контейнера, а приложение должно слушать адрес интерфейса, а не loopback.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.