Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Docker-контейнер внутри виртуальной машины Proxmox не может выйти в интернет

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Docker-контейнер внутри виртуальной машины Proxmox не может выйти в интернет, Proxmox Виртуальная Среда
     
    kartr
    Guest
    #1
    0
    14.08.2024 18:15:00
    У меня есть сервер от OVH, на котором стоит Proxmox 8 и несколько виртуальных машин с Ubuntu 22. Сервер от OVH требует кастомной настройки Proxmox, если вы хотите использовать несколько IP-адресов, как объясняется здесь (смотрите ссылку ниже, раздел про ADVANCE сервера — это наименее сложная конфигурация из всех, и именно её я использую) https://github.com/ovh/docs/blob/9d...rvers/proxmox-network-HG-Scale/guide.fr-fr.md

    Как указано в руководстве, файл /etc/network/interfaces на моём гипервизоре выглядит так:

    Code:
    auto lo
    iface lo inet loopback

    auto enp8s0f0np0
    iface enp8s0f0np0 inet static
       address PUB_IP_DEDICATED_SERVER/32
       gateway 100.64.0.1

    auto vmbr0
    iface vmbr0 inet static
       address 192.168.0.1/24
       bridge-ports none
       bridge-stp off
       bridge-fd 0
       up ip route add ADDITIONAL_IP/32 dev $IFACE
       up ip route add ADDITIONAL_IP_BLOCK/28 dev $IFACE

    А конфигурация netplan на ВМ выглядит так:

    Code:
    network:
     version: 2
     ethernets:
       eth0:
         addresses:
           - 192.168.0.3/24
           - ADDITIONAL_IP/32
         routes:
           - to: default
             via: 192.168.0.1
             # Чтобы пакеты в интернет исходили с публичного IP, а не с приватного 192.168.0.3
             from: ADDITIONAL_IP

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

    Может, это связано с маршрутизацией IP? Буду рад любой помощи от сообщества по сетевым вопросам!
     
     
     
    podo_
    Guest
    #2
    0
    09.09.2024 11:53:00
    Привет, kartr, ты нашёл решение? У меня такая же проблема. После разных попыток устранения неполадок выяснилось, что проблема в интерфейсе docker0 — он не может принимать пакеты извне.
     
     
     
    mjwhite10
    Guest
    #3
    0
    11.09.2024 15:02:00
    Привет, у меня та же проблема! Уверен, что ты тоже используешь OVH.
     
     
     
    podo_
    Guest
    #4
    0
    11.09.2024 15:26:00
    Да, я использую OVH и у меня выделенный сервер ADVANCE. Ты тоже работаешь с ADVANCE?
     
     
     
    mjwhite10
    Guest
    #5
    0
    11.09.2024 15:49:00
    Да, ADVANCE тоже. В Proxmox есть виртуальная машина, и внутри неё запущен Docker-контейнер с мостовой сетью. К контейнеру можно получить доступ из интернета, а вот наоборот — нет. Из контейнера мы можем пинговать виртуальную машину и даже хост Proxmox, но дальше — ничего. Похоже, придётся настраивать что-то ещё либо в контейнере, либо в виртуальной машине.
     
     
     
    podo_
    Guest
    #6
    0
    11.09.2024 18:56:00
    Та же самая проблема, я пытался менять правила iptables, ufw, файл docker daemon.js, но ничего не работает. Не уверен, связана ли это с конфигурацией netplan. Поддержка OVH помочь не смогла, потому что они только консультируют по настройке самой машины, а не по другим проблемам, связанным с установленной ОС.
     
     
     
    mjwhite10
    Guest
    #7
    0
    11.09.2024 22:39:00
    Привет снова. Мы нашли обходной путь, думаю, он может подойти и вам. В документации OVH виртуальным машинам назначают 2 IP:

    - один в приватной сети, например 192.168.0.7  
    - ADDITIONAL_IP  

    Проблема в том, что когда вы настраиваете виртуальную машину, задаёте такой кусок кода:  
    Код:  
    routes:  
           - to: default  
             via: 192.168.0.1  
             from: ADDITIONAL_IP  

    Это говорит машине, что по умолчанию для любого неизвестного назначения шлюз — 192.168.0.1 (LAN IP хоста PROXMOX), а исходный IP-адрес для общения с ним должен быть ADDITIONAL_IP. Но это правило соблюдается только для пакетов, созданных в ОС виртуалки. Не соблюдается для пакетов, созданных извне (например, из Docker-контейнеров, у которых своя ОС).

    Мы не понимаем почему, но docker решает, что если нужно общаться с 192.168.0.1, исходный IP должен быть из этой подсети, и отправляет пакеты с src IP 192.168.0.7. Когда они попадают в интернет, принимающие хосты не знают, как ответить.

    Чтобы исправить это, мы назначили публичный IP нашему хосту Proxmox. У нас был блок /28, но, вероятно, это работает и для отдельных IP. В качестве примера используем IP-адреса с https://help.ovhcloud.com/csm/es-es...ticle=KB0043912#configure-a-usable-ip-address:

    - 46.105.135.110 — для хоста proxmox  
    - 46.105.135.101 — для виртуальной машины  

    Чтобы добавить второй IP в мост vmbr0, мы дописали (не заменили) этот блок в /etc/network/interfaces на хосте proxmox:  
    Код:  
    auto vmbr0  
    iface vmbr0 inet static  
           address 46.105.135.110/28  

    и перезапустили сеть командой systemctl restart networking.service.

    В нашей ВМ (Ubuntu) мы настроили netplan так, в файле /etc/netplan/01-eth0.yaml:  
    Код:  
    network:  
     version: 2  
     ethernets:  
       eth0:  
         addresses:  
           - 46.105.135.101/28  
           # в нашем случае следующая строка опциональна и может быть удалена  
           - 192.168.0.7/24  
         nameservers:  
           - [1.1.1.1]
         routes:  
           - to: default  
             via: 46.105.135.110  

    затем применили netplan apply.

    Главное изменение — параметр via теперь указывает на публичный IP proxmox-хоста. Мы проверили, пингуя google как из ВМ, так и из одного из контейнеров docker (второй пинг бы упал со старой конфигурацией):  
    Код:  
    ping 8.8.8.8  
    docker exec -it container-name ping 8.8.8.8  

    P.S. Забыл добавить, что я включил ip forwarding и на хосте proxmox, и в ВМ, но думаю, это не особо важно:  
    В /etc/sysctl.conf добавьте:  
    Код:  
    # Включить ip_forward  
    net.ipv4.ip_forward = 1
     
     
     
    podo_
    Guest
    #8
    0
    12.09.2024 12:04:00
    Привет, все очень понятно. Я пробовал с дополнительными отдельными IP-адресами, но, похоже, если они не в одной подсети, то это невозможно. Конечно, решение, наверное, есть, но использование блока тоже упрощает нам задачу для будущих требований. Большое спасибо, что поделился со мной своим решением и сделал все очень понятным.
     
     
     
    kartr
    Guest
    #9
    0
    15.09.2024 18:53:00
    Вот решение для всех, кто ищет. У моего гипервизора локальный IP 192.168.0.1, а для каждой ВМ я использую 192.168.0.2, 192.168.0.3 и так далее. На гипервизоре Proxmox используйте такую конфигурацию:

    Код:
    auto lo  
    iface lo inet loopback  
     
    auto enp8s0f0np0  
    iface enp8s0f0np0 inet static  
       address PUBLIC_IP_OF_THE_HYPERVISOR/32  
       gateway 100.64.0.1  
       post-up echo 1 > /proc/sys/net/ipv4/ip_forward  
       post-up echo 1 > /proc/sys/net/ipv4/conf/enp8s0f0np0/proxy_arp  
       post-up iptables -t nat -A POSTROUTING -s 192.168.0.2/32 -j SNAT --to-source PUBLIC_IP_OF_VM1  
       post-up iptables -t nat -A POSTROUTING -s 192.168.0.3/32 -j SNAT --to-source PUBLIC_IP_OF_VM2  
     
    iface enp8s0f0np0 inet6 static  
       address 2001:41d0:24c:bf00::/56  
       gateway fe80::1  
     
    auto vmbr0  
    iface vmbr0 inet static  
           # Определяем частный IP, он не должен пересекаться с вашими другими частными сетями, например в vrack  
           address 192.168.0.1/24  
           bridge-ports none  
           bridge-stp off  
           bridge-fd 0  
           up ip route add PUBLIC_IP_OF_VM1/32 dev vmbr0  
           up ip route add PUBLIC_IP_OF_VM2/32 dev vmbr0  

    На каждой ВМ используйте такую конфигурацию:

    Код:
    # Это сетевая конфигурация, сгенерированная 'subiquity'  
    network:  
     version: 2  
     ethernets:  
       ens18:  
         dhcp4: false  
         addresses:  
           - 192.168.0.2/24  
           - PUBLIC_IP_OF_VM1/32  
         nameservers:  
           addresses: [1.1.1.1, 8.8.8.8]
         routes:  
           - to: default  
             via: 192.168.0.1  
             from: PUBLIC_IP_OF_VM1  

    Не забудьте выключить ВМ, перезапустить сеть на гипервизоре, а потом снова включить ВМ.
     
     
     
    mjwhite10
    Guest
    #10
    0
    16.09.2024 00:58:00
    О, это хитро. Значит, ты включаешь NAT на гипервизоре и меняешь исходящий адрес у каждого пакета, который пытается выйти в интернет через интерфейс (enp8s0f0np0) с внутренним IP (192.168.0.X), на его публичный IP. Когда пакет доходит до места назначения и им нужно ответить, они просто используют этот публичный IP, потому что... ну, это же публичный IP. В итоге ответный пакет приходит на нужную виртуальную машину обычной маршрутизацией, и привычные правила NAT для входящих пакетов не нужны.
     
     
     
    mlgd
    Guest
    #11
    0
    01.04.2025 18:22:00
    Я попробовал ваше решение на Debian 12, но оно не сработало с OVH Advanced Server. Можете помочь?
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры