AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 759381
Accepted
pleasedesktop
pleasedesktop
Asked: 2016-02-24 23:02:53 +0800 CST2016-02-24 23:02:53 +0800 CST 2016-02-24 23:02:53 +0800 CST

如何使局域网可以访问 lxd 容器

  • 772

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

我想实现同样的功能,但我不想使用 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/

……但这无济于事。原来的主机接口之后应该有一个IP吗?因为当我尝试手动桥接时它不会。

编辑 2

如果有帮助,我的 lxd/lxc 主机是运行 Ubuntu 的 Virtualbox 虚拟机,设置了与我的物理以太网 NIC 的桥接网络。

编辑 3

如果我使用 tcpdump 监控桥接接口、物理/主机接口和容器/虚拟接口上的 icmp 流量,只有容器/虚拟接口没有任何流量。其他两个可以。

编辑 4

根据本指南:

http://www.microhowto.info/troubleshooting/troubleshooting_ethernet_bridging_on_linux.html

我的网桥设置没有问题。

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

我觉得它与路线有关。

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

编辑 5

使用 tcpdump 监控 arp 流量,表明 arp 流量实际上正在到达容器/虚拟接口。

所以只是icmp流量不是。

编辑 6

如果我在容器中设置了一个静态 IP(通过 /etc/network/intefaces*),那么我就可以从主机(这是一台 Virtualbox 机器)对容器进行 ping 操作。

如果我随后更改 Virtualbox 中的网络配置以允许混杂流量,那么我可以从我的物理机(Virtualbox 机器的主机)ping 容器。然而,从这里,我仍然无法从容器内 ping 到我的物理 LAN 之外。

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

route add default gw 192.168.0.1 eth0

这允许我从容器内部 ping 物理 LAN 外部。

因此,除非其他人可以提供解释(我会在发布答案之前等待),否则我猜测缺少容器 DHCP 支持(通过桥接)与 lxc/lxd 使用 netmasq 处理 DHCP 的事实有关(和 DNS)。

ip
  • 3 3 个回答
  • 9483 Views

3 个回答

  • Voted
  1. Best Answer
    pleasedesktop
    2016-02-29T00:22:53+08:002016-02-29T00:22:53+08:00
    1. 如果您的 LXD 主机实际上是虚拟机,请确保将虚拟机的网络适配器配置为混杂模式,以便 LXD 容器流量从物理网络传递到虚拟网络。
    2. 在 lxd 容器中设置静态 IP 地址,因为 DHCP(来自您的物理网关)似乎不起作用。

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

    • 2
  2. drookie
    2016-02-24T23:37:12+08:002016-02-24T23:37:12+08:00

    您需要创建一个桥接接口,您的主机操作系统接口将是其中的一个分支,然后将 lxc 容器附加到该桥接 - 这样您将获得正确的桥接连接。

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

    lxc.network.type = veth
    lxc.network.flags = up
    lxc.network.link = br0
    

    虽然您的操作系统桥配置实际上是特定于发行版的。

    • 1
  3. Greg Bray
    2018-03-01T14:38:32+08:002018-03-01T14:38:32+08:00

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

    如果您使用默认的 lxdbr0 网桥并且想要更改容器的网关,您可以使用raw.dnsmasq设置。它通常会设置为您在配置网桥时用于 lxd 主机的 IP,但可以使用以下命令进行更改dhcp-option=3:

    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 数据包。此时,您的容器应该能够 ping 该主机上的其他 IP,但无法访问网络上的其他任何内容。这是因为网络的其余部分没有关于如何返回以容器子网为目的地的数据包的路由信息​​。

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

    • 0

相关问题

  • 共享服务器IP

  • Windows 中执行反向 DNS 查找的命令行实用程序是什么?

  • 如何找到 ubuntu 盒子的默认网关

  • 我怎样才能得到一个网站的IP地址?

  • 如何让我的计算机将自己称为 192.168.1.* 上的任何 ip?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve