跳至主要内容

Traefik

概述

本指南將使用 Traefik 作為反向代理來存取 Remnawave 面板。我們將把網域指向伺服器並設定 Traefik。Traefik 將自動處理 SSL 憑證的頒發。

注意

您需要擁有已註冊的網域名稱才能繼續。

將網域指向您的伺服器

檢查您的伺服器 IP 位址。最好使用靜態 IPv4 位址。

現在,您需要將網域名稱指向此 IP 位址。

例如:my-super-panel.com -> 193.122.122.122

有兩種方法可以做到這一點:

  1. 使用 DNS 提供商(例如 Cloudflare、Google Cloud 等)
  2. 使用註冊商(例如 Namecheap 等)

DNS 提供商

如果您使用 Cloudflare,需要將 A/AAAA 記錄(分別用於 IPv4 和 IPv6)新增到您的 DNS 記錄。

此處登入您的 Cloudflare 帳戶並選擇所需的網域。

在頁面左側,點擊 DNS,然後點擊 Records。點擊 Create record
Type 設定為 A,將 Name 設定為 @

資訊

如果要使用子網域,應在 Name 欄位中輸入子網域名稱(例如 panel)。

IPv4 address 欄位中輸入您的伺服器 IP 位址,然後點擊 Save

現在需要等待一段時間讓 DNS 記錄更新。

資訊

Cloudflare 控制面板中的黃色雲(網域透過 Cloudflare 代理)和灰色雲(網域未透過 Cloudflare 代理)之間有很大區別。

如果 Cloudflare 在您的地區運行良好,最好透過 Cloudflare 代理網域。(黃色雲)

static

一些 DNS 提供商有不同的介面,但整體流程是相同的。

Traefik 設定

建立 docker-compose.yml

/opt/remnawave/traefik 目錄中建立 docker-compose.yml 檔案。

mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano docker-compose.yml

貼上以下設定。

docker-compose.yml
services:
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- remnawave-network
ports:
- '0.0.0.0:80:80'
- '0.0.0.0:443:443'
environment:
- TZ=UTC
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik.yml:/traefik.yml:ro
- ./letsencrypt:/letsencrypt
- ./config:/config:ro
- ./logs:/var/log/traefik
networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: true

建立靜態設定檔

/opt/remnawave/traefik 目錄中建立名為 traefik.yml 的靜態設定檔。

cd /opt/remnawave/traefik && nano traefik.yml

貼上以下設定。

注意

請將 REPLACE_WITH_YOUR_EMAIL 替換為您的電子郵件。

查看下面的設定,注意黃色高亮行。

traefik.yml
api:
dashboard: true
debug: true
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
serversTransport:
insecureSkipVerify: true
providers:
file:
directory: /config
watch: true
certificatesResolvers:
letsencrypt:
acme:
email: REPLACE_WITH_YOUR_EMAIL
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: http

log:
level: "INFO"
filePath: "/var/log/traefik/traefik.log"
accessLog:
filePath: "/var/log/traefik/access.log"

建立動態設定檔

/opt/remnawave/traefik/config 目錄中建立名為 remnawave.yml 的檔案。

mkdir -p /opt/remnawave/traefik/config && cd /opt/remnawave/traefik/config && nano remnawave.yml

貼上以下設定。

注意

請將 REPLACE_WITH_YOUR_DOMAIN 替換為您的網域名稱。

查看下面的設定,注意黃色高亮行。

remnawave.yml
http:
routers:
remnawave:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
tls:
certResolver: letsencrypt
service: remnawave

middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https

services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"

啟動容器

docker compose up -d && docker compose logs -f -t

通過 IP 限制面板存取

若要通過 IP 限制面板存取,可以建立名為 ip_allow_list.yml 的 middleware 檔案。

cd /opt/remnawave/traefik/config && nano ip_allow_list.yml

貼上以下設定。

注意

請將 REPLACE_WITH_YOUR_IP 替換為允許的 IP 位址(或使用 CIDR 表示法的 IP 範圍)。

查看下面的設定,注意黃色高亮行。

資訊

若您的網域名稱通過 Cloudflare 代理,則需要在 excludedIPs 清單中指定 Cloudflare 的 IP 範圍。

Cloudflare 定期更新其 IP 範圍,建議查閱 Cloudflare 官方頁面 取得最新清單。

ip_allow_list.yml
http:
middlewares:
ip-allow-list:
ipAllowList:
sourceRange:
- "REPLACE_WITH_YOUR_IP"
ipStrategy:
excludedIPs:
- 73.245.48.0/20
- 103.21.244.0/22
- 103.22.200.0/22
- 103.31.4.0/22
- 141.101.64.0/18
- 108.162.192.0/18
- 190.93.240.0/20
- 188.114.96.0/20
- 197.234.240.0/22
- 198.41.128.0/17
- 162.158.0.0/15
- 104.16.0.0/13
- 104.24.0.0/14
- 172.64.0.0/13
- 131.0.72.0/22

然後需要將 middleware ip-allow-list 新增到 remnawave.yml 設定檔中。

nano remnawave.yml

注意綠色行,這是需要新增的內容。

remnawave.yml
http:
routers:
remnawave:
rule: 'Host(`REPLACE_WITH_YOUR_DOMAIN`)'
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
tls:
certResolver: letsencrypt
service: remnawave

middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https

services:
remnawave:
loadBalancer:
servers:
- url: 'http://remnawave:3000'

允許公開存取訂閱路徑

為使訂閱系統正常運作,/api/sub/ 路徑必須可公開存取。 同時,面板其餘部分應保持 IP 存取限制的保護。

為此,您需要為同一網域定義兩個獨立的路由器——一個用於 /api/sub/(開放存取),另一個用於其他所有內容(受限存取)。

再次開啟 remnawave.yml 檔案:

nano /opt/remnawave/traefik/config/remnawave.yml

並按如下方式更新路由器設定:

remnawave.yml
http:
routers:
remnawave-sub:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`) && PathPrefix(`/api/sub/`)"
middlewares:
- remnawave-https-redirect
entrypoints:
- https
service: remnawave
tls:
certResolver: letsencrypt

remnawave-secure:
rule: "Host(`REPLACE_WITH_YOUR_DOMAIN`)"
entrypoints:
- https
middlewares:
- remnawave-https-redirect
- ip-allow-list
service: remnawave
tls:
certResolver: letsencrypt

middlewares:
remnawave-https-redirect:
redirectScheme:
scheme: https

services:
remnawave:
loadBalancer:
servers:
- url: "http://remnawave:3000"

此設定使 /api/sub/ 路徑可公開存取,而面板其餘部分仍受 IP 限制。

在瀏覽器中開啟面板

在瀏覽器中開啟設定的網域名稱,您將看到登入頁面。

login-page

疑難排解