需要配置第二个 NIC 来桥接 LXC

Need to configure second NIC to bridge LXC

我在一台有4个网卡的机器上安装了Ubuntu16.04 Server。我有接口 eth0eth1 连接到同一个交换机。接口 eth0 用于远程 SSH 连接以管理服务器。我想使用 eth1br0 桥接。我想将此桥用于 LXC 容器。 DHCP 环境中的此设置没有给我带来任何问题。挑战在于安装此服务器的网络是完全静态的。我收到此服务器的 IP 范围,具有相同的子网掩码和网关。

设置 eth0 没有问题:

auto eth0
iface eth0 inet static
   address   195.x.x.2
   network   195.x.x.0
   netmask   255.255.255.0
   gateway   195.x.x.1
   broadcast 195.x.x.255
   dns-nameservers 150.x.x.105 150.x.x.106

第二个接口 eth1 出现问题,因为它与 eth0 具有相同的网关 Ubuntu 警告只能设置一个默认网关(这是合乎逻辑的)。因此我设置了 eth1 如下:

auto eth1
iface eth1 net static
    address   195.x.x.3
    network   195.x.x.0
    netmask   255.255.255.0
    broadcast 195.x.x.255

此设置的问题是我可以在 IP 195.x.x.2 外部 ping eth0,但无法通过 SSH ping 或访问 eth1。我设法让它与很多路由技巧一起工作,但正如许多文章所写的那样,如果你有静态桥和容器,这种方式是一个更深的洞。

我的问题是:有人对我的问题有直接的方法吗?我应该如何配置 eth0eth1 以使用静态 IP 号码正常桥接容器到 eth1

好的,我通过以下方式解决了它,仍然按照问题中所述继续进行网关路由解决方案。也许有同样问题的人也可以使用这种方法,或者如果有人知道更好的解决方案,请随时发表评论。

在主机上:

我启用了 ARP 过滤:

sysctl -w net.ip4.conf.all.arp_filter=1
echo "net.ipv4.conf.all.arp_filter = 1" >> /etc/sysctl.conf

配置了 /etc/network/interfaces:

auto lo
iface lo net loopback

# The primary network interface
auto etc0
iface eth0 inet static
   address   195.x.x.2
   network   195.x.x.0
   netmask   255.255.255.0
   gateway   195.x.x.1
   broadcast 195.x.x.255
   up ip route add 195.x.x.0/24 dev eth0 src 195.x.x.2 table eth0table
   up ip route add default via 195.x.x.1 dev eth0 table eth0table
   up ip rule add from 195.x.x.2 table eth0table
   up ip route add 195.x.x.0/24 dev eth0 src 195.0.0.2
   dns-nameservers 150.x.x.105 150.x.x.106

# The secondary network interface
auto eth1
iface eth1 net manual

# LXC bridge interface
auto br0
iface br0 inet static
   address   195.x.x.3
   network   195.x.x.0
   netmask   255.255.255.0
   bridge_ifaces  eth1
   bridge_ports   eth1
   bridge_stp     off
   bridge_fd      0
   bridge_maxwait 0
   up ip route add 195.x.x.0/24 dev br0 src 195.x.x.3 table br0table
   up ip route add default via 195.x.x.1 dev br0 table br0table
   up ip rule add from 195.x.x.3 table br0table
   up ip route add 195.x.x.0/24 dev br0 src 195.0.0.3

/etc/iproute2/rt_tables 添加了以下行:

...
10 et0table
20 br0table

在容器配置文件 (/var/lib/lxc/[container name]/config):

...
lxc.network.type = vets
lxc.network.link = br0
lxc.network.flags = up
lxc.network.hwadr = [auto create when bringing up container]
lxc.network.ipv4 = 195.x.x.4/24
lxc.network.ipv4.gateway = 195.x.x.1
lxc.network.veth.pair = [readable server name] (when using ifconfig)
lxc.start.auto = 0 (1 if you want the server to autostart)
lxc.start.delay = 0 (fill in seconds you want the container to wait before start)

我通过在容器上启用apache2并从网络外部访问网页进行了测试。希望它能帮助遇到与我相同挑战的任何人。

PS:如果您选择让容器的配置文件分配 IP,请不要忘记在容器本身的接口文件中禁用它。

auto lo
iface lo inet loopback

auto eth0
iface eth0 net manual