将静态 IP 和 NAT 流量设置为 LXC 容器

将静态 IP 和 NAT 流量设置为 LXC 容器

这是我在这里的第一个问题,因此,与通常的嫌疑人相比,我的结构很糟糕,请大家原谅。:-)

我希望能够通过 TCP 在 LXC 容器中接收实际连接客户端 IP。目前,使用连接的网桥的当前配置无法实现这一点,默认分配动态 IP 地址,并且使用 LXD 网络类型代理路由流量。

设置

  • Ubuntu 18.04 LTS。
  • LXD 作为 SNAP 安装(迁移至 v. 4.1)。
  • HAProxy 作为原生应用程序安装。
  • 范围内的容器与 HAProxy 在同一主机上运行。

容器

  • Ubuntu 18.04
  • Apache2(提供 Nextcloud 安装)。
  • HTTPS 在容器中的 Apache2 中终止

HAProxy 将 SSL 流量传递到容器而不终止它,但是通过使用 req_ssl_sni 检查连接标头来实现这一点。HAProxy 还支持 TCP 流的代理协议(我相信是 v2),因为它可以将客户端 IP 添加到 TCP 标头,以便任何下游代理或应用程序(也理解协议的这一部分)都可以在连接到达实际的 Web 服务器配置之前从标头中提取该 IP。这也适用于启用和配置了正确模块的 Apache2,但如果在 LXD 代理后面,则不行。即使我添加了 proxy_protocol=true,它也只能理解 HTTP 连接,因为它可以在那里访问和读取 HTTP 标头(转发)。

我可以通过将连接的网络设备更改为 NAT 类型来使其工作,这样 LXD 网桥就不会充当反向代理,而只是执行“老式”端口转发。但是我没有足够的时间让它“永久”工作(被覆盖并且 conatiner 在重启后无法启动)。

问题是

如何为 LXD 网络配置设置 DHCP 范围、基于容器别名的固定 DHCP 分配,然后将正确的网络设备添加到容器,以便我在 HAProxy 中要路由到的只是 LXD 桥接地址(网关地址)?

请记住,LXD 已安装并快速运行,因此花哨的(优雅的)lxc-net 技巧很难实现。

答案1

当连接经过一组代理时,丢失客户端 IP 地址是一个常见且意料之中的问题。因为 IP 数据包仅保留最后一个源 IP 地址。

很难说你的具体情况是怎么回事。重要的是,这是可以做到的。这是一个使用 LXD 代理设备并用作nginx反向代理的教程,https://www.linode.com/docs/applications/containers/beginners-guide-to-lxd-reverse-proxy/如果您逐字逐句地尝试这样的教程,它将帮助您找出任何失误。

凭直觉,您的情况可能存在问题,因为 Apache2 已经失效,默认 LogFormat 未在 access.log 中记录正确的客户端 IP 地址。您需要将 更改为%h%a有关更多详细信息,请参阅上述教程。

相关内容