подман ipvlan l3 сеть

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

У меня есть Ubuntu сервер “k3”, подключенный к физической сети 192.168.86.0/24 и маршрутизатору tplink deco с адресом 192.168.86.1. IP-адрес к3 — 192.168.86.53.

На сервере Ubuntu я создал сеть ipvlan l3:

podman network create -d ipvlan --subnet 192.168.3.0/24 --opt mode=l3 ipvlan

Контейнер развернут с адресом 192.168.3.3. Успешная коммуникация:

  • подключение от podman хоста к контейнеру
  • подключение от другого хоста к контейнеру (после добавления статического маршрута для 192.168.3.0/24)
  • подключение от контейнера к хостовой сети

Но контейнер не может соединиться с Интернетом. Пробовал пинговать 1.1.1.1 и 8.8.8.8, но ответа не было. Статический маршрут для 192.168.3.0/24 уже добавлен в моем маршрутизаторе deco. Захват пакетов в хостовой сети показывает отсутствие ответа.

root@k3:~# tcpdump  -nn -v icmp -i enp1s0 -c3
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:42:16.851045 IP (tos 0x0, ttl 64, id 36288, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.3.3 > 1.1.1.1: ICMP echo request, id 10, seq 130, length 64
14:42:17.851604 IP (tos 0x0, ttl 64, id 36463, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.3.3 > 1.1.1.1: ICMP echo request, id 10, seq 131, length 64
14:42:18.852261 IP (tos 0x0, ttl 64, id 36506, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.3.3 > 1.1.1.1: ICMP echo request, id 10, seq 132, length 64
3 packets captured
3 packets received by filter
0 packets dropped by kernel

Я также попытался настроить NAT на podman хосте. net.ipv4.ip_forward включен, и цепочка FORWARD разрешает весь трафик.

iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE

Захват пакетов теперь показывает ответ, но он не попадает в контейнер.

root@k3:~# tcpdump  -nn -v icmp -i enp1s0 -c3
tcpdump: listening on enp1s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:46:27.439541 IP (tos 0x0, ttl 64, id 2763, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.86.53 > 1.1.1.1: ICMP echo request, id 16, seq 0, length 64
14:46:27.442535 IP (tos 0x2c, ttl 55, id 17039, offset 0, flags [none], proto ICMP (1), length 84)
    1.1.1.1 > 192.168.86.53: ICMP echo reply, id 16, seq 0, length 64
14:46:27.442642 IP (tos 0x2c, ttl 54, id 17039, offset 0, flags [none], proto ICMP (1), length 84)
    1.1.1.1 > 192.168.3.3: ICMP echo reply, id 16, seq 0, length 64
3 packets captured
3 packets received by filter
0 packets dropped by kernel

Вывод пинга из моего alpine контейнера:

/ # ping 1.1.1.1 -c1
PING 1.1.1.1 (1.1.1.1): 56 data bytes

--- 1.1.1.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

Я думаю, что мой маршрутизатор deco не хочет маршрутизировать адреса за пределами диапазона LAN. Но установка NAT на podman хосте должна работать? Чего мне не хватает? Я хочу, чтобы мои контейнеры могли подключаться к Интернету.

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

Чтобы ваш контейнер Podman с сетью IPvlan L3 имел возможность доступа в интернет, необходимо правильно настроить маршрутизацию и маскарадинг (NAT). Рассмотрим шаги, которые вы уже предприняли и предоставим рекомендации по решениям:

Анализ текущей ситуации:

  1. Создание сети IPvlan L3:
    Вы создали сеть под названием ipvlan с подсетью 192.168.3.0/24. Контейнер имеет IP 192.168.3.3, который не может обратиться в интернет.

  2. Основной сетевой маршрут:
    На маршрутизаторе TP-Link Deco уже добавлен статический маршрут для подсети 192.168.3.0/24. Это позволяет другим устройствам внутри вашей локальной сети взаимодействовать с контейнерами.

  3. Настройка NAT:
    Вы настроили маскарадинг на хосте командой:

    iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j MASQUERADE

    Это действие необходимо для того, чтобы пакеты из контейнера выглядели как исходящие от IP-адреса хоста (192.168.86.53), что позволит им выйти в интернет.

Проблемы и решения:

  • Проблема с маршрутизацией:

    • В пакете tcpdump видно, что хотя ICMP-запросы уходят и ответы приходят, они не возвращаются в контейнер. С большой вероятностью это связано с тем, что полученные ответные пакеты не перенаправляются корректно контейнеру.
  • Настройка iptables:

    • Убедитесь, что у вас разрешен трафик через цепочку FORWARD:
      iptables -P FORWARD ACCEPT
    • Проверьте и добавьте правила для разрешения трафика между контейнером и интернетом:
      iptables -A FORWARD -o enp1s0 -j ACCEPT
      iptables -A FORWARD -i enp1s0 -j ACCEPT
  • Конфигурация сети контейнера:

    • Проверьте настройки маршрутизации внутри контейнера. Убедитесь, что шлюз по умолчанию настроен на IP-адрес хоста Docker Podman. Возможно, потребуется вручную указать Default Gateway при старте контейнера или отредактировать конфигурацию внутри контейнера.
  • Конфликты с маршрутизатором:

    • Если маршрутизатор TP-Link действительно блокирует маршрутизацию через неизвестные подсети, возможно, стоит проверить его настройки или обновить прошивку. В некоторых случаях может потребоваться заменить маршрутизатор на более гибкое устройство.

Заключение:

Добейтесь последовательности в настройках и уверенной совместимости методов маршрутизации и NAT между хостом с Podman и вашим роутером. Правильная настройка iptables, маршрутизационных таблиц и согласование с внутрисетевыми параметрами роутера обеспечат успешное подключение контейнеров к интернету.

Это руководство призвано улучшить вашу конфигурацию сети с использованием Podman и сети ipvlan, предоставив детализированные инструкции по устранению текущих проблем.

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

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