Ребята, пытаюсь перейти с LXD на Proxmox, но столкнулся с проблемами.
Настройка:
Proxmox VE хост
Ubuntu 24.04
непривилегированный LXC-контейнер, в котором запущен Docker
Docker-стек: Pi-hole + Unbound + Gravity Sync + Nebula
Режим сети Docker: host
Сеть LXC: мост (vmbr0)
Вторичный IP Pi-hole: 192.168.50.160
Основной Pi-hole: работает нативно в непривилегированном контейнере LXD на другом хосте — всё идеально
Проблема:
DNS-трафик (UDP/53) не проходит, когда Pi-hole запускается внутри Docker в непривилегированном LXC.
Изнутри LXC на Proxmox (хоста Docker-контейнера):
dig @192.168.50.160 google.com — таймаут
nslookup google.com 192.168.50.160 — таймаут
nslookup pi.hole 192.168.50.160 — работает
С Proxmox хоста:
nslookup pi.hole 192.168.50.160 — работает
dig @192.168.50.160 pi.hole — работает
dig @192.168.50.160 google.com — таймаут
С LAN-клиентов:
nc -vuz 192.168.50.160 53 — успешно (UDP порт открыт)
Но запросы DNS с LAN по-прежнему таймаутятся.
Наблюдения:
Веб-интерфейс Pi-hole доступен из LAN, значит с TCP всё в порядке.
tcpdump показывает, что DNS-запросы уходят с Proxmox хоста, но UDP-ответы не возвращаются из контейнера.
Внутри LXC видны только локальные DNS-запросы, внешние к нему не доходят.
Возможная причина:
Входящий UDP-трафик к Docker-сервисам внутри непривилегированных LXC-контейнеров полностью не проходит, даже при --network=host. Похоже, AppArmor или ограничения неймспейсов блокируют обработку UDP-ответов для Docker-контейнеров с host-сетью, что затрагивает конкретно DNS.
Вопросы:
Это известное ограничение Docker с --network=host внутри непривилегированных LXC на Proxmox?
Есть ли способ разрешить UDP (особенно порт 53), не делая LXC привилегированным — например, через профиль AppArmor, lxc.apparmor.profile или дополнительные capabilities?
Безопасно ли обойти эту проблему, переключив Pi-hole на macvlan или отдельную сетевую мостовую сеть?
Настройка:
Proxmox VE хост
Ubuntu 24.04
непривилегированный LXC-контейнер, в котором запущен Docker
Docker-стек: Pi-hole + Unbound + Gravity Sync + Nebula
Режим сети Docker: host
Сеть LXC: мост (vmbr0)
Вторичный IP Pi-hole: 192.168.50.160
Основной Pi-hole: работает нативно в непривилегированном контейнере LXD на другом хосте — всё идеально
Проблема:
DNS-трафик (UDP/53) не проходит, когда Pi-hole запускается внутри Docker в непривилегированном LXC.
Изнутри LXC на Proxmox (хоста Docker-контейнера):
dig @192.168.50.160 google.com — таймаут
nslookup google.com 192.168.50.160 — таймаут
nslookup pi.hole 192.168.50.160 — работает
С Proxmox хоста:
nslookup pi.hole 192.168.50.160 — работает
dig @192.168.50.160 pi.hole — работает
dig @192.168.50.160 google.com — таймаут
С LAN-клиентов:
nc -vuz 192.168.50.160 53 — успешно (UDP порт открыт)
Но запросы DNS с LAN по-прежнему таймаутятся.
Наблюдения:
Веб-интерфейс Pi-hole доступен из LAN, значит с TCP всё в порядке.
tcpdump показывает, что DNS-запросы уходят с Proxmox хоста, но UDP-ответы не возвращаются из контейнера.
Внутри LXC видны только локальные DNS-запросы, внешние к нему не доходят.
Возможная причина:
Входящий UDP-трафик к Docker-сервисам внутри непривилегированных LXC-контейнеров полностью не проходит, даже при --network=host. Похоже, AppArmor или ограничения неймспейсов блокируют обработку UDP-ответов для Docker-контейнеров с host-сетью, что затрагивает конкретно DNS.
Вопросы:
Это известное ограничение Docker с --network=host внутри непривилегированных LXC на Proxmox?
Есть ли способ разрешить UDP (особенно порт 53), не делая LXC привилегированным — например, через профиль AppArmor, lxc.apparmor.profile или дополнительные capabilities?
Безопасно ли обойти эту проблему, переключив Pi-hole на macvlan или отдельную сетевую мостовую сеть?
