我正在运行一个 Ubuntu 服务器(server-box),它运行一个 LXD 容器(lxd-box),LXD 正在使用我设置的以太网桥这指南。lxd-box 正在运行 VirtualBox (vbox-box) 的一个实例。server-box、lxd-box 和 vbox-box 都运行 Ubuntu 16.04 服务器。vbox-box 正在使用 VirtualBox 的以太网桥接功能桥接到 lxd-box 上的 eth0,而 eth0 本身又桥接到 server-box 上的 enp5s0。
这三个客户端都从 LAN 获得了一个 IP 地址。这三个客户端都可以与任何其他 LAN 客户端通信。此外,lxd-box 可以与 server-box 和 vbox-box 正常通信。但是,vbox-box 和 server-box 无法通信。具体来说,我无法在它们之间发起双向 ssh 会话,但我可以发起往返 lxd-box 的会话。这不仅仅是 ssh,我还在少数几个端口上进行了测试,仅使用 netcat 发起原始 TCP 连接。行为相同。ssh 更方便。
有人知道为什么会发生这种情况吗?我认为这与发生的多重桥接有关,但我不确定。更重要的是,有人知道如何解决这个问题吗?
答案1
我遇到了类似的问题(尽管与您的情况略有不同)并且最终解决了。
我认为当有 2 个桥接器时,第一个是 lxd 桥接器,第二个是虚拟盒创建的桥接器,您可以通过 tuntap 设备将它们连接起来。
以下是详细信息
设想:
- ubuntu 16.04,具有:
- lxd 2.0(带有 lxdbr0)及其中的几个容器
- 虚拟机
在我的 VirtualBox 配置中,我提供了网络适配器并将其连接到桥接适配器,选择 lxdbr0。它似乎可以工作,但后来我发现了和你一样的问题,无法 ssh 到 ubuntu 主机,无法 ssh 到 lxc 容器(在同一桥上)等等……
在网上搜索后(抱歉我无法提供链接)我找到了这个解决方案。
在 ubuntu 16.04 机器上,具有 root 权限:
root@ubuntu:~# ip tuntap add mode tap tap0
root@ubuntu:~# ip link set tap0 up
root@ubuntu:~# brctl addif lxdbr0 tap0
root@ubuntu:~# brctl show
bridge name bridge id STP enabled interfaces
lxdbr0 8000.4e76f4d676d5 no tap0
将 tap0 添加到桥接器后,您可以设置虚拟机“桥接适配器类型连接”以连接到 tap0(已在另一个桥接器中)。
看来你应该桥接到一个接口而不是桥接到一个桥。
在您的场景中,您应该在 lxd-box 中创建 tap0。此 tap0 将添加到 2 个桥接器,一个在 lxd 上,另一个在 virtualbox 上。
答案2
以 @ayito 的回答为基础,您还可以制作持久设备。使用 root 权限tap0
编辑并添加:/etc/network/interfaces
iface tap0 inet manual
pre-up ip tuntap add mode tap tap0
up ip link set tap0 up
post-up brctl addif lxdbr0 tap0
pre-down brctl delif lxdbr0 tap0
down ip link set tap0 down
post-down ip link del tap0
保存后,运行sudo ifup tap0
要验证它是否已开始运行brctl show
。您应该看到tap0
一个界面lxdbr0
。
每次重新启动计算机并想要使用该界面时,请运行sudo ifup tap0
注意:您也可以将其添加为启动脚本,但它必须在lxdbr0
启动后运行。
在 Virtualbox 中,使用“桥接适配器”连接到tap0
:
现在您应该能够与您的 LXD 容器通信,并tap0
在重启后轻松设置界面。