首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使局域网访问lxd容器

如何使局域网访问lxd容器
EN

Server Fault用户
提问于 2016-02-24 07:02:53
回答 3查看 10.1K关注 0票数 3

如果我使用Virtualbox来旋转VM,我可以选择“桥接”作为网络适配器类型,这将导致来宾/虚拟NIC连接到我的物理LAN,从而从我的路由器(通过DHCP)获得一个LAN IP。

我想实现同样的功能,但我不使用Virtualbox,而是使用lxc/lxd容器。

我怎样才能做到这一点?

编辑1

我正在运行Ubuntu,我试着遵循这个指南:

https://insights.ubuntu.com/2015/11/10/converting-eth0-to-br0-and-getting-all-your-lxc-or-lxd-onto-your-lan/

...but,这没什么用。原来的主机接口之后应该有IP吗?因为当我尝试手动桥接的时候就没有了。

编辑2

如果有帮助的话,我的lxd/lxc主机是一个运行Ubuntu的Virtualbox虚拟机,它通过桥接网络连接到我的物理以太网NIC。

编辑3

如果我使用tcpdump来监视桥接接口、物理/主机接口和容器/虚拟接口上的icmp通信量,那么只有容器/虚拟接口没有任何流量。另外两个人有。

编辑4

根据本指南:

http://www.microhowto.info/troubleshooting/troubleshooting_以太网_桥接_在……上面_linux.html

我对我的桥梁设置没有问题。

然而,正如“编辑3”中所提到的,容器接口没有任何流量。我需要找出原因,但我不知道怎么.

我有一种感觉,它与路线有关。

容器没有路由,而主机有。

编辑5

使用tcpdump来监视arp流量,显示arp流量实际上正在到达容器/虚拟接口。

所以只有icmp的流量才不是。

编辑6

如果我在容器中设置了静态IP (via /etc/network/intefaces*),则允许我从主机(即Virtualbox机器)中对容器进行ping。

如果然后更改Virtualbox中的网络配置以允许杂乱的通信量,则可以从物理机器( Virtualbox计算机的主机)中ping容器。然而,从这里开始,我仍然无法在我的物理局域网之外,从容器中切换。

最后一步,如果我手动在容器中添加“默认”路由,如下所示:

route add default gw 192.168.0.1 eth0

这使我可以在容器内的物理LAN之外进行ping操作。

因此,除非其他人能够提供解释(我将在发布答案之前等待),否则我猜想缺乏容器DHCP支持(通过桥接)与lxc/lxd使用netmasq来处理DHCP (和DNS)有关。

EN

回答 3

Server Fault用户

回答已采纳

发布于 2016-02-28 08:22:53

  1. 如果您的LXD主机实际上是虚拟机,请确保将虚拟机的网络适配器配置为混杂模式,这样LXD容器流量就可以从物理传输到虚拟网络。
  2. 在lxd容器(S)中设置一个静态IP地址,因为DHCP (来自您的物理网关)似乎无法工作。

在我的第6次编辑中,我说我需要手动在容器中添加一个默认路由,但这不是真的。我只需要这样做,因为我忘记在/etc/network/interfaces文件中指定网关LAN地址。所以这不是LXD问题,只是不要忘记指定它。

票数 2
EN

Server Fault用户

发布于 2016-02-24 07:37:12

您需要创建一个桥接器接口,您的主机OS接口将是该接口的一个分支,然后将lxc容器附加到此桥上--这样您就可以获得适当的桥接连接。

容器配置的一部分如下所示:

代码语言:javascript
运行
复制
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0

而您的OS桥配置实际上是特定于发行版的。

票数 1
EN

Server Fault用户

发布于 2018-02-28 22:38:32

基本上,您需要的是容器使用默认网关将流量转发到网络的其他部分,以及路由器上可以转发到该系统的静态路由。这可能是您的lxd主机(在Linux中使用ip转发 ),或者您可以有一个专门的容器来处理路由(可能运行防火墙来限制可以访问哪个容器IP/端口)。

如果您正在使用默认的lxdbr0桥,并且希望更改容器的网关,则可以使用raw.dnsmasq设置。在配置桥接器时,通常会将其设置为用于lxd主机的IP,但可以使用dhcp-option=3进行更改:

代码语言:javascript
运行
复制
lxc network show lxdbr0
config:
  ipv4.address: 192.168.4.1/24
  ipv6.address: none
  raw.dnsmasq: dhcp-option=3,192.168.4.2
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/ubuntu-test
managed: true

然后重新启动容器时,可以看到使用ip route show的新网关。

一旦容器被设置为使用所需的默认网关,请确保系统设置为转发ip数据包。此时,您的容器应该能够在该主机上切换其他IP,但无法访问网络上的任何其他IP。这是因为网络的其他部分没有关于如何返回容器子网的数据包的路由信息。

如果这是一个位于路由器后面的家庭网络,您可以在您的家庭路由器上添加一个静态路由来告诉它在哪里发送这些数据包。如果lxd主机使用的静态IP为192.168.0.2,而容器使用的子网为192.168.4.0/24,则可以将该子网作为静态路由添加到主机.2主机IP作为网关。这将允许在您的容器和本地网络之间使用lxd主机作为两个网络之间的网关路由数据包。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/759381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档