通过WireGuard、Caddy和Docker无法访问本地网络服务的求助
大家好!我现在碰到了个头疼的网络配置问题,折腾好几天都没搞定,想请各位大佬帮忙分析下。
我的核心需求是:通过自己的域名(example.com)访问本地局域网(192.168.1.0/24)里的Docker服务,但目前只能正常访问VPS上的WireGuard UI(wgui.example.com),本地的服务完全连不上。
另外提一下我的配置思路:除非像Vaultwarden这种必须特殊处理的服务,否则我希望TLS终止在VPS上,然后通过WireGuard隧道用HTTP协议和本地网关机器通信。
系统架构
我这边的架构逻辑是:VPS上部署了WireGuard服务器和Caddy反向代理,通过WireGuard隧道和本地局域网的网关机器建立连接,本地网关负责把请求转发到192.168.1.0/24网段内的各个Docker服务。
已配置的内容
WireGuard配置
VPS端WireGuard服务器(wg0.conf)
[Interface] Address = 10.1.10.1/24 ListenPort = 51820 PrivateKey = (Server PrivateKey) MTU = 1450 PostUp = /opt/wireguard-ui/postup.sh PreDown = PostDown = /opt/wireguard-ui/postdown.sh Table = auto [Peer] PublicKey = (Client PublicKey) PresharedKey = (Client PSK) AllowedIPs = 10.1.10.3/32 PersistentKeepalive = 25
本地网关WireGuard客户端
本地网关已经和VPS的WireGuard服务器成功建立连接,客户端的WireGuard地址是10.1.10.3/32,目前能和VPS的10.1.10.1正常ping通。
反向代理与Docker
我在VPS上用Caddy做反向代理,配置思路是把域名请求(比如service.example.com)转发到WireGuard隧道内的本地网关地址+对应端口,然后由本地网关转发到192.168.1.0/24里的Docker服务。但目前这种配置下,请求到VPS后就断了,根本到不了本地服务。
我已经排查过的点:
- WireGuard隧道本身是通的,VPS和本地网关的WireGuard地址互相ping得通
- VPS上的本地服务(比如WireGuard UI)能正常通过域名访问,说明Caddy的反向代理基础配置没问题
- 本地网关能正常访问192.168.1.0/24里的所有Docker服务,排除了本地服务本身的问题
有没有大佬能帮我看看哪里配置漏了?或者有没有其他排查方向可以建议的?比如WireGuard的AllowedIPs是不是要加本地网段?Caddy的转发配置有没有特殊要求?
备注:内容来源于stack exchange,提问作者tripleqmark

