需要配置第二个 NIC 来桥接 LXC
Need to configure second NIC to bridge LXC
我在一台有4个网卡的机器上安装了Ubuntu16.04 Server。我有接口 eth0
和 eth1
连接到同一个交换机。接口 eth0
用于远程 SSH 连接以管理服务器。我想使用 eth1
被 br0
桥接。我想将此桥用于 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
。我设法让它与很多路由技巧一起工作,但正如许多文章所写的那样,如果你有静态桥和容器,这种方式是一个更深的洞。
我的问题是:有人对我的问题有直接的方法吗?我应该如何配置 eth0
和 eth1
以使用静态 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
我在一台有4个网卡的机器上安装了Ubuntu16.04 Server。我有接口 eth0
和 eth1
连接到同一个交换机。接口 eth0
用于远程 SSH 连接以管理服务器。我想使用 eth1
被 br0
桥接。我想将此桥用于 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
。我设法让它与很多路由技巧一起工作,但正如许多文章所写的那样,如果你有静态桥和容器,这种方式是一个更深的洞。
我的问题是:有人对我的问题有直接的方法吗?我应该如何配置 eth0
和 eth1
以使用静态 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