Dlaczego Reverse proxy jest nam potrzebne
Jest wiele powodów, aby w sieci domowej zastosować Reverse proxy:
- Aby posługiwać wygodnymi adresami z HTTPS zamiast adresów IP:port
- Aby przeglądarka zapamiętywała hasła do aplikacji osobno, zamiast wszystkie wymieszane na jednym adresie
- Ukryte przełączanie i podmienianie usług bez zmiany adresu
Konfiguracja dostawcy DNS (dns-01 challenge) na przykładnie OVH
Na stronie OVH createToken (opens new window) generujemy nowy zestaw kluczy API. Nazwa i opis aplikacji są dowolne, okres ważności polecam ustawić unlimited, a uprawnienia następująco:
GET /domain/zone/*****
PUT /domain/zone/*
POST /domain/zone/*
DELETE /domain/zone/*
API console (opens new window) pozwala nam na wywoływanie poszczególnych funkcji API, tym co może nam się przydać do zarządzania utworzonymi uprawnieniami to:
GET /me/api/application
GET /me/api/application/{applicationId}
GET /me/api/credential
GET /me/api/credential/{credentialId}
DELETE /me/api/application/{applicationId}
DELETE /me/api/credential/{credentialId}
Konfiguracja lokalna
Docker composer
version: "3.8"
services:
traefik:
image: traefik
network_mode: host
container_name: traefik
restart: unless-stopped
environment:
- "OVH_ENDPOINT=ovh-eu"
- "OVH_APPLICATION_KEY=xxxxxxxxxxx"
- "OVH_APPLICATION_SECRET=xxxxxxxxxxxxxx"
- "OVH_CONSUMER_KEY=xxxxxxxxxxxxxxxx"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "/global_config/composer/traefik/config.yaml:/traefik.yaml:ro"
- "/global_config/composer/traefik/config_2.yaml:/config_2.yaml:ro"
- "/global_config/docker_data/traefik/acme:/acme"
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik_dashboard.rule=Host(`traefik.home.robertolechowski.com`)"
- "traefik.http.routers.traefik_dashboard.tls.certresolver=myresolver"
- "traefik.http.routers.traefik_dashboard.service=traefik_service"
- "traefik.http.services.traefik_service.loadbalancer.server.port=7766"
Traefik konfiguracja (traefik.yaml, config_2.yaml)
global:
checkNewVersion: true
sendAnonymousUsage: false
log:
level: DEBUG
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
watch: true
exposedbydefault: false
file:
filename: "/config_2.yaml"
watch: true
metrics:
prometheus:
entryPoint: "traefik"
buckets: [0.1,0.3,1.2,5.0]
ping:
entryPoint: "traefik"
entryPoints:
http:
address: ":80"
https:
address: ":443"
traefik:
address: ":7766"
api:
debug: true
insecure: true
dashboard: true
certificatesResolvers:
myresolver:
acme:
email: "robertolechowski@gmail.com"
storage: "/acme/acme.json"
dnsChallenge:
provider: "ovh"
delayBeforeCheck: 0
resolvers: ["1.1.1.1:53", "8.8.8.8:53"]
http:
routers:
proxmox:
entryPoints: [https]
rule: "Host(`proxmox.home.robertolechowski.com`)"
tls:
certresolver: "myresolver"
service: proxmox
pihole:
entryPoints: [https]
rule: "Host(`pihole.home.robertolechowski.com`)"
tls:
certresolver: "myresolver"
service: pihole
services:
proxmox:
loadBalancer:
serversTransport: insecureTransport
servers:
- url: "https://192.168.30.70:8006"
passHostHeader: true
pihole:
loadBalancer:
servers:
- url: "http://192.168.30.90"
passHostHeader: true
serversTransports:
insecureTransport:
insecureSkipVerify: true