如何为LXC guest配置外部IP地址?

如何为LXC guest配置外部IP地址?

我正在探索 Ubuntu 12.04 中的 LXC 功能,我真的想建立一个像这样的网络:

client1:   192.168.56.101/24
lxc-host:  192.168.56.102/24
guest1     192.168.56.201/24
guest2     192.168.56.202/24
guest3     192.166.56.203/24

我只想要一个“扁平”网络,客人可以完全访问 LAN 并且对客户端可见。我习惯于使用 libvirt/KVM 桥接网络,如下所述:http://libvirt.org/formatdomain.html#elementsNICSBridge

在主机上:

# /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.56.102
    netmask 255.255.255.0
    broadcast 192.168.56.255
    bridge_ports eth1

第一个客人的 lxc.conf:

# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24

看起来 192.168.56.201 对外界来说是不可见的,这不是我想要的。看来我必须做以下事情之一:

1)在主机和来宾上手动设置路由

2)做一些做作的事情...提前在主机上创建虚拟接口,并配置来宾使用它们lxc.network.type=phys。我不知道这是否真的有效。

我专注于 Ubuntu,但 RHEL/Fedora 的答案也很有用......

答案1

这几乎是正确的——尽管你漏掉了这样一行:

lxc.network.ipv4.gateway = X.X.X.X

我有一个在 Debian 上运行的 LXC 客户机。首先,您设置主桥(简单的方法),在/etc/network/interfaces

auto wan
iface wan inet static
        address 72.X.X.X
        netmask 255.255.255.0
        gateway 72.X.X.1
        bridge_ports wan_phy    # this line is important.
        bridge_stp off
        bridge_fd 2
        bridge_maxwait 20

就你而言,你称之为br0,我也称之为wan。这座桥可以被称为任何你想要的名字。你首先要让这个工作正常——如果失败,请使用(例如,)进行调查brctl

然后你的 LXC 配置被设置为加入该桥:

lxc.utsname = FOO
lxc.network.type = veth
lxc.network.link = wan                  # remember, this is what I call my bridge
lxc.network.flags = up
lxc.network.name = v-wan                # optional, I believe
lxc.network.ipv4 = 72.X.X.Y/24          # different IP than the host
lxc.network.ipv4.gateway = 72.X.X.1     # same as on the host

正如 HoverHell 所指出的,容器中拥有 root 权限的人可以更改 IP 地址。是的。它是一个网桥(又名以太网交换机)。如果你想防止这种情况发生,你可以在主机上使用防火墙规则——至少在我的例子中,数据包需要通过主机的 iptables。

答案2

我还没有完全进入LXC,

但我已经设置了多个容器,在局域网中有自己的静态IP,它们为我的一些网站提供互联网服务...

也许这可以帮助您实现您的愿望。

我运行多个容器,就像这样,

在主机上,我编辑了主机的文件,添加每个容器和主机: vi /etc/hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

保存后...

再次,在主机上我将网络和桥接设置为:

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

上面的网络是我的路由器IP,用于局域网。 (内部的) 地址和广播是主机,内部IP,我后来使用VHOST来访问互联网,网络服务器,FTP等。

对于 LXC 容器 1-4,我像这样设置配置:

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

现在容器1 IP = 192.168.1.101

我重复一遍,让其他容器在 LAN 上拥有自己的静态 IP。

在容器1-4中,

从主机登录:

lxc-console -n CONTAINERNAME,

我将每个容器网络设置为静态,将 eth0 设置为:

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

每个容器都有自己的 IP(本地),可在 LAN 上使用。您可以通过 SSH 连接每个单独的本地 IP,以使用 Putty 进行测试!

之后我很确定你应该弄清楚如何通过互联网运行它们,例如,虚拟主机到容器IP /负载均衡器/代理/等等。

也许这个设置无论如何都能有所帮助。

答案3

我还没有玩过 LXC,但是这篇文章应该可以帮助你:使用以太网桥进行网络配置(检查方法 2)。

给你一些关于配置的提示(我假设你已经正确配置了 br0):

  1. 您需要使用以下命令创建一对 veth 设备ip link add type veth
  2. 上一条命令创建了 2 个虚拟接口:veth0 和 veth1
  3. 现在将虚拟接口 veth0 添加到网桥:brctl addif br0 veth0
  4. 在您的 lxc shell 中,输入:ns_exec -nm -- /bin/bash
  5. 现在我们必须将另一个虚拟 if 设置为 lxc shell 的网络命名空间:ip link set veth1 netns PID_OF_LXC_SHELL
  6. 现在,通过在 lxc shell 中将 veth1 配置为您想要的 IP 地址(例如 192.168.56.201),您应该已准备就绪。

答案4

LXD 客户端 CLI,lxc允许设置网络接口类型;将其设置macvlandefault配置文件。

lxc profile device set default eth0 nictype macvlan

使用配置文件的容器default将有一个 LAN IP。

相关内容