Traefik
개요
이 가이드에서는 Remnawave 패널에 접근하기 위한 리버스 프록시로 Traefik을 사용합니다. 도메인 이름을 서버에 연결하고 Traefik을 구성합니다. Traefik은 SSL 인증서 발급을 자동으로 처리합니다.
계속하려면 등록된 도메인 이름이 필요합니다.
도메인을 서버에 연결
서버의 IP 주소를 확인하세요. 고정 IPv4 주소를 사용하는 것이 좋습니다.
이제 도메인 이름을 이 IP 주소에 연결해야 합니다.
예: my-super-panel.com -> 193.122.122.122
이를 수행하는 두 가지 방법이 있습니다:
- DNS 공급자 사용 (예: Cloudflare, Google Cloud 등)
- 레지스트라 사용 (예: Namecheap 등)
DNS 공급자
Cloudflare를 사용하는 경우 DNS 레코드에 A/AAAA 레코드(각각 IPv4 및 IPv6용)를 추가해야 합니다.
여기서 Cloudflare 계정에 로그인하고 원하는 도메인을 선택합니다.
페이지 왼쪽에서 DNS를 클릭한 다음 Records를 클릭합니다. Create record를 클릭합니다.
Type을 A로, Name을 @로 설정합니다.
서브도메인을 사용하려면 Name 필드에 서브도메인 이름(예: panel)을 입력해야 합니다.
IPv4 address 필드에 서버의 IP 주소를 입력하고 Save를 클릭합니다.
이제 DNS 레코드가 업데이트될 때까지 잠시 기다려야 합니다.
Cloudflare 제어판의 노란색 클라우드(도메인이 Cloudflare로 프록시됨)와 회색 클라우드(도메인이 Cloudflare로 프록시되지 않음) 사이에는 큰 차이가 있습니다.
Cloudflare가 귀하의 지역에서 잘 작동한다면 Cloudflare를 통해 도메인을 프록시하는 것이 좋습니다. (노란색 클라우드)

일부 DNS 공급자는 다른 인터페이스를 가지고 있지만 전체적인 과정은 동일합니다.
Traefik 설정
docker-compose.yml 생성
/opt/remnawave/traefik 디렉토리에 docker-compose.yml 파일을 만듭니다.
mkdir -p /opt/remnawave/traefik && cd /opt/remnawave/traefik && nano 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을 이메일 주소로 교체하세요.
아래 설정을 검토하고 노란색으로 강조된 줄을 찾으세요.
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을 도메인 이름으로 교체하세요.
아래 설정을 검토하고 노란색으로 강조된 줄을 찾으세요.
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 공식 페이지에서 최신 목록을 확인하는 것이 좋습니다.
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
그런 다음 remnawave.yml 설정 파일에 middleware ip-allow-list를 추가해야 합니다.
nano 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
그리고 다음과 같이 라우터 설정을 업데이트합니다:
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 제한 상태를 유지합니다.
브라우저에서 패널 열기
설정된 도메인 이름을 브라우저에서 열면 로그인 페이지가 표시됩니다.
