Traefik 3配置问题:私有网络域名路由至wg-easy UI报404
问题分析与解决方案
你的配置出现404的核心原因有几个,同时还需要补充IP访问限制的配置,以下是具体修复方案:
关键问题点
- wg-easy UI仅监听本地:默认情况下wg-easy的UI可能只绑定127.0.0.1,导致Traefik无法从容器网络内访问到51821端口
- 缺少自定义Docker网络:虽然默认bridge网络能通信,但自定义网络更稳定,且能避免潜在的网络隔离问题
- 未配置IP访问控制:还没实现仅允许10.0.0.0/24网段访问的需求
- 可选:日志未开启:无法直观排查转发过程中的问题
修改后的完整配置
services: traefik: image: traefik:3.0 command: - "--log.level=DEBUG" # 开启debug日志,排查问题后可关闭 - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--providers.docker.network=traefik-net" # 指定自定义网络 - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entryPoint.scheme=https" - "--api.dashboard=false" - "--entryPoints.web.forwardedHeaders.trustedIPs=127.0.0.1/32,10.0.0.0/24" # 信任私有网段的转发头 # DNS挑战配置不变 - "--certificatesresolvers.leresolver.acme.dnschallenge=true" - "--certificatesresolvers.leresolver.acme.dnschallenge.provider=hetzner" - "--certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json" environment: - "HETZNER_API_KEY=${HETZNER_DNS_API_KEY}" ports: - ${PRIVATE_IPV4}:80:80 - ${PRIVATE_IPV4}:443:443 # 把443也绑定到私有IP,避免公网访问 volumes: - ./traefik/certs:/letsencrypt - /var/run/docker.sock:/var/run/docker.sock:ro restart: unless-stopped networks: - traefik-net # 加入自定义网络 wg-easy: image: ghcr.io/wg-easy/wg-easy:13 environment: - WG_HOST=<my-public-ip> - WEBUI_HOST=0.0.0.0 # 让UI监听所有接口,允许Traefik访问 - PORT=51821 cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1 volumes: - ./wg-easy:/etc/wireguard ports: - "51820:51820/udp" restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.wg_easy.rule=Host(`wg.my-domain.com`)" - "traefik.http.routers.wg_easy.entrypoints=websecure" - "traefik.http.routers.wg_easy.loadbalancer.server.port=51821" - "traefik.http.routers.wg_easy.tls=true" - "traefik.http.routers.wg_easy.tls.certresolver=leresolver" # 添加IP访问限制中间件 - "traefik.http.routers.wg_easy.middlewares=wg-ip-whitelist" - "traefik.http.middlewares.wg-ip-whitelist.ipwhitelist.sourcerange=10.0.0.0/24" networks: - traefik-net # 加入自定义网络 # 定义自定义Docker网络 networks: traefik-net: external: false name: traefik-net
配置说明
- 自定义网络:创建
traefik-net网络,让Traefik和wg-easy在同一网络内,确保Traefik能通过服务名wg-easy访问到容器的51821端口 - wg-easy接口监听:设置
WEBUI_HOST=0.0.0.0,让UI服务绑定容器所有网络接口,Traefik才能从容器网络内转发请求 - IP白名单中间件:通过
ipwhitelist中间件限制仅10.0.0.0/24网段能访问该路由 - Traefik端口绑定:把443端口也绑定到私有IP,避免公网意外访问到wg-easy的UI
- debug日志:开启后可查看Traefik的转发细节,排查问题后可注释关闭
验证步骤
- 执行
docker-compose down && docker-compose up -d重启服务 - 从10.0.0.0/24网段内访问
https://wg.my-domain.com,确认能正常打开UI且无404 - 尝试从非10.0.0.0/24网段访问,确认被拒绝(一般返回403或404)
内容的提问来源于stack exchange,提问作者Stuck
相关产品推荐
相关产品推荐

