设置具有静态IP的桥接LXC容器


15

我正在尝试在主机上设置多个LXC容器,每个容器都有自己的公共静态IP。

我的主机正在运行最新的Ubuntu。它具有一个名为eth0的网络接口。静态IP可从Internet ping通,并命名为eth0:210,eth0:211 ...冒号后面的数字是地址的最低有效字节。除了这些接口,我还在主机的公共IP上设置了br0。还有lo,veth2LPP9A和lxcbr0接口。lxcbr0具有专用IP的地址。

主机/ etc / network / interfaces看起来像:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

到目前为止,我已经使用了各种在线资源,包括桥接LXC容器来托管eth0,以便他们可以使用公共IP来帮助我进行设置。

容器的配置文件具有:

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

我已经从该文件中删除了静态lxc.network.ipv4配置,因为它引起了问题。当我使用此配置运行lxc-ls --fancy时,我会在输出中看到两次相同的公用IP。另外,它将与容器的/ etc / network / interfaces的子网配置混淆。

说到容器的interfaces文件,它看起来有点像:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

我必须注释掉网关并将路由添加命令添加到此文件。否则,容器将需要几分钟来启动。

主机上的/ proc / sys / net / bridge / bridge-nf- *文件都设置为0。/ proc / sys / net / ipv4 / ip_forward值为1。

问题是,即使容器的“ route -n”看起来像应该的一样,我也无法从容器中ping出。SSH到应该是容器的IP的位置,将我连接到主机。

编辑:从主机删除容器的静态IP确实有帮助,但是现在我遇到了一个新错误。尝试从主机ping容器会导致Redirect HostFrom(新的下一跳)。数据包只是反复从网关发送到主机。从主机运行traceroute显示第一站位于网关。然后所有其他路线都是* * *。无论容器是否在线,我都会遇到相同的问题。

Answers:


17

事实上,你可以从设定的地址和网关主机和配置容器不使用关键字触摸界面在所有manual

放在客人内/etc/network/interfaces

auto eth0
iface eth0 inet manual

还要将其保留在容器的配置文件中以设置接口:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

来宾的行为就好像它的BIOS已经设置好接口并使用它一样。

特别探索lxc.network.ipv4.gateway


谢谢!这挽救了我的生命...我的容器将始终尝试获取新的dhcp地址...将其设置为容器内的固定值(静态)会导致容器甚至无法启动!
多米尼克多恩

请注意,如果主机已挂起并恢复,则此方法将无法正常工作。lxc继续其分配的IP地址,但主机认为它不再具有IP地址。我发现最好为lxc-net配置dnsmasq并在那里分发固定地址。
HRJ 2014年

@HRJ-您应在评论中添加“如何”或链接至参考,而不是仅仅说“做”。这是一个技术站点,您应该说一些实际有用的东西。
伊恩·

2
似乎正确的位置在/ etc / default / lxc中,您可以在其中设置范围(请参阅LXC_DHCP_RANGE),也可以在/etc/dnsmasq.d-available/lxc中(根据dnsmasq文档或联机帮助页进行操作)
Ian Macintosh


4

既然你是桥接,你需要在容器中设置的IP地址唯一,而不是在主机上。主机应仅具有自己的 IP地址。


2

前几天我是用Ubuntu 14.04做到的。很简单。您只需要编辑/etc/network/interfaces容器中的文件,并进行以下设置:

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

将每个变量替换为所需的值。

不要有做别的事情!

PS:注意一些行之前的空格。这是强制性的。


这导致我的容器不再启动(ubuntu 14.04服务器).. sebastianwagner的回答对我有用。
多米尼克多恩

2

我找到的最好方法也是最快的方法是使用lxc配置文件

lxc profile list -命令列出您拥有的所有配置文件然后

lxc profile copy default minecraft(这是新个人资料的名称)

然后 lxc profile edit minecraft

这会出现

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

然后保存

接下来像这样将配置文件分配给您的LXC容器

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

然后只需重新启动容器,并将您的新IP地址设置为该容器


1

在遵循@Enrique Moreno Tent的回答后,我可以正确设置我的lxc容器,因此,如果您不知道如何设置其他项目,我将更详细地说明如何做。

1.通过lxc-attach命令访问您的LXC容器

命令:

$ lxc-attach -n YOUR-CONTAINER-NAME

2.使用以下命令查看当前配置 ifconfig

命令

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

3.获取地址,网络掩码和网关

看到ifconfig上面命令的结果,我们将看到:

地址是您想要的地址,您可以将其更改为10.0.3.166。

网络掩码在那里:255.255.255.0

网关:对于网关,您使用的广播地址是10.0.3.255

如上所示,您目前拥有填写来宾(容器)所需的所有信息/etc/network/interfaces

4.获得dns-nameservers价值。

发出命令:

cat /etc/resolv.conf

但是使用Google DNS可能是最好的选择8.8.8.88.8.4.4

5. /etc/network/interfaces在容器内编辑

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8


ifconfigip a在较新的debian / ubuntu版本linuxconfig.org/中
rvazquezglez
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.