我有一个 CentOS 7 盒子,上面有 2 个 NIC - 一个以太网端口和一个无线端口。我想创建一个充当路由器的 lxc 容器,它满足以下要求:
- 运行 hostapd 时,连接到接入点的客户端的所有数据都应通过此容器路由。
- 任何其他已安装的 lxc 容器也应通过此路由容器路由所有数据。
- 如果以太网端口连接到互联网,则主机和所有容器以及连接到接入点的任何客户端都应该可以访问互联网。
为了进行此配置,我进行了以下操作:
- 创建路由 lxc 容器
- 主机有接口 eth0 和 wlan0。我还创建了 br-eth0 和 br-wlan0(它们是网桥),并分别向它们添加了这两个接口。
- br-eth0 配置为 dhcp 客户端,通过 eth0 NIC 连接到我的外部路由器
- br-wlan0 有一个静态 IP 10.0.0.1,dnsmasq 正在监听该接口并在 10.0.0.0/24 子网中发布 IP 地址
- 我已经配置了 lxc 路由容器来创建 2 个连接到这些网桥的接口 (leth0、leth1)。leth0 是一个 dhcp 客户端,leth1 有一个静态 IP 地址 10.0.0.201。
- 我创建了另一个网桥 br-router,它也已连接到路由容器中的第三个接口。此网桥在主机中具有静态 IP 地址 192.168.3.254,路由容器(leth2)中的接口具有静态 IP 地址 192.168.3.1
- 路由容器也运行 dnsmasq,监听 leth2 接口,并提供 192.168.3/24 子网 (.3 - .200) 中的 IP 地址,因此引入此网桥的任何其他 lxc 容器都将被赋予该子网中的任意 IP 地址
- 我已经在路由容器中的 leth0 上开启了伪装。
- 我已将主机中的默认网关配置为 192.168.3.1,以便所有来自主机内部的流量都通过路由容器进行路由。
为了测试目的,我还创建了第二个 lxc 容器,该容器包含一个将 br-router 带入容器的单一接口,并且该容器在端口 8080 上托管一个网页。该单一接口(teth0)通过 dhcp 分配一个 IP 地址(在本例中为 192.168.3.9)
通过此设置,我可以从主机、路由容器和测试容器内成功访问互联网。此外,从路由容器和测试容器,我都可以 curlhttp://192.168.3.9:8080并成功检索网页。
因此,满足了要求 2 和 3。但是,当将客户端连接到此系统时,虽然我获得了 10.0.0.0/24 子网中的 IP 地址(通过在 br-wlan0 上运行的 dnsmasq),但我没有互联网连接(我意识到如果没有一些路由更改或其他东西,我将无法连接互联网,这就是我在这里的原因)。我还尝试使用 leth1 上的路由容器中的防火墙从端口 80 到 192.168.3.9:8080 进行一些端口转发,希望我可以使用http://10.0.0.201- 然而,没有这样的运气。(也就是说,这个端口转发尝试确实允许我通过主机的 201 地址访问该网站)
我确信路由更改、IP 表规则和端口转发规则的组合可以让这一切顺利进行,但经过几天的试验,我无论如何也想不出答案。在所有这些网络方面,我还是个新手,所以我希望有人能帮助我。希望我对当前配置的描述足够清楚。
谢谢!