为什么我要本地路由到容器以及如何做得更好?

为什么我要本地路由到容器以及如何做得更好?

我正在新站点设置新服务器。服务器位于路由器/防火墙后面。服务器将运行多个 LXC 容器以提供各种服务。LXC 容器连接到网桥brlxc。此外,服务器还使用 OpenVPN 连接到另一个站点,该站点位于桥接到服务器 NIC 的另一个 LXC 容器中。由于旧设置存在问题,我们的目标是将路由和防火墙功能放入专用的外部路由器中。

我们最终得到如下结果:

Router:    10.1.1.1
Server:    10.1.1.2
OpenVPN:   10.1.2.2 (bridged with 10.1.1.2 NIC and connected to router)
brlxc:     10.1.3.1 (on server)
Container: 10.1.3.2 (on brlxc)
Ext-Site:  10.2.0.0/16 (via 10.1.2.2)

物理上,路由器盒通过单根电缆连接到服务器。

服务器和 OpenVPN 客户端接收 10.1.1.1 作为默认路由;服务器上的容器为 10.1.3.1。路由器 10.1.1.1 有一条路由通过 10.1.2.2 发送 10.2.0.0/16,一条路由通过 10.1.1.2 发送 10.1.3.0/24,目前有 10.1.0.0/16 作为 LAN。

我注意到的第一件令人费解的事情是,我需要通过 10.1.2.2 将 10.2.0.0/16 作为服务器上的静态路由。否则,路由器会发送 ICMP 重定向,连接就会中断。

添加第一个 LXC 容器后,我需要通过 10.1.1.2 将 10.1.3.0/24 添加到 OpenVPN 客户端。

虽然设置所有这些路由并最终在服务器上定义防火墙规则并不困难,但这不符合我的设计目标,即让路由器进行路由和防火墙,并让服务器运行服务。

我想应该有更好的方法,但我似乎忽略了一些要点。如果能得到一些指导,我将不胜感激。

答案1

我找到了发布问题的解决方案。我现在使用带标记的以太网接口连接到路由器,并使用该eth0.VLAN接口将 VLAN 分发到没有主机地址的网桥。

auto brvlanX
iface brvlanX inet static
  bridge_ports eth0.vlanX
  bridge_fd 0
  bridge_nowait 0
  address 0.0.0.0

并且主机本身可以立即使用其 VLAN 接口。

这通过路由器路由主机的虚拟机/容器的所有流量,进而可以执行防火墙规则。

相关内容