You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik 3配置问题:私有网络域名路由至wg-easy UI报404

问题分析与解决方案

你的配置出现404的核心原因有几个,同时还需要补充IP访问限制的配置,以下是具体修复方案:

关键问题点

  1. wg-easy UI仅监听本地:默认情况下wg-easy的UI可能只绑定127.0.0.1,导致Traefik无法从容器网络内访问到51821端口
  2. 缺少自定义Docker网络:虽然默认bridge网络能通信,但自定义网络更稳定,且能避免潜在的网络隔离问题
  3. 未配置IP访问控制:还没实现仅允许10.0.0.0/24网段访问的需求
  4. 可选:日志未开启:无法直观排查转发过程中的问题

修改后的完整配置

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

配置说明

  1. 自定义网络:创建traefik-net网络,让Traefik和wg-easy在同一网络内,确保Traefik能通过服务名wg-easy访问到容器的51821端口
  2. wg-easy接口监听:设置WEBUI_HOST=0.0.0.0,让UI服务绑定容器所有网络接口,Traefik才能从容器网络内转发请求
  3. IP白名单中间件:通过ipwhitelist中间件限制仅10.0.0.0/24网段能访问该路由
  4. Traefik端口绑定:把443端口也绑定到私有IP,避免公网意外访问到wg-easy的UI
  5. debug日志:开启后可查看Traefik的转发细节,排查问题后可注释关闭

验证步骤

  1. 执行docker-compose down && docker-compose up -d重启服务
  2. 从10.0.0.0/24网段内访问https://wg.my-domain.com,确认能正常打开UI且无404
  3. 尝试从非10.0.0.0/24网段访问,确认被拒绝(一般返回403或404)

内容的提问来源于stack exchange,提问作者Stuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 06:56:08