![使用静态 IP 设置桥接 LXC 容器](https://linux22.com/image/625996/%E4%BD%BF%E7%94%A8%E9%9D%99%E6%80%81%20IP%20%E8%AE%BE%E7%BD%AE%E6%A1%A5%E6%8E%A5%20LXC%20%E5%AE%B9%E5%99%A8.png)
我正在尝试在主机上设置多个 LXC 容器,每个容器都有自己的公共静态 IP。
我的主机运行的是最新的 Ubuntu。它有一个名为 eth0 的网络接口。静态 IP 可从互联网 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 的子网配置。
说到容器的接口文件,它看起来有点像:
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 ,新的下一跳。数据包只是从网关反复发送到主机。从主机运行跟踪路由显示第一站是网关。然后所有其他路线都是 * * *。无论容器是否在线,我都会遇到同样的问题。
答案1
事实上你能设置地址和网关之内这主持人并使用关键字配置容器完全不接触界面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 已经设置了界面并使用它一样。
答案2
由于您正在桥接,因此您需要在容器中设置 IP 地址仅有的,而不是主机。主机应该只具有它自己的IP 地址。
答案3
我发现最好的、最快的方法是使用 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 地址就会设置为该容器
答案4
按照@Enrique Moreno Tent 的回答后,我可以正确设置我的 lxc 容器,所以如果您不知道如何设置其他项目,我将更详细地解释该怎么做。
lxc-attach
1.通过命令访问你的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.8
它8.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