我有以下设置:
- 具有多个子网的 AWS VPC
- EC2 实例上的 Docker Swarm 单节点
- AWS 负载均衡器将 HTTP/HTTPS 流量路由到各种服务器(包括 EC2 实例)
- OpenVPN Docker 容器(桥接网络,将端口绑定到主机),在 EC2 实例上运行
- Docker Swarm 中的 Traefik v1.7 在 EC2 实例上运行多个前端
我想要实现的目标:
需要通过 VPN 访问 Traefik Frontends 的子集。
我在 AWS 上还有其他服务(例如 RDS),其 SecurityGroup 配置为仅允许从子网(VPC 的子网)内部访问,运行良好。当我断开与 VPN 的连接时,我无法访问它们,反之亦然。
但是,当尝试在 Traefik 中添加具有源范围限制的白名单时,无论我是否在 VPN 内部,我总是收到 403 错误。
我对入口点使用以下配置:
Name:http
Address::80
ProxyProtocol.TrustedIPs:172.31.16.0/20,172.31.20.0/20
ForwardedHeaders.TrustedIPs:172.31.16.0/20,172.31.20.0/20
WhiteList.UseXForwardedFor:true
我在目标容器上添加了以下限制:
traefik.frontend.whiteList.sourceRange=172.31.16.0/20,172.31.20.0/20
Traefik 日志显示以下内容:
VPN 请求 -> EC2 实例的 IP(对互联网公开)
非 VPN 请求 -> 我的机器/互联网提供商的 IP
当我将源范围更改为 EC2 服务器实例 IP 的 IP 时,一切都按预期工作,但是,我更喜欢允许我使用子网范围的解决方案(以防添加新服务器)。