Назад | Перейти на главную страницу

Доступ к контейнеру LXC из гостя виртуального бокса на том же хосте

Контекст

Раньше он работал «из коробки», но несколько недель назад просто перестал. Я предполагаю, что после обновления Ubuntu, но было ли это LXC, или Virtualbox, или даже «сетевое обновление»? Я не могу сказать, потому что я не запускаю эти тесты каждый день.

¹ Подделывать различные сложные платформы и использовать только необходимые мне ресурсы.

² Протестировать их в браузерах Windows.

Вопрос :

Как мне настроить мои сетевые конфигурации Virtualbox / LXC / host для доступа к веб-сайтам в контейнерах LXC из гостевой Virtualbox?

Что я сделал до сих пор

Моя текущая настройка виртуального бокса - иметь 2 сетевые карты.

Странная вещь: я могу пинговать контейнеры LXC с виртуальной машины Windows, но не могу получить к ним доступ по HTTP (браузеры или telnet на 80-м порту).

На пинг реагируют только реально запущенные контейнеры.

Я пробовал множество других установок, но я больше «догадываюсь», чем понимаю, что происходит.

Мой текущий обходной путь

Я настраиваю переадресацию порта на своем хосте с помощью iptables, как я бы сделал, чтобы сделать контейнер доступным для всей сети (это на самом деле то, что он делает).

Когда я это сделаю, я могу получить доступ к перенаправленному контейнеру из виртуальной машины Windows.

Но это определенно не чистое решение:

Следуя предложению пользователя 228273, я смог найти конфигурацию, которая решила проблему: сначала я создал интерфейс касания с именем tap0 и поднял его:

ip tuntap add mode tap tap0
ip link set tap0 up

если одна из предыдущих команд не работает, вероятно, это потому, что у вас уже есть tap0 интерфейс. Используйте команду

ip link show

чтобы оценить ситуацию и в конечном итоге изменить имя интерфейса. Теперь вы можете добавить tap0 интерфейс к мосту по умолчанию, который в Ubuntu называется lxcbr0.

brctl addif lxcbr0 tap0

Затем я настроил свой VirtualBox на использование «мостового адаптера» в интерфейсе. tap0 как показано ниже:

И тогда экземпляр VirtualBox и LXC могут «видеть» друг друга.

Обновление 2019 : Если вы используете NetworkManager, вы можете сделать это дополнение с помощью nmcli:

nmcli connection add type tun ifname tap0 con-name tap0 mode tap master lxcbr0

Была точно такая же проблема. Почти наверняка «виноват» VirtualBox, который, кажется, по-своему использует мостовые сети, вероятно, в том, чтобы оставаться последовательным на различных платформах (Mac, Solaris и тому подобное). Свидетельство:

  • Мостовые сетевые интерфейсы VBox не появляются в "brctl show" (как и LXC veth's)
  • в документации указано: «VirtualBox использует драйвер устройства в вашей хост-системе, который фильтрует данные с вашего физического сетевого адаптера».

Действительно странно, что ICMP проходит, но TCP (и, вероятно, другие) не ...

Однако в документации также указано, что «вы все еще можете использовать интерфейсы TAP для определенных расширенных настроек», поэтому я исследовал возможность подключения нового TAP к моему мосту:

# ip tuntap add mode tap
# brctl addif brY tapX
# ip link set tapX up

Затем скорректировал настройки сети VBox, чтобы использовать tapX вместо brY, и все прошло хорошо (после перезагрузки гостя).

Поэкспериментировал с двумя гостями, использующими один и тот же tapX, не уверен, что это так хорошо работает. Наверное, безопаснее всего использовать одно нажатие для каждого гостя VBox.

Если вы можете пропинговать цель, но не можете получить там доступ к приложениям, то это почти наверняка проблема iptables.

Я предполагаю, что в процессе обновления вы получили системный флаг "net.bridge.bridge-nf-call-iptables = 1" отметился в /etc/systcl.conf.

Если это так, я бы не отказывался от него, а вместо этого пересмотрел настройку iptables.